一次对SNMP服务的渗透测试
Hacking SNMP Service - The Post Exploitation :Attacking Network - Network Pentesting原文地址:
http://www.websecgeeks.com/2017/ ... ce-part-1-post.html
http://www.websecgeeks.com/2017/ ... ce-part-2-post.html
prison翻译整理,首发i春秋。
引言:
SNMP安全相关信息是需要各位安全开发人员,渗透测试工程师以及白帽子所需要关心的内容,在本篇文章中,作者通过对其漏洞的分析和实践直观的让读者对其相关内容进行了解。对入门学员可能会有所帮助。难度:三颗星
SNMP(SimpleNetwork Management Protocol)
关于SNMP的介绍大家可以很容易的从网络上找到相关介绍,在此不再赘述。
我们本次展示的是爆破SNMP服务字符串实现攻击。
注:以下所有“字符串”都为:Coummunity Strings
那么问题来了,为什么我们选择攻击SNMP字符串
SNMP只读类字符串类似于用户id或密码。它与每个SNMP get请求一起发送,并允许(或拒绝)访问路由器或其他设备的统计信息。如果字符串是正确的,设备将响应请求的信息。如果字符串不正确,设备就会忽略请求而不响应。
我们可以用Coummunty Strings做什么?
默认的字符串是“public”和“private”的,带有“ro”(只读)和“rw”(读和写)。
如你所见,只读意味着用户只能读取信息和读写,读和写意味着用户可以对SNMP中的信息进行写/更新。
什么是SNMP中的MIB
SNMP管理信息基础(MIB)是一个包含信息的数据库。
通常与网络管理有关。数据库像树一样组织起来,在那里
分支代表不同的组织或网络功能。树上的叶子
(最终的端点)对应于可以访问的特定变量值,以及
由外部用户探测。要了解更多关于MIB树的信息,请参阅下面的内容
。
http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.progcom/doc/progcomc/mib.htm
所以SNMP在UDP端口运行时还在网络中执行基于UDP的扫描。
A) Metasploit
用于SNMP auxiliary/scanner/snmp/snmp_login
设置一下参数并运行,可以看到Metasploit成功运行,在Community String中显示”mike”
就我个人来说,我比较推荐攻击Community Strings使用Metasploit,因为和其他工具相比,它的运行速度相对来说比较快。
B) Medusa
因为这个软件的速度也非常快,所以它对于破解SNMP字符串也非常有用。
1
|
medusa - h 192.1 68.1 31.1 35 - u admin - P Desktop / demo / wordlist - M snmp |
Here no user of "-u admin" but Medusa required thisvalue so we are giving it fulfilled the requirement.
同样的,Medusa发现了值wei”mike”的字符串。.
C ) onesixtyone
1
2
|
[ / size] [size = 4 ]onesixtyone – c password 192.1 68.1 31.1 35 |
Onesoxtyone工具,它还试图使用基于字典的尝试猜测/破解SNMP社区字符串。
正如我们在下面看到的,它已经确定了“mike”是有效的字符串。
查看图片
(二)
查看图片
我们已经通过Nmap扫描和爆破社区字符串值来识别Community字符串。
现在我们将看到,如何使用这些提取的Community字符串来进行后期开发。
我们将使用如下所示的各种工具。
例如,下面的MIB值对应于特定的MicrosoftWindows SNMP参数。
1
2
3
4
5
6
7
|
1.3 . 6.1 . 2.1 . 25.1 . 6.0 系统进程 1.3 . 6.1 . 2.1 . 25.4 . 2.1 . 2 运行程序 1.3 . 6.1 . 2.1 . 25.4 . 2.1 . 4 流程路径 1.3 . 6.1 . 2.1 . 25.2 . 3.1 . 4 存储单元 1.3 . 6.1 . 2.1 . 25.6 . 3.1 . 2 软件名称 1.3 . 6.1 . 4.1 . 77.1 . 2.2 5 用户帐户 1.3 . 6.1 . 2.1 . 6.1 3.1 . 3 TCP 本地端口 |
一)SNAMPWALK
我们已经将”mike”作为Community字符串了,现在我们将其传递给SNMPWALK工具,然后将目标IP作为目标。这将从SNMP服务中提取所有可能的信息。
1
|
snmpwalk - v 1 - c mike 192.1 68.1 31.1 35 |
查看图片
输出数据量非常大,所以我将输出重定向到一个文件中去。
1
|
snmpwalk - v 1 - c mike 192.1 68.1 31.1 35 > snmpout.txt |
查看图片
正如你在下面看到的,此时我们有很多MIB值输出。
查看图片
我们可以在snmpwalk中使用MIB值来做一些特定的搜索:
1
|
snmpwalk - c : v 1192.1 68.1 1.2 04 。 |
在我们的案例中,Community字符串是-mike
01
02
03
04
05
06
07
08
09
10
|
提取Windows用户 : snmpwalk - c mike - v 1 192.1 68.1 31.1 35 1.3 . 6.1 . 4.1 . 77.1 . 2.2 5 提取Windows系统进程: snmpwalk ‐c mike ‐v 1 192.1 68.1 31.1 35 1.3 . 6.1 . 2.1 . 25.4 . 2.1 . 2 提取开放的TCP端口: snmpwalk ‐c mike ‐v 1 192.1 68.1 31.1 35 1.3 . 6.1 . 2.1 . 6.1 3.1 . 3 提取已安装的软件: snmpwalk ‐c mike ‐v 1 192.1 68.1 31.1 35 1.3 . 6.1 . 2.1 . 25.6 . 3.1 . 2 |
现在,为了验证这个Community字符串是否可写,我们将使用另一个工具SNMPSET
snmpset -v1 -cmike 192.168.131.135 iso.3.6.1.2.1.1.5.0 s SomeOneWasHere
这里的“iso.3.6.1.1.1.5.0”为“bhati”的值,它是从snmpwalk输出文件中挑选出来的。
查看图片
这个snmpset -v1 -cmike 192.168.131.135 iso.3.6.1.2.1.1.5.0 s SomeOneWasHere命令将会继续,并将“bhati”的值更改为SNMP中的“SomeOneWasHere”。让我们试试这个。
我们的命令成功。
查看图片
现在,让我们使用SNMPWALK重新扫描我们的SNMP目标
如你所见,这个值已经被更改为“SomeOneWasHere”。
查看图片
现在我们确认,我们的社区字符串“mike”有写属性。现在,我们应该转向下一部分,从目标机器中搞一点事情。
B)SNMPCHECK
snmpcheck工具将使用我们发现的社区字符串“mike”来目标机器的重要信息。
snmpcheck.rb -c mike 192.168.131.135
如果在运行此命令时出现错误,请参见snmpcheck的帮助部分,后面是-h,您的版本可能是旧的或更新的。
查看图片
C)Metasploit
我们可以使用metasploit辅助设备实现同样的信息。
auxiliary/scanner/snmp/snmp_enum
填充所需的值。
查看图片
现在只要点击“运行”,你就会看到我们的目标机器上有大量的Meal出现。
查看图片
查看图片