Una Al Mes - Julio 2020 (Español)

Content
UAM - Julio#
Volvemos a la carga con el reto mensual de Una Al Mes, ¿qué troleada nos esperará hoy?
Reconocimiento inicial#
Nos encontramos una web en la que podemos registrarnos e iniciar sesión.
Revisando el código de la web vemos el siguiente fragmento de JavaScript ofuscado:
Limpiando y ordenando un poco
Lo que nos dará una pista sobre la existencia del endpoint /print
Tras registrarnos e iniciar sesión, accederemos a un ToDo List, donde podemos añadir y eliminar tareas.
Probando varios payloads típicos de STI/XSS no obtenemos resultados, por lo que pasamos al endpoint /print
.
pero que
Como curiosidad, si hacemos From Hex
en Cyberchef de la dirección bitcoin 0x7369206375656c61206375656c6120582d44
obtenemos si cuela cuela X-D
. Baia baia, ya estaba preparando la cartera.
Activando /print#
Si intentamos acceder a /print
, veremos que no tenemos permiso, y nos redirige a /subscribe
Probando varias SQLi típicas con una de ellas nos saltamos la validación del token
1" or "1"="1
Y dándole a imprimir:
¡Ojo! ¡Tenemos texto en cursiva!
Parece que cualquier fragmento HTML será interpretado por el conversor PDF.
El conversor PDF#
Descargando el PDF y analizándolo con exiftool
obtenemos la siguiente información:
El campo más interesante es Creator
, buscando en Google sobre la herramienta wkhtmltopdf
, vemos que se trata de un conversor HTML a PDF:
- Web: https://wkhtmltopdf.org/
- Versión actual: 0.12.6
- Versión en el servidor: 0.12.5
- Changelog:
Interesante, en la versión que utiliza el servidor parece que podemos leer cualquier fichero.
Ruta A: Usando iframe#
Si accedemos al servicio localhost:8000
, nos dirá una pista con la localización de la flag, aunque no es necesario:
Por lo que nos quedaria pedir la flag.
Y ya estaría resuelto
Flag: UAM{d03255b2e66affef2fd2c86332a26890}
Solo quedaria volver a la página de la UAM y enviarla.
Espera un momento…
Si nos fijamos hay un scroll bastante sospechoso.
Probemos a hacer el iframe gigantesco y ver que más nos puede ofrecer.


¡Ahora sí!
Flag: UAM{dfe2e5a16a35044e273ca531939787b8}
Ruta B: Usando script#
En una issue de Github del propio proyecto (https://github.com/wkhtmltopdf/wkhtmltopdf/issues/4536) tenemos un PoC funcional:
Adaptándolo ligeramente para nuestro caso de uso:
Extra! Extra!#
En la raíz podemos ver la URL http://34.253.120.147:1730/redirect?url=%2Fregister
, la cual es un Open Redirect de manual.
Ejemplo: http://34.253.120.147:1730/redirect?url=https://www.youtube.com/watch?v=dQw4w9WgXcQ
Podría haber sido necesaria en caso de que el conversor PDF fuera más estricto o hubiera un WAF que nos eliminara/filtrara el payload antes de pasarselo al conversor, por ejemplo eliminando todas las referencias a páginas externas o bloqueando el protocolo file, algo asi como if !URL.startsWith('http://34.253.120.147:1730...'
.
Para saltarnos restricciones así, podríamos usar:
Cualquier feedback sobre el writeup es bienvenido :)