
Una guida compatta al pivoting di rete per test di penetrazione / sfide CTF.
Non usare le richieste di echo ICMP (ping) per testare i proxy SOCKS.
SOCKS è un protocollo Internet che scambia pacchetti di rete tra un client e un server attraverso un server proxy. In pratica, un server SOCKS inoltra le connessioni TCP verso un indirizzo IP arbitrario e fornisce un mezzo per inoltrare pacchetti UDP.
Dovresti testarlo usando un protocollo basato su TCP (ad es. provare a usare SSH o inviare una richiesta HTTP GET a un host attraverso il tunnel di pivoting).
NMAP deve essere usato con TCP connect scan (-sT) e senza ping (-Pn)
Questo vale anche per gli scan di versione (-sV) e di script (-sC). Vanno usati in combinazione con -sT e -Pn.
Esempi:
proxychains nmap -sT -Pn -p- x.x.x.x
proxychains nmap -sT -Pn -sV -sC -p 21,80,443,445 x.x.x.x
Suggerimento: Puoi caricare naabu sulla macchina vittima e fare scan come un boss.
Uso di script e binari con proxychains
Un suggerimento per usare proxychains è assicurarsi che, se stai eseguendo un programma interpretato (come uno script Python), sia una buona idea fare riferimento esplicitamente al binario Python prima dello script, anche se lo script inizia con uno shebang, ad esempio:
proxychains4 [-q -f proxychains.conf] python python_script.py
Senza questo riferimento specifico all'interprete dello script, a volte il traffico generato dallo script non verrà instradato attraverso il proxy come intendevi e la connessione di rete fallirà. Fonte del suggerimento
Decommenta la riga "quite mode" in /etc/proxychains.conf per evitare output stdout che a volte possono essere frustranti.
Questo è soltanto un suggerimento.
Ti permette di creare un socket sulla macchina locale (client SSH), che funge da server proxy SOCKS. Quando un client si connette a questa porta, la connessione viene inoltrata alla macchina remota (server SSH), che poi la inoltra a una porta dinamica sulla macchina di destinazione.
Come configurarlo:
Modifica /etc/proxychains.conf e applica quanto segue:
Configura l'SSH Dynamic Port Forwarding:
ssh -D 127.0.0.1:9050 user@victim-IP
Esempi di utilizzo:
Con x.x.x.x come indirizzo IP di un host che appartiene alla rete tunnelizzata:
proxychains nmap -sT -Pn -p- x.x.x.x
proxychains smbmap -H x.x.x.x
proxychains ssh [email protected]
Per usare Firefox attraverso il tunnel:
proxychains firefox
Se stai cercando come ottenere una reverse shell attraverso un tunnel di pivoting, questo è ciò che ti serve. Ti permette di inoltrare una porta sulla macchina remota (vittima) a una porta sulla macchina locale (attaccante).
Come configurarlo:
Accedi via SSH alla macchina vittima.
Modifica /etc/ssh/sshd_config e applica quanto segue:
*Questo è molto importante e molte guide in giro per il web non lo menzionano. Se non lo fai, potrai impostare il tunnel solo su 127.0.0.1 anziché su 0.0.0.0, che finirà per non inoltrare il traffico quando proviene da qualsiasi host tranne localhost.
sudo service ssh restartConfigura l'SSH Remote Port Forwarding:
In sostanza, dopo averlo configurato come detto, il comando è semplice come questo:
ssh -R 2222:*:2222 user@victim-IP
Per verificare se funziona, puoi fare quanto segue:
Metti in ascolto (ad es. netcat) sulla tua macchina attaccante (sulla porta configurata per l'inoltro remoto, in questo esempio 2222) e invia una richiesta dalla macchina vittima a se stessa (localhost). In questo esempio, sarebbe nc 127.0.0.1 2222. Se la tua macchina attaccante riceve la connessione, significa che a) funziona e b) ogni connessione dagli host in pivoting a victimip:2222 verrà inoltrata alla macchina attaccante.
Puoi impostare più porte in questo modo:
ssh -R 2222:*:2222 -R 3333:*:3333 user@victim-IP
Attenzione: Le richieste da host esterni (rete in pivoting) devono essere indirizzate all'IP della vittima per essere inoltrate alla macchina attaccante.
*Puoi anche implementare il Remote Port Forwarding connettendoti via SSH dalla macchina vittima alla macchina attaccante.
Il local port forwarding ti consente di inoltrare una porta sulla macchina locale (attaccante) a una porta sulla macchina remota (vittima). Particolarmente utile per scansionare le porte locali sulla vittima.
Uso:
ssh user@victim-IP -L 8888:127.0.0.1:8086
Ora puoi usare ad es. nmap per scansionare la porta 8086 sulla macchina vittima in questo modo:
nmap -Pn -n -p8888 -sV 127.0.0.1
Un esempio di come implementare il doppio pivoting con SSH Dynamic Port Forwarding e Proxychains.
Concetto:
Supponiamo di avere le seguenti 4 macchine.
| IP | Ruolo |
|---|---|
| 10.10.10.10 | Attaccante |
| 10.10.10.11 | Jumphost1 |
| 172.16.1.12 | Jumphost2 |
| 172.16.2.13 | Jumphost3 |
L'attaccante può raggiungere Jumphost1.
Jumphost1 può raggiungere Jumphost2.
Jumphost2 può raggiungere Jumphost3.
...
socks4 127.0.0.1 9050
socks4 127.0.0.1 9999
ssh -D 127.0.0.1:9999 user@Jumphost2
Ora dovresti essere in grado di raggiungere Jumphost3.
sshuttle ti consente di creare una connessione VPN dalla tua macchina a qualsiasi server remoto tramite ssh, purché quel server abbia python 2.3 o superiore. Per funzionare, devi avere accesso root sulla macchina locale, ma puoi avere un account normale sul server. È valido eseguire sshuttle più di una volta contemporaneamente su una singola macchina client, connettendosi ogni volta a un server diverso, così puoi essere su più VPN contemporaneamente. Controlla il repository GitHub di sshuttle.
Uso:
Supponendo di voler fare pivoting in 172.16.2.0/16:
sshuttle -vvr root@victim 172.16.2.0/16
Se vuoi usare una chiave ssh:
sshuttle -vvr root@victim --ssh-cmd 'ssh -i ~/.ssh/id_rsa' 172.16.2.0/16
Chisel è un tunnel TCP/UDP veloce, trasportato su HTTP, protetto tramite SSH. Un singolo eseguibile che include sia client che server. Scritto in Go (golang). È incredibilmente fantastico e utile.
Installazione:
Puoi installare facilmente chisel su kali:
apt install chisel
Per usarlo, devi anche caricare il binario chisel sulla vittima. Puoi scaricare versioni precompilate qui.
Esempio di local port forwarding
Sulla tua macchina attaccante:
chisel server -p 8000 --reverse
Sulla macchina vittima:
./chisel_1.7.7_linux_amd64 client attacker-ip:8000 R:1234:127.0.0.1:8443
Questo inoltrerà il traffico dalla porta 1234 della macchina attaccante alla porta 8443 della macchina vittima.
Burpsuite supporta la possibilità di impostare proxy, una funzionalità incredibilmente utile e potente.
Come configurarlo:
Avvia Burpsuite e applica quanto segue:
In combinazione con la configurazione di un SSH Dynamic Port Forwarding o di sshuttle, ora puoi usare Burpsuite per instradare il traffico verso gli host desiderati inviando traffico alla tua porta di bind su localhost. Un esempio utile con gobuster dir brute attraverso il tunnel (supponendo che tu abbia impostato la porta 2222 come porta di reindirizzamento):
gobuster dir -u http://127.0.0.1:2222 -t 40 -w /some/dirlist.txt