← 返回博客列表

CTF下的AI安全

2026-07-14·网络安全、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