SSTI in Flask(未完成)
(0)
  • 沙盒逃逸
    模板引擎让网站实现界面与数据分离,业务代码与逻辑代码的分离,提高了开发效率,但是可能会存在安全问题,模板引擎会提供沙盒机制。

在一个代码执行环境下,通过过滤和限制,拿到系统命令执行权限

  1. route装饰器

    @app.route('/')

    route()装饰器可以让url触发绑定的函数

  2. 模板渲染

    render_temple   渲染指定文件
    render_temple_string    渲染字符串

    render_temple_string可能会引发ssti,如果渲染的参数用户可控就可能出现ssti漏洞

  • 基础知识:
  1. 类继承
 __base__ :获取对象的基类,一般情况下是object
 __mro__ : 获取对象的基类,用列表显示出整个继承链的关系,用__mro__[-1]可以获取到object
 __subclasses()__ : 返回此对象的子类,一个列表

可以从一个变量,返回到基类中,再获得此基类所有实现的类。

  1. 魔术方法
    利用python中的魔术方法找到自己要用的函数 python内置函数
 __dict__ :保存类实例或对象实例的属性变量键值对字典
           类的静态函数、类函数、普通函数、全局变量以及一些内置的属性都是放在类__dict__里的
           对象的__dict__中存储了一些self.xxx的一些东西
 __class__ : 返回一个实例所属的类
 __globals : 该属性是函数特有的属性,记录当前文件全局变量的值。函数以字典类型返回当前位置的全 
             部全局变量
 __getattribute__ : 在实例化的对象进行.操作的时候,都会自动调用__getattribute方法,通过该方 
                    法获取实例、类、函数的属性
 __init__ : 类的初始化方法
__builtins__ :内建模块的引用,在任何地方都是可见的(包括全局),每个 Python 脚本都会自动 
             加载,这个模块包括了很多强大的 built-in 函数,例如eval, exec, open等等
  • 利用方法

[GYCTF2020]FlaskApp

有一个报错页面是在debug模式下,解密出错的debug页面
从这个页面可以看出python和模块的文件路径信息以及页面源码

先看一下报错信息

先获取了text参数,解码后会经过waf,然后执行render_template_string函数,就可能存在ssti

可以在这个页面中打开python控制台,但是需要输入一个pin码,然后可以在报错页面执行任意python代码

flask框架中有全局变量,对象,函数,我们可以直接访问或调用,就是通过查配置文件

  • 执行任意命令
  • 直接读取文件
    ().__class__.__base__.__subclasses__()
    用__class__拿到内置类对象对应的类,然后用__base__得到基类<class 'object'>,再用__subclasses()__拿到子类,找子类可利用的类
    <type 'file'>
    找file对象,然后查找file位置

用dir查看内置方法

 dir(().__class__.__bases__[0].__subclasses__()[40])
 ().__class__.__bases__[0].__subclasses__()[40]('filename').readlines()
  • Bypass
  1. 过滤关键字
    这个题是直接被ban了可以用字符串拼接或者切片

如果题目是字符串被替换为空,可以双写绕过

答案:
https://blog.csdn.net/qq_45521281/article/details/106639111
https://blog.csdn.net/SopRomeo/article/details/105875248

这道题对我太难了,有好多知识盲区,步骤都是参考其他文章一步一步来的,所以我想等对一些知识点再熟悉后,重新回过头来看这些东西

参考链接:
https://www.anquanke.com/post/id/188172
https://www.yuque.com/u2167937/rclxdh/czwhxr

本文为作者hackerbo.com发布,未经允许禁止转载!
上一篇 下一篇
评论
暂无评论 >_<
加入评论