
Descripción
This lab is vulnerable to server-side template injection due to the way it unsafely uses a Tornado template. To solve the lab, review the Tornado documentation to discover how to execute arbitrary code, then delete the morale.txt
file from Carlos’s home directory.
You can log in to your own account using the following credentials: wiener:peter
Basic server-side template injection (code context) writeup
En la descripción del laboratorio, nos habla de que el servidor utiliza ‘tornado.template’. Revisaremos su documentación. Un ejemplo de su código es el siguiente:
{% for student in [p for p in people if p.student and p.age > 23] %}
<li>{{ escape(student.name) }}</li>
{% end %}
- Para el código Python usa {%código%}
- Para el texto que aparecerá en la web usa {{texto}}
Iniciamos sesión con el usuario ‘wiener’ y la contraseña ‘peter’. Vemos que nos aparece la opción de seleccionar un nombre favorito. La petición recogida en el ‘Logger’ es la siguiente:

Nos llevaremos la petición al ‘Repeater’ con Ctrl + R o Click derecho -> Send to Repeater. Allí cambiaremos el valor de ‘blog-post-author-display’ por ‘user.nickname}}{{122555’.
Nota: Para insertar caracteres deberemos de poner sólo una llave para abrir y cerrar.
Veremos que en la página si dejamos un comentario nuestro nombre será:

Esto nos indica que podemos inyectar valores. Ahora cambiaremos el valor por lo siguiente:
blog-post-author-display=user.nickname}}{%import+os%}{{os.system('ls')}}
Esto nos devolverá que el archivo ‘morale.txt’ se encuentra en el directorio de trabajo actual:

Cambiaremos el código por el siguiente:
user.nickname}}{%import+os%}{{os.system('rm+morale.txt')}}
Al volver al navegador y actualizar la página del comentario completaremos el laboratorio:
