本节书摘来自异步社区《黑客秘笈——渗透测试实用指南》一书中的第2章2.3节 外部或内部的主动式信息收集,作者【美】Peter Kim(彼得 基姆),更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.3 外部或内部的主动式信息收集
黑客秘笈——渗透测试实用指南
主动式信息收集就是通过主动扫描确认目标安装的操作系统和网络服务,并发现潜在漏洞的过程。即主动式信息收集必定对指定的网络段进行扫描。无论是在网络的内部还是外部进行扫描,主动式信息收集都要采用得当的扫描工具。
本书不会详细介绍扫描器的运行方法,毕竟大多数读者已经非常熟悉扫描工具了。如果您尚未掌握扫描工具的使用方法,我推荐您用社区版的Nexpose,或者用试用版的Nessus进行练习。在家里或者实验室里进行网络扫描,了解这些工具获取可发现哪些类型的信息,使用认证信息进行扫描的方法,以及网络上所产生的流量类型。这些扫描程序会频繁地触发IDS/IPS告警。在熟悉常见的扫描工具之后,我们可开始更深入地了解这种方式的信息收集。
2.3.1 网络扫描的流程
本节讲述进行高效扫描的方法,它涉及扫描的工具、流程和相关技术。我的扫描流程大体分为以下几个步骤。
用Nexpose/Nessus扫描。
用Nmap扫描。
用自定义的Nmap扫描。
用PeepingTom抓取屏幕。
1.用Nexpose/Nessus进行网络漏洞扫描
这两款工具可谓大名鼎鼎,它们都是速度最快、效果最佳的扫描工具。通常,我会对它们进行详细的调整,然后使用一款工具进行详细的安全检查。如果时间紧迫,我会首先使用以前的配置文件进行扫描,仅检测已知的安全漏洞,然后使用默认的预设配置进行第二次扫描。虽然第一次扫描的速度很快,但是往往只会得到一些重要的发现。
先来大致说一下漏洞扫描器。在第1章,我推荐您购买Nexpose或者Nessus 扫描程序。至于哪一个扫描器的品质更佳,就是见仁见智的问题了。我确实用过绝大部分的商业扫描程序,但是这些程序里没有一款可称得上是完美的或者是极致的解决方案。若将这些工具进行比较,总会发现它们功能都不完备,总是或多或少地缺少点什么。所以,我们最好采用多个工具进行漏洞扫描。当然,预算往往不会允许我们什么都买。
如果只能从中选一,那我推荐Tenable的Nessus漏洞扫描器。从它能扫描的IP地址数量以及费用(1500美元)来进行综合评定,还是Nessus比较划算。而Nexpose的咨询许可证价格是Nessus的两倍,所能扫描的IP数量也有限制。不过您最好还是在购买前确认一下价格,因为行情可能随时不同。
本文将通过案例说明多个扫描工具的必要性。例如,使用专业版的Nexpose对我的网站进行扫描。在扫描时,我指定了标准的漏洞扫描配置文件,并没有进行深入的Web应用程序检测。Nexpose给出了4个严重的警告,详细情况如图2.8所示。
然后,我们使用专业版的Tenable Nessus扫描程序进行相同的扫描,并指定了相似的配置文件。可见,扫描结果大有不同。仅仅对我的网站进行扫描,就能存在这么大的区别。可想而知,在大规模的扫描中,扫描结果也不会更为接近。如图2.9所示,Nessus发现了3个中级的警告,5个低级别警告。
这两个例子说明这两款程序有很大差别。大致进行比较,就会发现Nexpose检测出了Wordpress路径泄露漏洞,而Nessus没能发现这一问题。
虽然扫描器很有用,也是进行网络渗透的必备工具,但是您要了解它们的优点和局限性。
Nmap——抓取旗标(banner)
在抓取旗标之前,我通常会调整扫描选项,使用Nmap程序对常见端口进行操作系统和网络服务的检测扫描。如果时间充裕,我还会对所有的65535个端口进行扫描。在Nmap进行常规扫描的同时,我还会指定它运行一个抓取旗标的Nmap脚本。后文将会对此进行说明。
进行完整的漏洞扫描会很耗时间。我们可以利用Nmap脚本,在端口扫描的同时,抓取基本的端口信息。这些信息也有助于我们制定更具针对性的攻击计划。
希望您不仅会用Nmap程序,更要了解它的原理。我认为Namp是一款具备模块化特性的快速而高效的扫描工具,足以满足常规的扫描需求。推荐您参考Fydor撰写的介绍Nmap的图书(http://www.amazon.com/Nmap-Network-Scanning-Official-Discovery/dp/0979958717)。本节重点介绍使用Nmap识别操作系统和网络服务的方法,所以我最关注的问题是如何扫描所有的65535个端口,以及如何检测开放端口并获取旗标信息。
这种方法还可用来发现同一个网络环境发生的具体变化。在客户要求您每月都进行一次例行扫描的时候,这种方法正好可以非常快速简单地发现网络情况的具体变化(需要一些辅助脚本)。
在前文的安装阶段,我们安装了HD Moore的banner-plus.nse脚本。这也是它在映射整个网络时所用的脚本 1。它提供了一种可以快速识别开放端口旗标页面信息的方法。运行扫描的命令大致如下:
nmap —script /usr/share/nmap/scripts/banner-plus.nse —min-rate=400 —min-parallelism=512 -p1-65535 -n -Pn -PS -oA/opt /peepingtom/ report
这些选项的含义如下所示。
—script 设置安装阶段下载的banner-plus脚本的位置。
—min-rate 保证扫描会在一定时间内结束。
—min-parallelism 设置并行扫描的数量。
-p1-65535 对所有的端口(即65535个端口)进行扫描。
-n 禁用DNS解析(可以加快扫描速度)。
-Pn 禁用ping(许多服务器会过滤掉外网的ping请求)。
-PS 使用TCP SYNping的方式进行主机探测。
-oA 导出所有类型的报告。
适当调整—min-rates和—min-parallelisms选项,可获得最佳的网络性能和稳定性(更多的信息可参考http://nmap.org/book/man-performance.html)。我用这些数据来创建了一个简单的视图,可以查看服务、漏洞的版本以及其他一些具体的信息。Nmap可以把扫描以各种不同的文件格储存在/opt/peepingtom/文件夹中。在稍后介绍有关截屏的时候,我们再详细介绍它的扫描结果。这一小节将演示这些数据的使用方法。
下一节将展示快速获取旗标数据信息,以及在扫描结果中进行快速检索的方法。为了获取最快的检索速度,我的后台数据库采用的是MongoDB程序,而前端数据检索的功能由PHP实现。此外,本例还用到了Python语言的脚本程序,用它解析Nmap生成的XML文件,继而把有关数据储存到数据库中。之后,我编写了前端的PHP查询页面。因为我们扫描的目标是IP很多的16位子网,所以首要任务就是提高旗标信息的检索速度。如果时间充裕,今后我会将把这个Web应用程序放在公网上。日后,您只要上传xml文件,就可以看到检索结果了。
我建立了一个满足上述需求的程序,并且给它取名为名为internet-scan。它可以快速地检索特定的旗标、端口和IP地址。更棒的是,它可以查询漏洞系统的旗标页面。虽然的确有人会伪造旗标信息,但是以往的渗透测试经历表明,旗标信息还算得上是可靠的判断依据。internet-scan的初始化页面如图2.10所示。
在收集到所有旗标信息之后,我们可使用正则表达进行快速检索,搜索那些有漏洞可利用的网络服务。我会采取多种方式对旗标信息进行排序。例如,在某次对16位子网(CIDR表示法)的扫描结果中,我通过这种方法筛选出了以下这些旗标(见图2.11)。
旗标里暗含着“这台主机存在可利用的漏洞”或“这台主机已经被攻陷”的信息。喔!我们看到了含有scada信息的旗标,它代表该主机可能与电信网格系统有关……有没有那些与终端服务有关的旗标呢?旗标信息确实可以揭示出哪些网络服务存在缺陷,继而可获取该设备的普通(非特权)shell。
我事先写好了一个查询数据库的脚本程序,它可以检索特定类型的操作系统、应用程序版本或者其他信息。在评估规模较大的网络时,这个脚本可以提高查询效率。例如,我使用正则表达检索IIS有关的旗标信息,可以得到图2.12所示的结果。
这种方法可以快速地抓取65000多端口的旗标,继而利用internet-scan对旗标进行快速解析,节省了大量的时间。
2.用Peeping Tom进行截屏
接下来,我们再次处理Nmap的扫描结果。在进行了大范围的端口扫描之后,渗透测试人员面临的首要问题是如何组织数据。我们要从海量数据中判断攻击哪些目标比较容易得手,哪些目标是应该首先攻击的目标。如果目标网络承载着100多个网站,那么人工访问的方式绝对不可取。使用鼠标逐一单击访问的方法不仅十分耗时,而且可能找不到任何漏洞。多数网站的绝大多数网页都不是渗透的对象,我们大体看一眼就可以评判其对于渗透测试的价值。Peeping Tom正是这样一个辅助我们评判网页渗透价值的自动化工具。它可以对指定IP和指定端口的所有HTTP(s)服务进行快照,以一种简单易读的方式展现出来。
这意味着,使用工具下载了网站的HTML页面之后,只需要对页面进行简要的评估就可筛选出较易渗透的网站,或者更值得投入精力进行渗透的网站。请注意,渗透测试通常就是在跟时间赛跑,因为我们没有太多的时间可以浪费。
其他程序的输出数据,要经过整理和处理才能传给Peeping Tom使用。Gnmap.pl脚本可以把前面的Nmap结果处理为Peeping Tom所需的IP列表2。此时,我们需要使用以下命令:
cd /opt/peepingtom/
cat report.gnmap | ./gnmap.pl | grep http | cut -f 1,2 -d "," | tr "," ":" > http_ips.txt
上述命令可筛选出运行着HTTP服务的IP地址,并把整理结果保存到http_ips.txt文件中。而后,我们可以用Peeping Tom处理这个文件,对网站内容进行截屏快照。运行Peeping Tom的命令如下:
python ./peepingtom.py -p -i http_ips.txt
使用Peeping Tom处理Nmap扫描结果的情况如下所示。请注意,Peeping Tom确实可能对部分HTTP服务无能为力。遇到这种情况,测试人员只能手动访问那些网站了。
python ./peepingtom.py -h
Usage: peepingtom.py [opt ions]
peepingtom.py - Tim Tomes (@LaNMaSteR53) (www.lanmaster53.com)
Options:
—version show program's version number and exit
-h, —help show thi s help message and exit
-v Enable verbose mode.
-i INFILE File input mode. Name of input file. [IP: PORT]
-u URL Single URL input mode. URL as a string.
-q PyQt4 capture mode. PyQt4 python modules required.
-p Phantonjs capture mode. Phantomjs required.
python ./peepingtom.py -p -i http_ips.txt
[*] Storing data in ‘131229_230336/’
[*] http: //192.168.58.20 200. Good.
[*] https: //192.168.58.20 200. Good.
[*] http: //192.168.58.21 403. Good.
[*] https: //192.168.58.21 <Connect ion refused>. Visit manually from report.
[*] http: //192.168.58.25 <No route to host>.Visit manually from report.
[*] https: //192.168.58.25 <No route to host>.Visit manually from report
[*] http: //192.168.58.35 <Connect ion refused>.Visit manually from report.
[*] http: //192.168.58.48 200. Good.
[*] https: //192.168.58.48 200. Good.
待Peeping Tom处理完毕,它会在peepingtom的文件夹内新建一个以时间戳命名的文件夹。该文件夹中会有多个图片文件和一个名为report.html的文件。我们使用浏览器打开report.html,很容易就能知道哪些页面有渗透价值,哪些页面没有渗透价值。它的扫描结果如图2.13所示。
在报告文件里,可以看到很多网页的屏幕快照。它以网页形式提供了与服务器、日期、HTTP应答相关的信息。在对100多个Web服务器进行渗透测试的时候,Peeping Tom在几分钟内就能完成所有的处理,必定会大大地简化您的操作。
那么您到底要重点关注什么呢?这恐怕就是见仁见智的问题了,并没有对所有人都适用的答案。对我而言,我通常会对以下内容感兴趣:
Apache Tomcat;
需要认证的页面;
JBoss;
网络设备的默认网页;
ColdFusion;
内容管理系统(CMS);
WordPress;
Wikis;
Joomla;
版权信息早于2012年的网页;
测试中或者开发中的网站;
VoIP页面。
关注这些信息的原因是,它们通常都会含有漏洞,而且这些漏洞可能导致系统被攻陷或者数据被非法访问的问题。Apache、JBoss、ColdFusion程序都有大量的著名漏洞,其中部分exploit程序的源代码可谓触手可及。
举例如下。
ColdFusion的案例:http://www.exploit-db.com/exploits/25305/。
JBoss的案例:http://www.rapid7.com/db/modules/exploit/multi/http/jboss_maindeployer。
Apache的案例:http://www.rapid7.com/db/modules/exploit/multi/http/tomcat_mgr_deploy。
我还对那些需要认证的网站格外感兴趣。认证这一现象意味着网站的应用程序会有额外的功能,而且其Web应用程序很有可能存在安全问题或者默认的密码。
从这些信息入手,您就能快速发现漏洞,并且大致了解您所测试的网络。虽说本书不是详细的网络扫描指南,但是借助这种方法,您可以进行更有效、更快速的网络扫描。
1https://community.rapid7.com/community/infosec/sonar/blog/2013/10/30/project-sonar-one-month-later。
2http://pauldotcom.com/wiki/index.php/Episode291。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。