滥用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是否启用:
|
|
默认情况下,数据包每30秒发送一次,如果在一分钟左右没有看到数据包,则需要启用它:
|
|
为了从分配的VLAN跳转到其他VLAN,我们将C2从VLAN 1移动到VLAN 5,这将断开连接:
|
|
现在,尝试在两台机器之间ping应该会失败。
发起攻击
为了生成DTP数据包,我使用Yersinia,这是一个用于滥用多种第二层协议(包括DTP)的强大工具。预编译版本通常较旧,因此我使用了GitHub上的最新代码,但由于配置脚本中的错误,它在Debian上无法构建。修复非常简单,只需编辑configure文件并更改第4518行:
|
|
然后按照构建和安装说明进行操作。
安装完成后,攻击只需一个命令:
|
|
如果tcpdump仍在运行,您将看到从您的机器发送出的多个DTP数据包。您还可以在IOS shell中看到变化。
恢复连接
端口现在处于中继模式,因此我们可以运行与第二部分相同的命令,在VLAN 5上创建一个新的虚拟接口(我的接口是usb0,您的可能是ethX):
|
|
最后,检查是否可以再次ping通。
注意事项
我的交换机如果一段时间没有收到DTP数据包,会将端口切换回访问模式。我不知道这是否在所有实现中都很常见,但让Yersinia在后台运行以保持交换机满意和中继状态是无害的。
总结
DTP是一种以极少工作量将访问端口神奇地变为中继端口的好方法。据我所知,DTP在支持它的所有交换机上默认启用,而且我们都知道,如果某物开箱即用,大多数人不会更改它,甚至可能不知道该功能的存在。从现在开始,我肯定会在大多数测试中启动这种攻击,因为确认DTP是否启用所需的30秒左右时间可能会对测试结果产生巨大影响。
致谢
感谢Neil让我借用他的交换机时间,直到我拿到自己的交换机,以及Colin(@_CRV)在他的交换机上完成整个过程以检查我的初始计划是否正确。