Vulnerability Assessment of SNMP Service – II |
背景: |
这是第二篇关于SNMP服务漏洞审计的文章。前面的一篇文章,我们介绍了如何在Linux主机(Debian)下安装SNMP服务。从这篇文章开始,我们会介绍一些工具,这些工具可以帮助我们收集一些重要信息。 |
目标对象: |
这一系列的文章主要写给那些有些基础,但想知道更多的人,让他们了解,审计SNMP安全需要做什么,获取的有用的信息将会对后面的渗透测试有很大的帮助。 |
假设: |
开始这篇文章前,我们假设用户已经能够访问一台运行SNMP服务的机器。如果没有,请参考前面的一篇文章,去搭建一个靶场环境。 |
目标: |
这篇文章将介绍一些SNMP相关的东西,以便帮助读者理解一些内容(渗透测试与SNMP协议相关的内容)。这是进行测试前需要的一些准备。虽然如此,但是可能没太大的作用,因为你不知道要做什么,或者为什么这么做。 我们会学习如何定位网络上运行着SNMP服务的主机,同时也会介绍一些完成这项任务的工具。 |
SNMP - 概要 |
SNMP,简单网络管理协议,由3个部分组成: |
1. Managed Device: 运行SNMP服务的设备或主机.这些设备可以是路由,交换机,集线器,网桥,电脑等. 2. Agent Agent被认为是运行在管理设备里的软件,它最主要的任务就是将信息转为SNMP格式,以便能够顺利的通过SNMP管理网络. 3. Network Management System(NMS): NMS, 指用于监控网络设备的软件系统,下面不会深入讨论它,因为我们对它不感兴趣。 |
SNMP Managed Network | |||
Managed Device |
Network Management Systems | ||
|
SNMP Agent |
| |
|
从上图我们可以了解SNMP的组成,让我们直奔主题,我们接下来会介绍协议里的两个概念。一个是MIB (Management Information Base), 另一个是Community Strings. |
Management Information Base(MIB)MIB,是一个存储库,或组织信息的集合。这里就不介绍数据是如何组织的,对新手来说也没有这个必要。如果你想要写自己的工具,那么理解它是很有必要的。 |
Community String |
SNMP Community String,是一个类似会话验证的句柄(例如:密码),主要作用于管理站与SNMP Agent部署的设备之间。Community Strings在网络上以明文传输,容易遭受网络监听攻击。Coumunity String存在于管理站与节点之间交换的每个数据包中。 |
对工作站而言,想要发现并管理网络设备,设备必须开启SNMP,NMS发送community string去匹配网络设备的Community String.此外,远程设备上的防火墙应该允许这样的操作。默认情况下,防火墙是不允许SNMP的。 |
SNMP操作时,有两种不同的模式,这些模式拥有不同的Community Strings: Read Only: 此模式下,允许查询读取信息,但是不允许修改配置。此模式,默认community string是“public”。
Read Write: 此模式下,可以修改设备,默认的community string是“private”. |
端口扫描 |
端口扫描是一种用于探测远程主机服务的方法,接下来我们用nmap针对目标主机做一次端口扫描,验证SNMP是否开启。默认情况下,SNMP开放UDP端口161,修改过,可能是其他的端口。 |
root@gnu:/home/nixawk# nmap -sV -sU-p 161 192.168.1.105 Starting Nmap 6.40 ( http://nmap.org) at 2014-08-11 03:42 CST Nmap scan report for localhost(192.168.1.105) Host is up (0.00049s latency). PORT STATE SERVICE VERSION 161/udp open snmp SNMPv1 server(public) MAC Address: 08:00:27:10:01:C9(Cadmus Computer Systems) Service Info: Host: ruby Service detection performed. Pleasereport any incorrect results at http://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 0.40 seconds |
从上面的扫描结果,我们可以看出,远程主机开放了SNMP服务。接下来,我们验证一下默认的community string。如果发现这样的主机,那么恭喜你,SNMP可以为我们提供许多有价值的信息,这会在后面数小时的渗透测试中起到很重要的作用。 |
onesixtyone可以用于暴力猜解SNMP community字符串,此工具可以从文件中获取主机和密码字典。支持较大的字典,能够快速发现匹配项。 |
root@gnu:~# onesixtyone onesixtyone 0.3.2 [options] <host><community> -c <communityfile> file withcommunity names to try -i <inputfile> file withtarget hosts -o <outputfile> outputlog -d debug mode, usetwice for more information -w n wait nmilliseconds (1/1000 of a second) between sending packets (default10) -q quiet mode, donot print log to stdout, use with -l examples: ./s -c dict.txt 192.168.4.1 public ./s -c dict.txt -i hosts -o my.log -w 100 |
root@gnu:~# onesixtyone 192.168.1.105 public Scanning 1 hosts, 1 communities 192.168.1.105 [public] Linux ruby 2.6.32-5-686 #1 SMP Tue May13 16:33:32 UTC 2014 i686 |
Metasploit自带snmp相关模块,可用于测试snmp服务。 |
msf auxiliary(snmp_enum) > show options Module options(auxiliary/scanner/snmp/snmp_enum): Name Current Setting Required Description ---- --------------- -------- ----------- COMMUNITY public yes SNMP Community String RETRIES 1 yes SNMP Retries RHOSTS 192.168.1.105 yes The target address range or CIDR identifier RPORT 161 yes The target port THREADS 1 yes The number of concurrent threads TIMEOUT 1 yes SNMP Timeout VERSION 1 yes SNMP Version <1/2c> msf auxiliary(snmp_enum) > run [+] 192.168.1.105, Connected. [*] System information: Host IP :192.168.1.105 Hostname :ruby Description :Linux ruby 2.6.32-5-686 #1 SMP Tue May 13 16:33:32 UTC 2014 i686 Contact : Me<me@example.org> Location :Sitting on the Dock of the Bay Uptime snmp :04:06:18.63 Uptime system :03:12:27.23 System date :2014-8-10 16:10:01.0 [*] Scanned 1 of 1 hosts (100%complete) [*] Auxiliary module execution completed |
参考链接:
http://resources.infosecinstitute.com/vulnerability-assessment-of-snmp-service-ii/