RECONOCIMIENTO — Escaneo de puertos
Se lanza un escaneo completo para descubrir la superficie de ataque disponible en la máquina víctima.
| PUERTO | ESTADO | SERVICIO | VERSIÓN |
|---|---|---|---|
| 22/tcp | OPEN | SSH | OpenSSH 7.6p1 |
| 80/tcp | OPEN | HTTP | Apache 2.4.29 |
La superficie es reducida: una web y SSH. Al acceder a http://<IP_VICTIMA> aparece la página de una empresa de reparación de coches. A simple vista no hay ningún panel de login ni ruta obvia de acceso.
ENUMERACIÓN WEB — Descubriendo el panel de login
Configuramos Burp Suite como proxy del navegador e interceptamos el tráfico al cargar la página principal. En el Site map de Burp aparece, entre los recursos cargados pasivamente, una petición GET a /cdn-cgi/login/script.js, lo que delata la existencia del directorio.
Accedemos directamente a la ruta descubierta:
Aparece un panel de login con la opción "Login as Guest".
IDOR — Enumerando el Access ID del administrador
Iniciamos sesión pulsando "Login as Guest". La aplicación nos redirige a:
El parámetro id=2 referencia directamente el registro de nuestra cuenta en la base de datos. Este es el indicador clásico de un IDOR (Insecure Direct Object Reference): el servidor confía ciegamente en el valor del parámetro sin verificar que el usuario tenga permisos para acceder a ese recurso.
id. No existe ningún control de autorización en el servidor.
Cambiamos el parámetro a id=1, ya que el primer usuario registrado suele ser el administrador:
| ACCESS ID | NAME | |
|---|---|---|
| 34322 | admin | [email protected] |
COOKIE HIJACKING — Escalada a administrador
La sesión se gestiona mediante dos cookies: role y user. Con el Access ID del administrador obtenido por IDOR podemos suplantar su sesión modificando estas cookies desde las DevTools del navegador (F12 → Application → Cookies).
role a admin y user a 34322 (el Access ID obtenido por IDOR).| COOKIE | VALOR ORIGINAL (GUEST) | VALOR MODIFICADO |
|---|---|---|
role |
guest | admin |
user |
2233 | 34322 |
WEB SHELL — Ejecución remota de código
Con la sesión de administrador activa accedemos a la sección de Branding Image Uploads. El formulario permite subir archivos sin validar su tipo ni contenido, lo que nos permite subir directamente una reverse shell en PHP.
Subimos el fichero a través del formulario y nos ponemos en escucha con netcat:
Activamos la shell navegando al archivo subido:
ESCALADA HORIZONTAL — De www-data a robert
Enumeramos el sistema de archivos en busca de credenciales. En el directorio de la aplicación de login encontramos un archivo de configuración de base de datos con credenciales en texto plano:
El usuario robert reutiliza la misma contraseña para su cuenta del sistema:
PRIVILEGE ESCALATION — SUID + Path Hijacking
-group bugtracker para identificar archivos del grupo? → find
Buscamos binarios con el bit SUID activado pertenecientes al grupo bugtracker, del que robert es miembro:
-rws) indica el bit SUID (Set owner User ID). Sin importar quién lo ejecute, el binario siempre corre con los privilegios de su dueño: root.
Ejecutamos el binario para analizar su comportamiento:
El binario llama a cat usando una ruta relativa. Para resolverlo, el sistema busca en los directorios del $PATH de izquierda a derecha y usa el primero que encuentre.
$PATH, podemos hacer que el binario (ejecutado como root) llame a un cat malicioso nuestro en lugar del legítimo del sistema.
El binario SUID ejecuta nuestro cat con privilegios de root, que lanza una bash con -p preservando el EUID. Leemos la flag con ruta absoluta para no invocar de nuevo nuestro script:
CADENA DE ATAQUE
/cdn-cgi/login con el panel de login de la aplicaciónid=2 a id=1 en la URL se filtra el Access ID 34322 del administrador sin ningún control de autorizaciónrole=admin y user=34322 en las cookies el servidor concede acceso completo al panel de uploadsshell.php → reverse shell desde /uploads/shell.phpdb.php expone la contraseña en texto plano → robert reutiliza la misma contraseña en el sistema → flag de usuariobugtracker (SUID root) llama a cat con ruta relativa → /tmp/cat malicioso + PATH manipulado → shell de root