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.
| PUERTO | ESTADO | SERVICIO | VERSIÓN |
|---|---|---|---|
| 22/tcp | OPEN | ssh | OpenSSH 7.6p1 Ubuntu |
| 80/tcp | OPEN | http | Golang net/http |
ENUMERACIÓN WEB — Fuzzing de directorios
La web muestra una página temática de Alicia en el País de las Maravillas. El código fuente no revela nada útil, así que se recurre al fuzzing de directorios.
Se descubre el directorio /r. Siguiendo la temática de la máquina ("Follow the White Rabbit"), se prueba la ruta completa /r/a/b/b/i/t/.
/r/a/b/b/i/t/ contiene un párrafo oculto con display:none que expone credenciales SSH directamente en el HTML:alice:HowDoothTheLittleCrocodileImproveHisShiningTail
ACCESO INICIAL — Shell como alice
Con las credenciales obtenidas se accede al sistema como alice. El directorio personal contiene dos ficheros propiedad de root que no se pueden editar.
root.txt está en /home/alice y user.txt está en /root. Hay que llegar a root para leer ambas.
Se comprueba qué comandos puede ejecutar alice con privilegios elevados.
rabbit. El script importa la librería random sin ruta absoluta, lo que permite crear un random.py malicioso en el mismo directorio. Python buscará primero en el directorio actual antes de en las rutas del sistema.
ESCALADA — alice → rabbit via Python hijacking
Se crea un fichero random.py malicioso en /home/alice que spawna una shell. Al ejecutar el script con sudo como rabbit, Python importa nuestro módulo en lugar del legítimo.
/home/alice). Al existir un random.py local, lo carga en lugar del módulo estándar del sistema. El proceso hereda el UID de rabbit porque se lanzó con sudo -u rabbit.
ESCALADA — rabbit → hatter via PATH hijacking
En el directorio personal de rabbit se encuentra un binario SUID llamado teaParty. Se analiza con strings para entender su comportamiento.
date sin ruta absoluta. Creando un date falso en /tmp y anteponiendo ese directorio al PATH, el binario ejecutará nuestro script en lugar del comando legítimo del sistema.
/tmp al inicio del PATH. Hacer su hatter con la contraseña real da una sesión limpia, lo que evita problemas al usar herramientas del sistema que puedan verse afectadas por el PATH adulterado.
ESCALADA A ROOT — Capabilities en Perl
Con una sesión limpia como hatter se enumeran las capabilities asignadas a binarios del sistema.
cap_setuid permite al binario cambiar su UID efectivo a cualquier valor, incluido 0 (root), sin necesitar el bit SUID. El flag ep indica que la capability está tanto en el conjunto effective como en el permitted, lo que significa que está activa desde el inicio de la ejecución.
POSIX::setuid(0) para fijar el UID real y efectivo a 0. Gracias a cap_setuid esto está permitido sin ser root. A continuación ejecuta /bin/bash -p, que respeta el UID efectivo 0 gracias al flag -p.
CADENA DE ATAQUE
/r → ruta /r/a/b/b/i/t/ contiene párrafo oculto con credenciales SSH de alicesudo -u rabbit python3.6 walrus_and_the_carpenter.py → random.py malicioso en directorio del script → shell como rabbitdate sin ruta absoluta → /tmp/date malicioso + PATH=/tmp:$PATH → shell como hatter → contraseña en password.txtgetcap revela /usr/bin/perl = cap_setuid+ep → POSIX::setuid(0) → /bin/bash -p → root → flags en /root/user.txt y /home/alice/root.txt