SSRF via flawed request parsing
Laboratorio de Portswigger sobre HTTP Host Header Attacks
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Este laboratorio es vulnerable a Routing-based SSRF a través de la cabecera Host porque interpreta incorrectamente el host al que va dirigida la petición. Podemos aprovechar este fallo para acceder a un panel de administración interno inseguro ubicado en una dirección IP interna. Para resolver el laboratorio, tenemos que acceder al panel de administración interno ubicado en el rango 192.168.0.0/24 y luego eliminar al usuario carlos
Resolución
Al acceder a la web vemos esto
He capturado la petición a la raíz de la web y he lanzado la herramienta Host Header Inchecktion https://github.com/PortSwigger/host-header-inchecktion.git para ver si existía alguna vulnerabilidad relacionada con la cabecera Host. Para lanzar la herramienta debemos hacer click derecho > Extensiones > Host Header inchecktion > Collaborator payload
Si nos vamos a Target > Site map vemos que la extensión ha detectado un SSRF
Si enviamos la petición al Repeater vemos que se usa una URL absoluta y que como valor de la cabecera Host se usa un dominio que pertenece a Burpsuite Collaborator
Si no empleamos la una URL absoluta nos devuelve este error, esto se puede deber a que se está implementando algún tipo de sanitización
Una vez sabemos esto, como el laboratorio nos dice que debemos buscar una dirección IP en este rango 192.168.0.0/24. Podemos usar la herramienta ipRangeGenerator para generarlo https://github.com/Justice-Reaper/ipRangeGenerator.git
1
2
3
4
5
python ipRangeGenerator.py -cidr "192.168.0.0/24" -o ips.txt
[+] Generating IPs for network 192.168.0.0/24
[+] Output file: ips.txt
[+] Generating IPs: Completed! 254 IPs generated in ips.txt
[+] Progress: 100%
Enviamos la petición anterior al Intruder, marcamos el valor de la cabecera Host, cargamos el diccionario y desmarcamos la checkbox que dice Update Host header to match target
Lo siguiente que debemos hacer es desactivar el Payload encoding y pulsar sobre Start attack
Vemos que nos hace un redirect a /admin cuando es Host es 192.168.0.228. Esto significa que esa es una IP de la red interna
Enviamos la petición al Repeater
Si pulsamos en `Follow redirection nos devuelve el mismo error que antes porque no estamos usando una URL absoluta
Cuando usamos una URL absoluta, ya podemos ver el contenido de la web
En este caso, el render no funciona correctamente, así que vamos a hacer click derecho > Open response in browser
Para eliminar al usuario carlos hacemos esta petición y la interceptamos con Burpsuite
Tenemos que cambiar el valor de la cabecera Host y proporcionar una URL absoluta para poder eliminar al usuario. Una vez hecho esto, vemos que nos devuelve un 302 Found, lo cual significa que hemos podido eliminar al usuario carlos
















