网络安全2026-07-14
CTF下的AI安全
#网络安全#CTF
[[*CTF 2022]Alice's warm up - NSSCTF](https://www.nssctf.cn/problem/2230)
“欢迎参加XCTF-*CTF2022,我是Alice,对AI安全很感兴趣。在你们享受那些纯粹的AI安全挑战之前,我准备了一个简单的热身题。就像人类一样,AI在运行之前也需要热身。你能在这些初始化的参数中发现什么异常吗?”
hint.py
import string
assert len(flag)==16
assert flagset=string.printable[0:36]+"*CTF{ALIZE}"
assert 是 Python 里的断言语句,意思是:“我断定这个条件一定为真,如果为假,程序立刻报错停止说明flag的长度一定等于16
string.printable:这是 Python 标准库string模块里的一个字符串常量,包含了 100 个可打印字符:
- 数字:
0123456789(10个)
- 大写字母:
ABCDEFGHIJKLMNOPQRSTUVWXYZ(26个)
- 小写字母:
abcdefghijklmnopqrstuvwxyz(26个)
- 标点符号:
!"#$%&'()*+,-./:;<=>?@[\]^_{|}~`(32个)
- 空格和制表符等(6个)
string.printable[0:36]:取前 36 个字符,也就是:
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ(10个数字 + 26个大写字母)
+ "*CTF{ALIZE}":在末尾拼接上*CTF{ALIZE}。
所以 flagset 实际上就是:
text
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ*CTF{ALIZE}
总共 36 + 10 = 46 个字符。
assert flagset == ...:断言flagset必须等于这个字符串。
思路
- data/0 2209 个浮点数 = 47×47 矩阵路
- 找 == 1.0 的位置 每行恰好有一个 1.0
- 翻译为路径 0->0, 1->1, ..., *->C->T->F->{->A->L->I->Z->E->}->}
- 理解目标 找从 * 到 } 的长度为 16 的路径
- DFS 搜索 在 47 个节点中找路径
- 得到 Flag *CTF{qx1jukznmr}
EXP路径:C:\Users\lenovo\Desktop\CTFAI安全\archive