探索黑客技术攻防,实战研究与安全创新

导航菜单

信息采集之扫描网络

在出招之前,您得要了解、分析对手。掌握测试目标的弱点,熟悉目标的网络环境,将会对渗透测试有莫大的帮助。本章采取与普通渗透测试书籍不同的视角,介绍扫描阶段的工作。读者可将这部内容看作是对目前扫描流程的补充。

无论是渗透测试的老手,还是刚刚入门的新手,在介绍渗透测试时都会多次谈及扫描工作。本章不会把各种网络扫描器、漏洞扫描器、SNMP扫描器拿出来相互比较,而会阐述最有效的扫描流程。本章分为外部扫描、内部扫描和Web应用程序扫描三个部分。

2.1外部扫描

扫描工作通常从外部扫描开始。当客户联系我们,要我们为他们进行一次安全测试的时候,我们可能只知道一个公开的lP地址范围,或者在黑盒测试中我们对测试目标一无所知。这时就需发挥您的创造力,运用经验获取测试目标的相关信息。下面的小节将会分别应用主动、被动式的工具和技术来寻找与目标相关的信息。

2.1.1被动式信息收集

被动式信息收集,就是在不接触目标的情况下收集与测试目标相关的信息。它能收集目标、网络、客户端以及其他信息。通常,我们会利用网上的资源进行被动式信息收集,以避免引起被测目标的任何警觉。在采取主动的扫描之前进行充分的信息搜索,有助于您节省大量的时间。某些情况下,Googlehacking和Shodan(https://www.weixianmanbu.com/)甚至能发现目标系统的漏洞信息,不过这是后话了。

Kali本身就有许多被动式的网络信息收集工具。您可能会觉得被动式信息收集的耗时略长,但是确实有办法可以让它更快速,更方便。如图2.1所示,Kali的开源情报(OpenSourceINTelligence,OSNT)文件夹里收录了大量的信息收集工具。逐一掌握其中的所有工具肯定不现实,那会耗费掉许多不必要的时间。值得庆幸的是,已经有人把这些程序整合到一个工具中了。

2.2DiscoverScripts(过去叫做BacktrackScripts)(KaliLinux)

为了简化操作,人们开发出了这种集多项功能于一身的信息挖掘框架。这个框架可以以被动式的收集方法,快速、有效地查找某公司(或者网络)的相关信息。这个框架的名字是DiscoverScripts(之前叫做BacktrackScripts).

它是LeeBaird开发的一款工具,能够进行自动化的多引擎搜索。例如,如果要搜索某个人的网上信息(如Linkedln信息),它能够使用常见的搜索工具(如goofile、goog-mail、theHarvester、search-email_collector、mydnstools)按照域名或公司名进行搜索,然后使用第三方工具进行更为深入的信息搜索。接下来,我们来接触一下这款工具(见图2.2)。

2.2.1被动式信息收集的操作方法

1.cd/opt/discover。

2../discover.sh。

3.输入1,选择Domain。

4.输入l,选择Passive。

5.输入您想搜索的域名。

a.这里以reddit.com为例。

6.之后,输入:

a.firefox/root/[前面输入的域名]/index.htm

上述的操作可用被动式的方法收集指定的网站(Reddit网站)的有关信息。请注意,此处我们采取的完全是被动式的信息收集手段,并不会发现目标网站上的任何漏洞,仅会得到该网站的公开信息。

我对主域名reddit.com进行了扫描,得到了图2.3所示的扫描结果。结束扫描之后,程序会在root文件夹下创建一个名为index.htm的文件。这个文件列举出所有的扫描结果。

这款工具是我所见到的速度最快、功能最全面的侦察类工具。它会收集域名、lP、文件、邮箱、WHOIS信息、Googledorks等各种信息。

扫描结果的html文件,其布局可谓一目了然。网页的顶部一栏以及相应的下拉菜单,都是根据程序搜集到的各项信息进行动态设计的。我们先检查一下它搜寻到的子域名信息。

程序收集到了大量子域名和lP地址,可以针对这些服务器进行渗透测试。

通过下拉菜单可以看到,它通过Googledork搜索技术搜集到服务器上的文件。图2.4所示的页面列举出了程序通过公开资源找到的PDF文件。通过GoogleDorks检索某家公司敏感文件的操作,其实已经属于常规测试的一部分了。网站管理人员把敏感文件错误地放在可被公开访问的服务器上,再加上他们没有对服务器进行正确配置,也就相当于把敏感文件暴露在搜索引擎的爬虫面前。

网页中还列举出了从reddit.com域名上收集到的E-mail账号。我通常会用这些信息来寻找更多的联系人信息,或进行钓鱼攻击。在程序工具运行的短短几秒钟的时间里,我们就收集到了与被测公司有关的大量信息。

最后我们共同看一下程序给出的最终报告,它以简单易读的方式展现了所有扫描结果。

报告还能列举出写法相似的几个域名,以及它们的所属人信息。这些信息在稍后环节中会非常有用。

列举出来的几个写法相似的域名,并非都为主域名公司所有。您的客户可能会关注这些信息,因为这可能意味着有人打算通过近似域名恶意地“搭顺风车”。从攻击者的视角来看,购买这些域名可能有助于社会工程学攻击。

通常而言,被动式信息收集是在测试最初进行的信息收集工作。如欲进行更深入的信息挖掘,可以试试Recon-ng程序。从http://bitbucket.org/LaNMaSteR53/recon-ng上可以下载到它的安装程序。它能够自动化地进行更深入的处理,能够以被动的方式获取到更多的信息。有兴趣的读者可以看看Derbycon2013的程序讲解:http://bit.ly/lkZbNcj。

2.2.2使用泄漏库来查找邮箱、认证信息

渗透测试人员要富有创造力,并且能调用所有的资源。不得不说,渗透测试人员要和坏人相似。在过去几个月里,我发现一种富有成效的小技巧——通过泄露出来的数据库查找认证密码。让我来大概解释一下是什么意思。

几个月前的某次攻击盗取了Adobe系统的大量用户信息。这些信息包括Adobe用户的邮箱地址、加密的密码和密码提示信息2。数据库的大小接近10GB。最初,这个数据库只在某个不公开的小圈子里秘密地流传,现在人们已经可以公开下载它了(试着搜索下Adobe和user.tar.gz)。从一个攻击者的视角来看,这个数据库可谓是一座富含信息的“金矿”。我一般会对这类文件进行解析,检索与测试目标相关的各类信息。

当然,您首先要确认这种测试是否在您允许的范围之内,不要因为使用泄漏的密码而触犯任何法律。如果您进行的测试完全是黑盒测试,那么您就可以采取这种手段进行渗透。

我使用Linux的grep命令对网上泄露的Adobe密码表进行检索,查找与yahoo.com有关的内容(您要搜索您所测试的域名)。可以看到,这次检索获取了很多用户(我进行了处理)的邮箱地址、加密后的密码和密码提示。

密码提示同样值得关注。略微研究一下,就能知道某个用户的男友是谁,他们的小猫小狗的名字是什么。但是我通常会首先查找现成的研究结果。

根据以上信息种的密码提示和特征信息,我找到了两组研究样本,并且逆向破解出了加密的密码。由于Adobe保存的并非是密码的hash,而是对密码进行加密存储,所以在没

有key的情况下是很难破解出密码的。我找到的两个破解出的列表如下所示:

●http://*******txt:

●http://*******.txt.

我对这些列表进行了合并处理,并储存于下述地址:

●http://*******.CSV.

然后,我编写了Python脚本程序,对邮箱和加密的密码进行处理,并与foundpw.csv文件进行对照分析。有兴趣的读者可通过下述网址找到我写的脚本文件:

●http://**********.txt.

我把这些信息以“邮箱,加密密码”的格式储存为文件,然后运行名为password_check的Python脚本程序(见图2.7)。如果有匹配的密码,脚本就返回相应的邮箱地址和破解出的密码。虽然我们没能大量破解这两个研究样本的密码信息,但是也算小有收获。接下来,我们将演示截获密码的使用方法。

我通常用破解出的密码登录公司企业邮箱的OutlookWeb页面(OutlookWebAccess,OWA)或者VPN。您可能需要调整密码中的某些变量(比如,如果密码中有2012,不妨把2012替换为2013)。另外,还要注意不能因为多次尝试登录而冻结账号。

然后我会用这些邮箱地址进行钓鱼攻击。要知道,出现在Adobe数据库里的用户很有可能就是IT人员,这些人的账户信息可能格外值钱。

正因如此,渗透测试才是这样的缤彩纷呈。渗透测试不是简单地套用什么工具。渗透测试人员更要运用自己的创造力为客户模拟最厉害的他们最可能受到的攻击。现在您应该有了大量的lP地址段、全称域名(FQDN)、邮箱地址、用户名和可能的密码。好!有了这些信息,让我们开始进行主动的挖掘吧。

2.3外部或内部的主动式信息收集

主动式信息收集就是通过主动扫描确认目标安装的操作系统和网络服务,并发现潜在漏洞的过程。即主动式信息收集必定对指定的网络段进行扫描。无论是在网络的内部还是外部进行扫描,主动式信息收集都要采用得当的扫描工具。

本书不会详细介绍扫描器的运行方法,毕竟大多数读者已经非常熟悉扫描工具了。如果您尚未掌握扫描工具的使用方法,我推荐您用社区版的Nexpose,或者用试用版的Nessus进行练习。在家里或者实验室里进行网络扫描,了解这些工具获取可发现哪些类型的信息,使用认证信息进行扫描的方法,以及网络上所产生的流量类型。这些扫描程序会频繁地触发IDS/IPS告警。在熟悉常见的扫描工具之后,我们可开始更深入地了解这种方式的信息收集。

2.3.1网络扫描的流程

本节讲述进行高效扫描的方法,它涉及扫描的工具、流程和相关技术。我的扫描流程大体分为以下几个步骤。

●用Nexpose/Nessus扫描。

●用Nmap扫描。

●用自定义的Nmap扫描。

●用PeepingTom抓取屏幕。

用Nexpose/Nessus进行网络漏洞扫描

这两款工具可谓大名鼎鼎,它们都是速度最快、效果最佳的扫描工具。通常,我会对它们进行详细的调整,然后使用一款工具进行详细的安全检查。如果时间紧迫,我会首先使用以前的配置文件进行扫描,仅检测已知的安全漏洞,然后使用默认的预设配置进行第二次扫描。虽然第一次扫描的速度很快,但是往往只会得到一些重要的发现。

先来大致说一下漏洞扫描器。在第1章,我推荐您购买Nexpose或者Nessus扫描程序。至于哪一个扫描器的品质更佳,就是见仁见智的问题了。我确实用过绝大部分的商业扫描程序,但是这些程序里没有一款可称得上是完美的或者是极致的解决方案。若将这些工具进行比较,总会发现它们功能都不完备,总是或多或少地缺少点什么。所以,我们最好采用多个工具进行漏洞扫描。当然,预算往往不会允许我们什么都买。

如果只能从中选一,那我推荐Tenable的Nessus漏洞扫描器。从它能扫描的lP地址数量以及费用(1500美元)来进行综合评定,还是Nessus比较划算。而Nexpose的咨询许可证价格是Nessus的两倍.所能扫描的lP数量也有限制。不过您最好还是在购买前确认一下价格,因为行情可能随时不同。

本文将通过案例说明多个扫描工具的必要性。例如,使用专业版的Nexpose对我的网站进行扫描。在扫描时,我指定了标准的漏洞扫描配置文件,并没有进行深入的Web应用程序检测。Nexpose给出了4个严重的警告,详细情况如图2.8所示。

然后,我们使用专业版的TenableNessus扫描程序进行相同的扫描,并指定了相似的配置文件。可见,扫描结果大有不同。仅仅对我的网站进行扫描,就能存在这么大的区别。

可想而知,在大规模的扫描中,扫描结果也不会更为接近。Nessus发现了3个中级的警告,5个低级别警告。

这两个例子说明这两款程序有很大差别。大致进行比较,就会发现Nexpose检测出了Wordpress路径泄露漏洞,而Nessus没能发现这一问题。

虽然扫描器很有用,也是进行网络渗透的必备工具,但是您要了解它们的优点和局限性。

Nmap-抓取旗标(banner)

在抓取旗标之前,我通常会调整扫描选项,使用Nmap程序对常见端口进行操作系统和网络服务的检测扫描。如果时间充裕,我还会对所有的65535个端口进行扫描。在Nmap进行常规扫描的同时,我还会指定它运行一个抓取旗标的Nmap脚本。后文将会对此进行说明。

进行完整的漏洞扫描会很耗时间。我们可以利用Nmap脚本,在端口扫描的同时,抓取基本的端口信息。这些信息也有助于我们制定更具针对性的攻击计划。

希望您不仅会用Nmap程序,更要了解它的原理。我认为Namp是一款具备模块化特性的快速而高效的扫描工具,足以满足常规的扫描需求。推荐您参考Fydor撰写的介绍Nmap的图书(http://*******/)。

本节重点介绍使用Nmap识别操作系统和网络服务的方法,所以我最关注的问题是如何扫描所有的65535个端口,以及如何检测开放端口并获取旗标信息。

      这种方法还可用来发现同一个网络环境发生的具体变化。在客户要求您每月都进行一次例行扫描的时候,这种方法正好可以非常快速简单地发现网络情况的具体变化(需要一些辅助脚本)。

在前文的安装阶段,我们安装了HDMoore的banner-plus.nse脚本。这也是它在映射整个网络时所用的脚本3。它提供了一种可以快速识别开放端口旗标页面信息的方法。运行扫描的命令大致如下:

nmap-script/usr/share/nmap/scripts/banner-plus.nse-min-rate=-400-min-parallelism=512

-pl-65535.n-Pn-PS-oA/opt/peepingtom/report<IPCIDR>

这些选项的含义如下所示。

-script设置安装阶段下载的banner-plus脚本的位置。

-min-rate保证扫描会在一定时间内结束。

-min-parallelism设置并行扫描的数量。

-pl-65535对所有的端口(即65535个端口)进行扫描。

·n禁用DNS解析(可以加快扫描速度)。

-Pn禁用ping(许多服务器会过滤掉外网的ping请求)。

-PS使用TCPSYNping的方式进行主机探测。

-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地址。更棒的是,它可以查询漏洞系统的旗标页面。虽然的确有人会伪造旗标信息,但是以往的渗透测试经历表明,旗标信息还算得上是可靠的判断依据。intemet-scan的初始化页面。

在收集到所有旗标信息之后,我们可使用正则表达进行快速检索,搜索那些有漏洞可利用的网络服务。我会采取多种方式对旗标信息进行排序。例如,在某次对16位子网(CIDR表示法)的扫描结果中,我通过这种方法筛选出了以下这些旗标

本文为网络安全技术研究记录,文中技术研究环境为本地搭建或经过目标主体授权测试研究,内容已去除关键敏感信息和代码,以防止被恶意利用。文章内提及的漏洞均已修复,在挖掘、提交相关漏洞的过程中,应严格遵守相关法律法规。