flask模板注入
flask模板注入
作为 Web 中的难点还是有必要涉猎一番
参考文章: flask之ssti模版注入从零到入门
模板代码
代码基于 Python,使用 Flask 框架,模板使用 Jinja2,需要额外下载 Flask 和 Jinja2,用 PyCharm 可能会简单一点。
解释:index 是没有漏洞点的,漏洞点在 test 中。
1 | |
示例 index.html
1 | |
SSTI 利用示例
利用 Python 的类继承,我们可以反向调用其他的函数。
一般是 <class 'os._wrap_close'>,每个版本不同,Python 3.8 中为 133。
1 | |

CTF 中的一些绕过 Tips
过滤
[]等括号
使用getitem绕过。例如原 POC:{{"".class.bases[0]}}
绕过后:{{"".class.bases.getitem(0)}}过滤
subclasses,拼凑法
原 POC:{{"".class.bases[0].subclasses()}}
绕过后:{{"".class.bases[0]['subcla' + 'sses']}}过滤
class
使用session绕过:
POC:{{session['cla' + 'ss'].bases[0].bases[0].bases[0].bases[0].subclasses()[133]}}多个
bases[0]是因为一直在向上找object类。使用mro更方便:{{session['__cla' + 'ss__'].__mro__[12]}}
或{{request['__cl' + 'ass__'].__mro__[12]}}
示例:2017 SWPU-CTF 的一道沙盒 Python 题
一张图总结一下 SSTI 的一些模板渲染引擎及利用

flask模板注入
https://fogpost.top/2025/01/10/flask模板注入/