滥用DTP协议:从访问端口到中继端口的攻击实践

本文详细介绍了如何利用Cisco的动态中继协议(DTP)漏洞,通过Yersinia工具将交换机端口从访问模式切换至中继模式,从而访问原本无法到达的VLAN网络,并提供了实验设置和攻击步骤。

滥用DTP

在探索第二层网络的前两部分中,我介绍了如何使用GNS3和VirtualBox搭建实验环境,以及如何添加和与VLAN交互。在这一部分,我将探讨如何利用Cisco的动态中继协议(DTP)将端口从访问模式切换到中继模式,从而让我们能够访问网络上的所有VLAN。

DTP概述

DTP是Cisco开发的一种协议,允许连接到交换机的设备协商其端口是否需要处于中继或访问模式。默认情况下,所有端口都启用了DTP,因此管理员必须手动禁用它才能关闭。端口默认为访问模式,而需要中继端口的设备(如交换机)可以请求切换。通过单个DTP数据包,端口可以从一种状态切换到另一种状态,且没有身份验证,这使得攻击者可以轻松地在任何启用DTP的交换机上将端口切换到中继模式。

实验设置

我原本想使用已设置的GNS3实验室进行这项工作,但经过一些阅读后,我发现只有Catalyst交换机支持DTP,而GNS3目前无法支持它们。幸运的是,我以99便士(加上20英镑的邮费)在eBay上购买了一台旧的2950交换机,使得实验成本相对较低。

网络拓扑

实验室初始设置如下:

机器 路由器接口 IP地址 VLAN
C1 Fa0/0 10.0.0.1 1
C2 Fa0/1 10.0.0.2 1

如果交换机处于默认配置,只需在两台机器上设置IP地址即可使网络工作。我通过几次ping检查连通性以确保一切正常。

攻击行动

假设交换机处于默认配置,所有流量将在VLAN 1上,DTP设置为自动模式。我们可以使用以下tcpdump命令检查DTP是否启用:

1
tcpdump -n -v -i usb0 -s 0 'ether[20:2] == 0x2004'

默认情况下,数据包每30秒发送一次,如果在一分钟左右没有看到数据包,则需要启用它:

1
2
3
4
Switch>en
Switch#conf t
Switch(config)#interface fa0/1
Switch(config-if)#switchport mode dynamic auto

为了从分配的VLAN跳转到其他VLAN,我们将C2从VLAN 1移动到VLAN 5,这将断开连接:

1
2
3
4
Switch#conf t
Switch(config)#interface fa0/2
Switch(config-if)#switchport mode access
Switch(config-if)#switchport access vlan 5

现在,尝试在两台机器之间ping应该会失败。

发起攻击

为了生成DTP数据包,我使用Yersinia,这是一个用于滥用多种第二层协议(包括DTP)的强大工具。预编译版本通常较旧,因此我使用了GitHub上的最新代码,但由于配置脚本中的错误,它在Debian上无法构建。修复非常简单,只需编辑configure文件并更改第4518行:

1
2
-    if test -d $dir -a -r "$dir/pcap.h" ; then
+    if test -d $dir -a -r "$dir/pcap-bpf.h" ; then

然后按照构建和安装说明进行操作。

安装完成后,攻击只需一个命令:

1
yersinia dtp -interface usb0 -version 1 -source <YOUR MAC> -dest 01:00:0c:cc:cc:cc -attack 1

如果tcpdump仍在运行,您将看到从您的机器发送出的多个DTP数据包。您还可以在IOS shell中看到变化。

恢复连接

端口现在处于中继模式,因此我们可以运行与第二部分相同的命令,在VLAN 5上创建一个新的虚拟接口(我的接口是usb0,您的可能是ethX):

1
2
3
vconfig add usb0 5
ifconfig usb0 0.0.0.0
ifconfig usb0.5 10.0.0.1 up

最后,检查是否可以再次ping通。

注意事项

我的交换机如果一段时间没有收到DTP数据包,会将端口切换回访问模式。我不知道这是否在所有实现中都很常见,但让Yersinia在后台运行以保持交换机满意和中继状态是无害的。

总结

DTP是一种以极少工作量将访问端口神奇地变为中继端口的好方法。据我所知,DTP在支持它的所有交换机上默认启用,而且我们都知道,如果某物开箱即用,大多数人不会更改它,甚至可能不知道该功能的存在。从现在开始,我肯定会在大多数测试中启动这种攻击,因为确认DTP是否启用所需的30秒左右时间可能会对测试结果产生巨大影响。

致谢

感谢Neil让我借用他的交换机时间,直到我拿到自己的交换机,以及Colin(@_CRV)在他的交换机上完成整个过程以检查我的初始计划是否正确。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计