zoukankan      html  css  js  c++  java
  • SSTI注入

    引自 https://www.cnblogs.com/tiaopidejun/p/12357245.html

    ssti注入又称服务器端模板注入攻击(Server-Side Template Injection),和sql注入一样,也是由于接受用户输入而造成的安全问题。

    它的实质就是服务器端接受了用户的输入,没有经过过滤或者说过滤不严谨,将用户输入作为web应用模板的一部分,但是在进行编译渲染的过程中,执行了用户输入的恶意代码,造成信息泄露,代码执行,getshell等问题。

    这个问题主要是出在web应用模板渲染的过程中,目前比较流行的渲染引擎模板主要有:smarty,twig,jinja2,freemarker,velocity

    flask 中渲染的方法有两种:

    render_template
    render_template_string
    

    render_template()是渲染文件的

    render_template_string()是渲染字符串的

    不正确的使用render_template_string()可能会引发SSTI

    flask使用jinja2作为渲染引擎,在网站的根目录下templates文件夹用来存放html文件(模板文件)

    {{}}在jinja2中作为变量包裹标识符,不仅可以传递变量同时也可以执行简单的表达式

    SSTI文件读取/命令执行/文件包含

    通过python的对象的继承来一步步实现文件读取和命令执行!!

    方法:

    找到父类<type 'object'>–>寻找子类–>找关于命令执行或者文件操作的模块
    

    重要的魔术方法

    __class__  返回类型所属的对象
    __mro__    返回一个包含对象所继承的基类元组,方法在解析时按照元组的顺序解析。
    __base__   返回该对象所继承的基类
    // __base__和__mro__都是用来寻找基类的
    
    __subclasses__   每个新类都保留了子类的引用,这个方法返回一个类中仍然可用的的引用的列表
    __init__  类的初始化方法(找到重载过的__init__类(在获取初始化属性后,带wrapper的说明没有重载,寻找不带warpper的))
    __globals__  对包含函数全局变量的字典的引用
    __dict__ 保存类实例或对象实例的属性变量键值对字典
    __bases__ 返回类型列表
    __builtins__查看其引用
    

    具体超详细解法见 https://bbs.ichunqiu.com/thread-47685-1-1.html

  • 相关阅读:
    Numpy:数组维度转换:ravel()、shape=()、reshape()、np.tile()
    Numpy:使用numpy.sort()、numpy.argsort()获取排序后的值
    Numpy:数组的sum、max、argmax 函数
    Numpy:通过算数运算取值、替换值
    Numpy:数据类型简述
    Django路径问题
    Linux常用基本命令
    Django--DRF操作
    初始化django项目结构
    Django基础
  • 原文地址:https://www.cnblogs.com/buchuo/p/12559408.html
Copyright © 2011-2022 走看看