Host header authentication bypass
Laboratorio de Portswigger sobre HTTP Host Header Attacks
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Este laboratorio hace una suposición sobre el nivel de privilegios del usuario basándose en la cabecera HTTP Host. Para resolver el laboratorio, tenemos que acceder al panel de administración y eliminar al usuario carlos
Resolución
Al acceder a la web vemos esto
Si pinchamos sobre My account vemos esto
He inspeccionado el código fuente de la web y no he encontrado nada interesante, por lo que he fuzzeado rutas. Lo más interesante que he encontrado ha sido la ruta /admin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
ffuf -t 10 -w /usr/share/seclists/Discovery/Web-Content/common.txt -u https://0a4600680322b5bc82620b8a00e30060.web-security-academy.net/FUZZ
/'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v2.1.0-dev
________________________________________________
:: Method : GET
:: URL : https://0a4600680322b5bc82620b8a00e30060.web-security-academy.net/FUZZ
:: Wordlist : FUZZ: /usr/share/seclists/Discovery/Web-Content/common.txt
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 10
:: Matcher : Response status: 200-299,301,302,307,401,403,405,500
________________________________________________
ADMIN [Status: 401, Size: 2658, Words: 1058, Lines: 58, Duration: 58ms]
Admin [Status: 401, Size: 2658, Words: 1058, Lines: 58, Duration: 60ms]
Login [Status: 200, Size: 3251, Words: 1327, Lines: 68, Duration: 63ms]
admin [Status: 401, Size: 2658, Words: 1058, Lines: 58, Duration: 59ms]
analytics [Status: 200, Size: 0, Words: 1, Lines: 1, Duration: 56ms]
favicon.ico [Status: 200, Size: 15406, Words: 11, Lines: 1, Duration: 56ms]
filter [Status: 200, Size: 10808, Words: 5077, Lines: 203, Duration: 70ms]
login [Status: 200, Size: 3251, Words: 1327, Lines: 68, Duration: 57ms]
logout [Status: 302, Size: 0, Words: 1, Lines: 1, Duration: 54ms]
my-account [Status: 302, Size: 0, Words: 1, Lines: 1, Duration: 57ms]
robots.txt [Status: 200, Size: 31, Words: 3, Lines: 3, Duration: 53ms]
Si intentamos acceder a /admin nos sale este mensaje
Si realizamos esta misma petición desde Burpsuite vemos que nos devuelve el código de estado 401 Unauthorized
Para intentar bypassear el código de estado 401 Unauthorized vamos a usar BypassFuzzer https://github.com/intrudir/BypassFuzzer-Burp.git. Para poder usarla tenemos que hacer click derecho > Extensions > BypassFuzzer > Send to BypassFuzzer
Una vez hecho esto, nos vamos a la pestaña BypassFuzzer y pulsamos sobre Start Fuzzing. En mi caso he parado el ataque porque he visto varios código 200 OK. Me ha llamado la atención el payload que usa la cabecera Host: localhost porque tiene un content-length diferente
Si mandamos esa petición al Repeater, podemos comprobar que hemos cambiado el valor de la cabecera Host por localhost y de esta forma hemos podido acceder al panel administrativo
Si hacemos click derecho > Open response in browser y pegamos el enlace en el navegador, podemos ver el panel administrativo
Si pinchamos sobre el usuario carlos para eliminarlo y capturamos la petición con Burpsuite, vemos esto
Para que funcione debemos de cambiar nuevamente el valor de la cabecera Host por localhost. Una vez hecho esto, ya podemos eliminar al usuario carlos










