---
title: Pivoting
description: "Traverser les réseaux : tunnels SSH, chisel, ligolo-ng et proxychains."
category: post
kind: technique
tags: [pivoting, tunneling, ssh, chisel, proxychains]
level: advanced
updated: 2026-11-04
order: 6
aliases: ["port forwarding", "tunneling"]
---

## SSH

```bash
# Local : le port local pointe vers un service interne
ssh -L 8080:internal.corp:80 user@jump.host

# Distant : exposer un service local sur la machine distante
ssh -R 9001:127.0.0.1:9001 user@jump.host

# Dynamic : proxy SOCKS5
ssh -D 1080 -N -f user@jump.host

# Rebond multi-sauts
ssh -J user@jump1,user@jump2 -L 8080:db.internal:5432 user@jump2
```

```bash
# proxychains.conf
[ProxyList]
socks5 127.0.0.1 1080

# Utilisation
proxychains4 nmap -sT -Pn -p 22,80,445 10.10.20.10
```

> [!TIP]
> `nmap -sT` fonctionne à travers un proxy SOCKS, pas `-sS`. Pour du scan rapide, combine proxychains avec `nmap -sT -Pn --top-ports 100`.
>
> La référence complète des options SSH (ControlMaster, ProxyJump, autossh, systemd) est dans [OpenSSH](/sheets/openssh/).

## Chisel

```bash
# Serveur (attaquant)
chisel server --reverse --port 8080

# Client (pivot)
chisel client 10.10.10.20:8080 R:socks

# Port forwarding inverse : 10.10.20.10:445 → localhost:4455
chisel client 10.10.10.20:8080 R:4455:10.10.20.10:445
```

```bash
# proxychains vers le SOCKS chisel (défaut 1080)
proxychains4 nxc smb 10.10.20.10 -u user -p 'Password'
```

## Ligolo-ng

```bash
# Proxy (attaquant) — binaire "proxy" dans les releases ligolo-ng
./proxy -selfcert -laddr 0.0.0.0:11601

# Agent (pivot) — binaire "agent"
./agent -connect 10.10.10.20:11601 -ignore-cert
```

```text
# Console ligolo
session
ifconfig
start
# Ajouter la route vers le réseau interne
ip route add 10.10.20.0/24 dev ligolo
```

Ligolo donne une interface réseau virtuelle : `nmap`, `curl` et les outils classiques fonctionnent sans proxychains.

## Socat et relais simples

```bash
# Relais TCP local
socat TCP-LISTEN:8080,fork TCP:internal.corp:80

# Relais avec TLS
socat TCP-LISTEN:8443,fork,reuseaddr OPENSSL:internal.corp:443

# Exposer un service local via un pivot compromise
socat TCP-LISTEN:9000,fork TCP:127.0.0.1:9000
```

## Double pivot

```text
Attaquant → jump1 (10.10.10.5) → jump2 (10.10.20.5) → cible (10.10.30.10)
```

```bash
# 1. SOCKS sur jump1
ssh -D 1080 -N -f user@10.10.10.5

# 2. Depuis jump1, tunnel vers jump2
ssh -L 2222:10.10.20.5:22 user@10.10.20.5

# 3. Chaîner un second proxy
ssh -D 1081 -N -f -p 2222 user@127.0.0.1
```

## Choisir

| Situation | Outil |
| --- | --- |
| SSH disponible | `ssh -L/-R/-D` |
| Pas de SSH, binaire unique | chisel |
| Besoin d'une interface réseau | ligolo-ng |
| Relais simple | socat |
| Trafic HTTP uniquement | `httptunnel`, websocket |

> [!WARNING]
> Un pivot mal configuré peut exposer un service interne à Internet. Écoute sur `127.0.0.1` quand c'est possible, ferme les tunnels après usage et documente chaque saut dans le rapport. Ne scanne pas un réseau interne hors scope : un pivot élargit la surface, pas l'autorisation.
