渗透测试中如何收集利用 SNMP 协议数据

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

几个月前,我曾发过一篇博客” SNMP 最佳实践“讲述了一些基本的方法降低来自 SNMP 相关的安全隐患。我想现在大家应该都修复完了,那么是时候来从渗透测试的角度讲述如何通过收集分析数据来发现并利用暴露的 SNMP 服务。

第一个问题是我们如何发现暴露的 SNMP 服务。通常我们会使用端口扫描工具 Nmap 来扫描开放的 UDP 端口 161。鉴于我们只是想有针对性的发现并提取数据,那么使用 Python 或 Perl 小脚本反而会更加方便简单。就我个人来说,我更倾向于使用 Perl,因为我已经写好了一个这样的脚本,你可以从我的 Github页面上下载使用。如果你选择使用我的脚本,使用方法非常简单,如下图所示:

我在使用这个脚本的时候,我会将目标设置为要测试的一个子网范围。例如,如果我想要测试内网的地址范围 10.10.0.0/16,我会使用如下命令, ./snmpbw.pl 10.10.0.0/16 public 2 32。这个命令会启动 32 个进程来尝试发现 10.10.0.0/16 子网内所有暴露在 UDP 端口 161 上面的 SNMP 服务。当发现启用 SNMP 服务并且团体名(community string) 标示为 “public” 的设备时,会从 “.1″ 开始枚举所有的 MIB(管理信息库) 表,并将返回的数据保存到一个文件中以供后续的分析。

这个方法可以获取到很多帮助了解攻击目标网络环境的有用数据。 我经常会在确定目标 IP 地址范围后就献出这个脚本来收集 SNMP 数据,然后就让其慢慢在后台运行着,而我则继续进行其他一些网络侦查的工作。当脚本运行结束后,我们就要来分析得到的数据了。

分析的第一步就是从每一个文件的 MIB 表数据中提取出 sysDesc .1.3.6.1.2.1.1.1.0,以确定我们是从哪些设备中收集到的数据。这一步很简单只需要使用如下的 grep 命令即可:

grep ".1.3.6.1.2.1.1.1.0" *.snmp

使用这个 grep 命令的示例如下图所示:

现在,你获取到了所有暴露出来 SNMP 服务的数据了,那么从这些数据中你能发现什么呢?实际上,从这些 SNMP 服务数据中暴露出的信息相当惊人,而我则经常会寻找以下有用的信息:

Email 地址

SNMP 团体名

密码的哈希值

明文传输的密码

当然,想挖掘出有用的信息非常消耗时间,因为导出的 MIB 数据往往会非常大能上好几兆。所以我花了些时间研究如何减少花费在检查和识别上的时间,并准备在这里分享一些给大家。

我在处理 SNMP MIB 数据时最喜欢干的一件事就是查找其他可用的 SNMP 团体名,因为这些数据通常可以用来进一步去访问其他系统。举个例子,如果我从一家公司的 Cisco 路由器上找到其私有的团体名标识,那么我后面就可以利用这个标识来从公司其他的路由器上提取运行配置。找到这些数据最好的方法就是查找关联的 SNMP Trap 数据包。使用类似上面的 grep 命令就可以从大量的 MIB 数据中快速的找到与关键字 “trap” 相关的数据了。

grep -i "trap" *.snmp

下图的示例显示了我成功的从大量的 SNMP 数据中枚举出来与 “trap” 相关的数据。在这个示例中,我成功的找到几个 SNMP 的团体名,随后我使用这些团体名成功的获取到了整个网络中的所有 Cisco 路由器的运行配置文件。

另一个有趣的东西是日志,我发现有些设备会将日志信息也存到 MIB 表中。这些日志里面当然也会包含失败的登录尝试,想想你可能会在通过 Telnet 或 SSH 登录时无意中输入了密码当做用户名,悲剧…必须承认我经常犯这毛病,所以我也要检查 MIB 表中的日志是否也记录到这类信息。通过提取 SNMP 数据,你可能会发现一些将密码作为用户名输入的日志信息,为了检索这些信息,我通常会选择搜索关键字 “fail”、”failed” 或者 “login” 看看是否会得到一些有用的数据。

grep -i "fail" *.snmp

下图的示例显示了从 SNMP MIB 表中找到的将密码做为用户名登录的错误信息日志。最棒的事情就是日志的下一条可能就是密码对应的真实用户名。

这里特别需要注意,这些日志通常非常短,在屏幕上会快速的一闪而过,所以请确保在对设备进行暴力破解前保存一个备份。如果不这样,你可能会得到像下图一样的结果。

最后总结下,我希望以上几个小例子可以告诉你如何提取和利用 SNMP 数据。同时我还要特别指出,一定要花些时间在检查暴露出的 SNMP 数据上, 这样我们就可以为顾客更好的鉴定 SNMP 存在的安全风险并提供相应的解决方案。

本文转自d1net(转载)


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
测试技术 API C#
C#使用Bogus生成测试数据
C#使用Bogus生成测试数据
39 1
|
22天前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
99 7
Jmeter实现WebSocket协议的接口测试方法
|
2月前
|
监控 安全 网络安全
深入理解SNMP:网络管理的关键协议
【8月更文挑战第31天】
73 1
|
2月前
|
存储 人工智能 自然语言处理
知识库优化增强,支持多种数据类型、多种检索策略、召回测试 | Botnow上新
Botnow近期对其知识库功能进行了全面升级,显著提升了数据处理能力、检索效率及准确性。新版本支持多样化的数据格式,包括PDF、Word、TXT、Excel和CSV等文件,无需额外转换即可直接导入,极大地丰富了知识来源。此外,还新增了细致的文本分片管理和编辑功能,以及表格数据的结构化处理,使知识管理更为精细化。 同时,平台提供了多种检索策略,包括混合检索、语义检索和全文检索等,可根据具体需求灵活选择,有效解决了大模型幻觉问题,增强了专业领域的知识覆盖,从而显著提高了回复的准确性。这些改进广泛适用于客服咨询、知识问答等多种应用场景,极大提升了用户体验和交互质量。
58 4
|
16天前
|
存储 监控 安全
在自动化测试环境中,如何确保测试数据的安全性和隐私性
在自动化测试环境中,如何确保测试数据的安全性和隐私性
|
2月前
【Application Insights】使用Powershell命令向Application Insgihts发送测试数据
【Application Insights】使用Powershell命令向Application Insgihts发送测试数据
|
2月前
|
JSON Kubernetes Linux
【Application Insights】使用CURL命令向Application Insgihts发送测试数据
【Application Insights】使用CURL命令向Application Insgihts发送测试数据
|
2月前
|
关系型数据库 MySQL Python
[python]使用faker库生成测试数据
[python]使用faker库生成测试数据
|
2月前
|
存储 运维 监控
|
2月前
|
安全 数据安全/隐私保护 架构师
用Vaadin打造坚不可摧的企业级应用:安全性考虑全解析
【8月更文挑战第31天】韩林是某金融科技公司的架构师,负责构建安全的企业级应用。在众多Web框架中,他选择了简化UI设计并内置多项安全特性的Vaadin。韩林在其技术博客中分享了使用Vaadin时的安全考虑与实现方法,包括数据加密、SSL/TLS保护、结合Spring Security的用户认证、XSS防护、CSRF防御及事务性UI更新机制。他强调,虽然Vaadin提供了丰富的安全功能,但还需根据具体需求进行调整和增强。通过合理设计,可以构建高效且安全的企业级Web应用。
35 0
下一篇
无影云桌面