Entrada

SSRF via flawed request parsing

Laboratorio de Portswigger sobre HTTP Host Header Attacks

SSRF via flawed request parsing

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

Esta entrada está licenciada bajo CC BY 4.0 por el autor.