Dificultad
intermediate
Duración promedio
2 hrs
Solución
Tecnologías
linux
penetration testing
red team
kernel exploit
Dificultad
intermediate
Duración promedio
2 hrs
Solución
Tecnologías
linux
penetration testing
red team
kernel exploit
En la academia se encuentra desplegada una máquina virtual con una versión vulnerable de Ubuntu Server (16.04.1), que corre un kernel afectado por la falla Dirty Cow (CVE-2016-5195).
Como alumno, ya cuentas con acceso a este sistema mediante un usuario limitado llamado student
. Tu objetivo será identificar que el sistema es vulnerable, compilar y ejecutar un exploit real, y escalar tus privilegios para obtener acceso como root. Este ejercicio representa una situación realista donde un atacante local, sin privilegios administrativos, logra comprometer completamente el sistema aprovechando una falla en el núcleo del sistema operativo. Los objetivos serán:
g++
, el cual es un compilador que se utiliza para compilar y enlazar programas escritos en C++, generando un archivo ejecutable a partir del código fuente.root
./root
.Este tipo de explotación es típica en auditorías de seguridad avanzada y en entornos Red Team. Te permitirá conectar conceptos de bajo nivel del sistema operativo con técnicas ofensivas reales, de forma práctica y guiada.
Máquina Ubuntu vulnerable con kernel 4.4.0-21-generic
(o similar sin parchear)
Acceso como usuario no privilegiado a la maquina vulnerable (student:password123
)
Maquina kali linux (Atacante). Esta máquina es donde vas a realizar toda la preparación del exploit y debe contar con las siguientes herramientas:
🔧 Docker
: Usaremos Docker para lanzar un contenedor de Ubuntu 16.04 y compilar el exploit con las mismas librerías que usa la víctima. Esto garantiza compatibilidad y evita errores por versiones modernas de compiladores o glibc
.
🔧 g++
: Es el compilador de C++. Lo usaremos para compilar el exploit dirty.cpp
, que está escrito en este lenguaje. Nos permite generar un ejecutable (dirty
) desde el código fuente.
🔧 scp
(Secure Copy Protocol): Es una herramienta para copiar archivos de forma segura entre sistemas Linux. La usaremos para transferir el exploit compilado desde Kali hacia la máquina víctima.
🚨 Aviso Legal: Este repositorio contiene una versión limpia y comentada del exploit Dirty Cow (CVE-2016-5195), diseñada exclusivamente para fines educativos. Esta variante crea un nuevo usuario con privilegios de root explotando una condición de carrera en el subsistema de memoria del kernel de Linux. Este exploit es solo para uso educativo. Debe utilizarse en entornos controlados y legales, como laboratorios, máquinas virtuales de práctica o clases de ciberseguridad.
Inicia sesión en la máquina vulnerable con el usuario limitado y ejecuta:
1uname -a
Esto devuelve algo como:
1Linux dirtycow-lab 4.4.0-31-generic #50-Ubuntu SMP Tue Sep 6 15:42:33 UTC 2016 x86_64 x86_64 x86_64
Anota la version e investiga cómo explotar esa vulnerabilidad utilizando bases de datos como Exploit-DB, GitHub o searchsploit desde Kali. Para esta práctica te proporcionamos un exploit funcional y documentado que puedes descargar.
⚠️ ¡IMPORTANTE! La máquina vulnerable no tiene herramientas de compilación instaladas, ni permisos
sudo
para agregarlas. Por eso, debemos compilar el exploit en Kali, dentro de un contenedor Docker con Ubuntu 16.04, que tenga las mismas versiones de glibc, libstdc++ y librerías del sistema de la maquina vulnerada porque de lo contrario dará problemas de versiones.
Instala Docker en Kali:
1sudo apt update 2sudo apt install docker.io -y 3sudo systemctl start docker 4sudo systemctl enable docker
Descarga la imagen de Ubuntu 16.04:
1sudo docker pull ubuntu:16.04
Lanza un contenedor:
1sudo docker run -it --name compile-ubuntu16 ubuntu:16.04
Instala herramientas de compilación:
1apt update 2apt install build-essential libutil-dev -y
Crea el archivo dentro del contenedor:
1nano dirty.cpp
(Pega el código completo del exploit dirty.cpp proporcionado por la academia o desde Exploit-DB 40847)
Compila el binario:
1g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dirty dirty.cpp -lutil
Sal del contenedor:
1exit
Copia el binario compilado desde el contenedor a Kali:
1sudo docker cp compile-ubuntu16:/dirty ./dirty
Transfiere el binario a la víctima:
1scp dirty student@<IP_VICTIMA>:/home/student
En la víctima, ejecútalo:
1chmod +x dirty 2./dirty
Si el exploit tiene éxito veras un mensaje diciendote la contraseña asignada al usuario root.
root
.root
ingresando la contraseña generada./root/flag.txt
. Si todo funcionó correctamente, verás el contenido de la flag.