Nullcon CTF - Web400 (400 pts)
Solución del reto HackIM’17 - Web400 del Nullcon CTF 2017 por Alguien y @h4ng3r.
Descripción
Análisis
El reto nos presenta un formulario de login y nos dice que obtendremos el flag tras iniciar sesión en él. Y no hay más, a darle…
Solución
Al revisar el código fuente de la web observamos un curioso comentario HTML:
<!-- The partial password is: kztu6fe1m68mwf7vl1g3grjzmocia043pmno83q3ati98c8r324dzc0hc7n41p6tdjg6p -->
<!-- sql file exported and backed up -->
Esto nos sugiere que hay un backup de la base de datos escondido por ahí. Tras pedir algunos ficheros como db.sql o backup.sql dimos con el correcto: database.sql
curl http://54.152.19.210/web400/database.sql
El contenido del backup era:
Observamos un único registro en la tabla users
. La contraseña del usuario jaffa
está hasheada con BCrypt. Debemos crackearla y para esto nos vale nuevamente el
comentario HTML que descubrimos al inicio.
<!-- The partial password is: kztu6fe1m68mwf7vl1g3grjzmocia043pmno83q3ati98c8r324dzc0hc7n41p6tdjg6p -->
Nos dan una parte de la contraseña y por lo visto no la vamos a encontrar en ninguna base de datos online o diccionario. Nos toca crear nuestro propio diccionario usando la contraseña parcial como prefijo y/o sufijo. Para ello escribimos un sencillo script en Python:
El script considera que el juego de carcteres es el mismo que el de la clave parcial (letras minusculas y números). Lo ejecutamos así:
python gen.py > dict.txt
Y luego usamos John The Ripper para crackear el hash:
echo '$2y$10$FalJ8SmqTDBv7Fr366RC9uW5hKJVZijsDqzgASh1kSGMsUFMMLGZq' > hash.txt
john --fork=8 --wordlist=dict.txt --format=bcrypt hash.txt
Varios minutos y una siesta más tarde…
john --show hash.txt
?:kztu6fe1m68mwf7vl1g3grjzmocia043pmno83q3ati98c8r324dzc0hc7n41p6tdjg6p7ld
Por último iniciamos sesión con el usuario jaffa y la clave kztu6fe1m68mwf7vl1g3grjzmocia043pmno83q3ati98c8r324dzc0hc7n41p6tdjg6p7ld para obtener el flag: