第4章 信息收集

本章将阐述信息收集的概念及其作用,进而介绍信息收集阶段的各项渗透测试工作。此外,我们还会介绍 Kali Linux 收录的信息收集工具。希望读者在阅读本章之后能够理解在信息收集阶段的渗透测试工作,并且能够在实际的渗透测试中顺利收集各种必要信息。

前面章节介绍过,渗透测试方法论的第二个阶段是信息收集阶段。在这个阶段中,要尽可能地收集与测试目标有关的各类信息。这些信息包括DNS信息、IP地址、采用的技术以及具体配置、用户名的组织单位、文件、程序代码、密码重置信息、联系人信息等。信息收集阶段收集到的每一条信息都至关重要。

信息收集的方法可归为两类:主动式信息收集和被动式信息收集。主动式收集方法是通过直接发起与被测目标网络之间的互动来获取相关信息。例如,ICMP ping 或者 TCP 端口扫描就属于主动式信息收集手段。而被动信息收集方法,则是通过第三方服务来获取目标网络的相关信息,例如使用谷歌搜索引擎等。

这两种收集方式并没有优劣之分,每种方式都有各自的优点。如果采用被动式扫描,您收集到的信息相对较少,但是这种扫描却不会被发现。然而,尽管主动扫描可获取的信息相对多一些,但是很多设备可能已经捕获了您的扫描行为。在渗透测试项目中,可能需要重复进行多次扫描才能获取足够充分的信息。您也可以与渗透测试的顾客进行沟通,选取他们需要的信息收集方式。

本章内容分为下述几个部分:

● 通过公开网站收集目标域的有关信息;

● 收集域的注册信息;

● DNS 分析;

● 收集路由信息;

● 利用搜索引擎。

4.1 公开网站

我们可以通过某些公开网站来收集目标域的有关信息。通过公开网站收集信息的好处在于不必向目标网络直接发送数据,从而避免使目标察觉我们的行动。

您可以使用下述网站:

figure_0087_0038

上述网站简单易用,您只需在可接入互联网的设备上打开浏览器就可开始收集信息。我们建议您在使用Kali Linux 里的工具之前首先使用公开网站获取信息。

为了保护真正存在的网域,我们在本文的示例里更换了真实的域名。下文用到了很多的域名,例如IANA的保留域名examples.com。这些域名仅供演示之用。

4.2 域名的注册信息

在知道目标的域名之后,您想做的第一件事可能就是从whois数据库里获取域名的注册信息。whois数据库记录有该域名的DNS服务器信息和注册人的联系信息。

WHOIS是一个标准的互联网协议,可用于收集网络注册、注册域名、IP地址和自治系统的信息。RFC 3912 明确了这一规则的有关规范,有兴趣的读者可参见 https://www. ietf.org/rfc/rfc3912.txt。

默认安装的Kali Linux 带有whois 客户端程序。如需查询某一域名的whois 信息,可在终端中使用下述whois指令:

whois example.com

然后,该指令会显示这个域名的whois信息:

Whois Server Version 2.0

Domain names in the .com and .net domains can now be registered

with many different competing registrars. Go to http://www.internic.net

for detailed information.

Domain Name: EXAMPLE.COM

Registrar: REGISTRAR.COM

Whois Server: whois.registrar.com

Referral URL: http://registrar.com

Name Server: NS.HOSTING.COM

Name Server: NS2.HOSTING.COM

Status: clientDeleteProhibited

Status: clientRenewProhibited

Status: clientTransferProhibited

Status: clientUpdateProhibited

Updated Date: 08-apr-2012

Creation Date: 08-apr-2012

Expiration Date: 08-apr-2015

Last update of whois database: Wed, 25 Jul 2012 02:15:41 UTC <<<

Please note: the registrant of the domain name is specified

in the "registrant" field. In most cases, registrar.com

is not the registrant of domain names listed in this database.

The Registrant:

Jalan Sudirman No. 1

DKI Jakarta

Indonesia 12345

Domain Name: EXAMPLE.COM

Created on: 08-Apr-12

Expires on: 08-Apr-15

Last Updated on: 08-Apr-12

Administrative Contact:

The Registrant

Jalan Sudirman No. 1

DKI Jakarta

Indonesia 12345

62 2112345678

Technical Contact:

The Registrant registrant@example.com

Jalan Sudirman No. 1

DKI Jakarta

Indonesia 12345

62 2112345678

Domain servers in listed order:

NS.HOSTING.COM

NS2.HOSTING.COM

我们可以在上述 whois 返回结果中获取 DNS 服务器的信息以及域名注册人的联系信息。这些信息会在渗透测试的后续阶段发挥作用。

除了通过命令行的whois客户端程序,我们还可以使用下述网站获取whois信息,这些网站同样通过whois客户端程序查询有关信息。

● www.whois.net

● www.internic.net/whois.html

此外,您也可以访问顶级域名注册商,查询相应域名的信息。

● 美洲:www.arin.net/whois/

● 欧洲:www.db.ripe.net/whois

● 亚太:www.apnic.net/apnic-info/whois_search2

顶级域名注册商的系统,只提供在他们那里注册的域名的 whois信息。例如 ARIN 提供的 whois 服务只能在它自己的数据库里查找whois信息,而不会搜索RIPE和APNIC的数据库。

4.3 DNS记录分析

使用DNS分析工具可收集DNS服务器信息和有关域名的相应记录。

DNS记录分为下述几种类型。

figure_0090_0039

例如,在某次渗透测试的过程之中,客户要您查找他们域名下的所有主机和IP地址。此时您只有域名信息。我们能够通过几个工具回答客户的询问。

4.3.1 host

在得到DNS服务器信息之后,下一步工作就是找出主机名称的IP地址。这种情况下,我们可以使用host指令向DNS服务器查询主机的IP地址。

host www.example.com

该指令的返回结果如下。

www.example.com has address 192.0.43.10

www.example.com has IPv6 address 2001:500:88:200::10

我们可以从中找到主机www.example.com的IPv4地址和IPv6地址。

默认情况下,host指令会搜索域名的A记录、AAAA记录和MX记录。如需查询全部DNS记录,可以使用选项-a。

host -a example.com

Trying "example.com"

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25153

;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 2

;; QUESTION SECTION:

;example.com.     IN  ANY

;; ANSWER SECTION:

example.com.   3201 IN  SOA dns1.icann.org.

hostmaster.icann.org. 2012080782 7200 3600 1209600 3600

example.com.   46840 IN  NS  a.iana-servers.net.

example.com.   46840 IN  NS  b.iana-servers.net.

;; ADDITIONAL SECTION:

b.iana-servers.net. 1401 IN A  199.43.133.53

a.iana-servers.net. 1401 IN A  199.43.133.53

Received 170 bytes from 202.152.165.39#53 in 563 ms

host指令查询域名信息的DNS服务器,就是文件/etc/resolv.conf指定的DNS服务器。如果想查询其他的DNS服务器,可在指令的尾部直接添加DNS服务器地址。

通过查询域名的IP信息,这种查询叫做正向查询(forward lookup)。而通过IP 地址查询域名,这种查询叫做逆向查询(reverse lookup)。

使用下述指令进行逆向查询,将会得到什么信息?

host 23.23.144.81

host 程序还可以进行DNS 域传输(zone transfer)。域传输的结果包含某一域里所有的主机名称。

DNS服务器的域传输机制用于在主控(master)DNS服务器和其他服务器(通常是从属DNS服务器/slave)进行DNS数据库同步。若没有这种机制,管理员就得分别更新每台 DNS服务器的数据库。DNS 服务器应当只和同一域里的经过身份验证的服务器进行域传输。

因为DNS域传输功能可能外泄整个域的所有信息,所以人们大多都对这个功能进行了限制。当今,提供公开的域传输的DNS服务器已经很少见了。

如果某台 DNS 服务器会与任意主机进行域传输,就说明这台 DNS服务器的配置不正确。

如果某台DNS服务器可以进行域传输,我们就可使用下面这类指令。

host -l example.com ns4.isp.com

DNS域传输的结果如下。

Using domain server:

Name: ns4.isp.com

Address: 172.16.176.22#53

Aliases:

example.com name server ns1.isp.com.

example.com name server ns2.isp.com.

example.com has address 192.168.1.1

smtp.example.com has address 192.168.1.2

mail.example.com has address 192.168.1.3

webmail.example.com has address 192.168.1.3

www.example.com has address 192.168.1.4

在进行域传输时,host指令将会返回该域的NS记录、PTR记录和地址记录。本例所使用的配置不当的DNS服务器是ns4.isp.com。

4.3.2 dig

除了host指令之外,您还可以使用dig指令进行DNS查询。相比host指令而言, dig指令的用法更为灵活,输出更为清晰。您甚至可以使用dig指令处理一个文件里所有的DNS查询指令。

我们可使用dig命令查询example.com(见图4.1)。

figure_0093_0040

图4.1

如果在使用它的时候不指定任何选项,dig指令仅会返回该域的A记录。如需查询全部类型的DNS数据,我们可把type选项设定为any。

dig example.com any

; <<>> DiG 9.7.0-P1 <<>> example.com any

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40971

;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 2

;; QUESTION SECTION:

;example.com.     IN  ANY

;; ANSWER SECTION:

example.com.   3565 IN  SOA  dns1.icann.org.

hostmaster.icann.org. 2012080782 7200 3600 1209600 3600

example.com.   83186 IN  AAAA 2001:500:88:200::10

example.com.   48296 IN  NS  b.iana-servers.net.

example.com.   48296 IN  NS  a.iana-servers.net.

;; ADDITIONAL SECTION:

a.iana-servers.net. 182 IN  A  199.43.132.53

b.iana-servers.net. 182 IN  A  199.43.133.53

;; Query time: 327 msec

;; SERVER: 202.152.165.39#53(202.152.165.39)

;; WHEN: Sat Aug 18 10:46:09 2012

;; MSG SIZE rcvd: 198

这条指令返回了该域名的SOA记录、NS记录、A记录和AAAA记录。

在使用dig指令进行域传输时,我们必须设置DNS服务器为权威DNS,并且设置传输类型为axfr。

dig @ns4.isp.com example.com axfr

该指令的返回结果如下。

; <<>> DiG 9.7.0-P1 <<>> @ns4.isp.com example.com axfr

; (1 server found)

;; global options: +cmd

example.com.   3600 IN SOA ns1.isp.com. hostmaster.

isp.com. 2011020409 900 600 86400 3600

example.com.   3600 IN  NS  ns1.isp.com

example.com.   3600 IN  NS  ns4.isp.com

example.com.   3600 IN  A  192.168.1.1

example.com.   3600 IN  MX  192.168.1.3

mail.example.com.  3600 IN  A  192.168.1.3

webmail.example.com. 3600 IN  A  192.168.1.3

www.example.com.  3600 IN  A  192.168.1.4

example.com.   3600 IN  SOA ns1.isp.com hostmaster.

isp.com 2011020409 900 600 86400 3600

;; Query time: 855 msec

;; SERVER: 172.16.176.22#53 (172.16.176.22)

;; WHEN: Sat Aug 18 10:59:11 2012

;; XFR size: 9 records

这个指令的返回结果和host 的返回结果十分相似。如果看到这种类型的返回结果,就说明我们收集到了所有DNS记录。

4.3.3 dnsenum

另外,我们可利用dnsenum程序收集DNS数据。这个程序能够收集的DNS信息分为下述几类:

● 主机IP 地址;

● 该域的DNS 服务器;

● 该域的MX 记录。

在这一章里,您会发现不同程序的返回结果十分相似。这是因为我们就是在通过不同的程序验证相同的数据。返回同一信息的程序越多,我们对这一信息就越有信心。

除了获取DNS信息的功能之外,dnsenum还有下述几个特性。

● 它能够通过谷歌捜索其他的域名和子域名。

● 可使用字典文件对子域名进行暴力破解。Kali Linux 收录的dnsenum 自带有字典文件(dns.txt),该字典可测试1480个子域名。此外另有可测试266930个子域名的字典文件dns-big.txt。

● 可对C 类网段进行whois 査询并计算其网络范围。

● 可对网段进行反向査询。

● 采用多线程技术,可进行并发査询。

如需启动dnsemu,可在终端中使用下述指令。

dnsenum

而后,程序会在屏幕上显示它的指令介绍。

为了演示dnsenum的用法,我们将用它来收集目标域的DNS信息。

dnsenum example.com

该指令的返回结果如下。

dnsenum.pl example.com

dnsenum.pl VERSION:1.2.2

----- example.com ----

Host's addresses:


Name Servers:


ns1.isp.com 10771 IN A 172.168.1.2

ns0.isp.com 7141 IN A 172.168.1.1

Mail (MX) Servers:


hermes1.example.com 864000 IN A 192.168.10.3

hermes.example.com 3600 IN A 192.168.10.2

Trying Zone Transfers and getting Bind Versions:


Trying Zone Transfer for example.com on ns0.isp.com ...

AXFR record query failed: NOERROR

ns0.isp.com Bind Version:

DNS server

Trying Zone Transfer for example.com on ns1.isp.com ...

example.com      86400 IN SOA

example.com      86400 IN NS

example.com      86400 IN MX

example.com      86400 IN TXT

admin.example.com    3600 IN NS

blogs.example.com    3600 IN NS

ftp.example.com   3600 IN A  192.168.10.4

hermes.example.com   3600 IN A 192.168.10.2

hermes.example.com   86400 IN TXT

hermes.example.com   86400 IN SPF

hermes1.example.com   86400 IN A   192.168.10.2

www.example.com   3600 IN NS

ns1.isp.com Bind Version:

DNS server

brute force file not specified, bay.

默认情况下,dnsenum会返回主机地址、名称解析服务器和邮件服务器的IP地址信息。好在ns1.isp.com这台DNS服务器允许我们对example.com进行域传输。

在不能进行域传输的情况下,我们可以使用字典文件对子域名进行暴力破解。例如,如果使用字典文件dns.txt暴力破解example.com的子域名,可使用下述指令。

dnsenum -f dns.txt example.com

该指令的返回结果如下。

Brute forcing with dns.txt:


apps.example.com 86400  IN  A  192.168.10.152

mail.example.com 86400  IN  A  192.168.10.107

portal.example.com 86400  IN  A  192.168.10.249

请注意,DNS域名暴力破解的耗时较长。

幸运的是,目标域使用了常见域名。我们使用字典文件进行暴力破解,发现了多个子域名(apps、mail和portal)。

我们还可以通过 Google 搜索某域的子域名。在 DNS 域传输被禁用的情况下,这种方法十分有效。在dnsenum指令里加上“–p页数”选项,可在Google结果的前几页里搜索子域名。而在指令的里加上“–s 数量”,则可按个数搜索子域名。为了加速搜索进程,可以设置线程的数量(--threads)。

4.3.4 dnsdict6

前文介绍了几个枚举IPv4子域名的DNS工具。如果您需要枚举IPv6的子域名,就需要使用The Hacker’s Choice(THC)小组推出的dnsdict6。

为了访问Kali Linux 中的dnsdict6,可以在终端中输入下述命令。

dnsdict6

这将显示dsndict6帮助页面。

如果没有任何选项,dsndict6将使用内置的字典文件和8个线程。

枚举example.com各子域名的指令如下。

dnsdict6 example.com

该指令的返回结果如图4.2所示。

figure_0098_0041

图4.2

dnsdict6自带的字典文件可测试798个子域名。在使用dnsdict6暴力破解子域名之后,我们可以看到它测试出了example.com的1个IPv6的子域名(www)。

我们发现dnsdict6显示的字典单词的数量不对。在我们给它指定了一个含有3个条目的字典文件之后,dnsdict6 程序却显示字典里含有4个条目。

在指定选项-4 之后,dnsdict6 就可以测试IP v4的子域名。还可通过-d 选项,让它收集该域的DNS和NS信息。现在,我们演示一下这两个选项的作用(见图4.3)。

figure_0098_0042

图4.3

4.3.5 fierce

DNS枚举工具fierce可通过多项技术查找目标的IP地址和主机名。它会通过您计算机使用的 DNS 服务器查找继而使用目标域的 DNS 服务器。它同样可以利用暴力破解子域名。在使用字典文件进行暴力破解时,它会调用目标域的 DNS 服务器逐条尝试字典里的DNS条目。这个工具的主要特点是,它能够针对不连续的IP空间和主机名称进行测试。

在Kali Linux 里的终端窗口里使用下述命令可查看fierce 的帮助文件。

fierce -h

举例来说,我们可使用fierce查找某个域的有关信息。

fierce -dns example.com -threads 3

该指令返回的结果如下。

DNS Servers for targetdomain.com:

ns4.example.com

ns1.example.com

ns2.example.com

ns3.example.com

Trying zone transfer first...

Testing ns4.example.com

Request timed out or transfer not allowed.

Testing ns1.example.com

Request timed out or transfer not allowed.

Testing ns2.example.com

Request timed out or transfer not allowed.

Testing ns3.example.com

Request timed out or transfer not allowed.

Unsuccessful in zone transfer (it was worth a shot)

Okay, trying the good old fashioned way... brute force

Checking for wildcard DNS...

Nope. Good.

Now performing 1895 test(s)...

192.168.116.3 voips.example.com

192.168.116.7 ns.example.com

192.168.116.19 streaming.example.com

192.168.117.50 dev.example.com

192.168.117.16 mx1.example.com

192.168.117.17 mx2.example.com

192.168.117.18 mx3.example.com

192.168.117.16 imap.example.com

192.168.117.5 www.example.com

192.168.117.6 intra.example.com

192.168.117.17 mail.example.com

192.168.117.5 web.example.com

192.168.117.16 webmail.example.com

Subnets found (may want to probe here using nmap or unicornscan):

192.168.73.0-255 : 2 hostnames found.

192.168.46.0-255 : 1 hostnames found.

192.168.116.0-255 : 34 hostnames found.

192.168.117.0-255 : 25 hostnames found.

Done with Fierce scan: http://ha.ckers.org/fierce/

Found 62 entries.

Have a nice day.

fierce进行DNS枚举的耗时可能会比较长。

上述篇幅介绍了搜索某个域的主机名称的多种方法。您可能会对主机名的作用产生疑问。在渗透测试项目里,只要能够在DNS分析阶段找到主机名称,就可以对该主机进行测试。

4.3.6 DMitry

DMitry(Deep Magic Information Gathering Tool)属于多功能的信息收集工具。它收集信息的主要方式可分为:

● 根据IP 地址(或域名)来査询目标主机的whois 信息;

● 在Netcraft.com 的网站上挖掘主机信息;

● 査找目标域中用的子域;

● 査找目标域的电子邮件地址;

● 探测目标主机上打开的端口、被屏蔽的端口和关闭的端口。

尽管 Kali Linux 中的很多工具都可以部分获取这些信息,但是 DMitry 更为方便。它整合了这些工具,能够在同一个报告里记录多种工具才能获取到的所有信息。

实际上 DMitry 不仅具有 DNS 分析功能,还有路由分析功能。但是我们认为这个工具更侧重与DNS分析,所以把它归到了DNS类工具。

如需通过图形界面启动DMitry,可通过菜单依次选中Applications|KaliLinux|Information Gathering | OSINTAnalysis | dmitry。您也可以在终端窗口里通过下述指令启动它。

dmitry

本例将使用DMitry程序依次完成下述任务:

● 进行whois 査询;

● 从Netcraft.com 的网站上收集相关信息;

● 捜索所有可能的子域;

● 搜索所有可能的电子邮件地址。

下面这个指令即可完成全部上述功能。

dmitry -iwnse targethost

该指令的返回结果如下。

Deepmagic Information Gathering Tool

"There be some deep magic going on"

HostIP:192.168.xx.xx

HostName:targethost

Gathered Netcraft information for targethost


Retrieving Netcraft.com information for targethost

No uptime reports available for host: targethost

Gathered Subdomain information for targethost


Searching Google.com:80...

HostName:targethost

HostIP:192.168.xx.xx

HostName:www.ecom.targethost

HostIP:192.168.xx.xx

HostName:blogs.targethost

HostIP:192.168.xx.xx

HostName:static.targethost

HostIP:192.168.xx.xx

HostName:webmail.targethost

HostIP:192.168.xx.xx

...

Gathered E-Mail information for targethost


Found 0 E-Mail(s) for host targethost, Searched 0 pages containing 0

results

DMitry程序还可以作简单的端口扫描,所需指令如下。

dmitry -p targethost -f -b

扫描结果如下。

Deepmagic Information Gathering Tool

"There be some deep magic going on"

HostIP:192.168.xx.xx

HostName:targethost

Gathered TCP Port information for 192.168.xx.xx

Port   State

...

80/tcp   open

...

135/tcp  filtered

136/tcp  filtered

137/tcp  filtered

138/tcp  filtered

139/tcp  filtered

Portscan Finished: Scanned 150 ports, 138 ports were in state closed

从上述的扫描结果可以看出,targethost 使用了某种包过滤设备。它只允许连接到该主机的80端口,这个端口通常由Web服务器占用。

4.3.7 Maltego

Maltego是开源的情报收集程序和法证调查程序。它能够以一种人性化的方式挖掘、收集并整理信息。Maltego的开源意味着它从公开的资源里收集信息。在收集信息之后,您可使用Maltego标注各种信息之间的关联。

Maltego 能够以图形化的方式显示数据之间的关联。在分析信息片段各方面的共同性时,这种可视化功能可使工作变得简单。

Maltego可以收集以下几种网络信息:

● 域名;

● DNS 名;

● whois 信息;

● 网段;

● IP 地址。

它还可以用来收集与人有关的信息,例如:

● 某人所在公司或所在组织;

● 与某人有关的E-mail 地址;

● 与某人有关的网站;

● 与某人有关的社交网站;

● 与某人有关的电话号码。

Kali Linux 自带的Maltego应当是Maltego 3.3.0 Kali Linux 版。这属于社区版本,它存在一些功能上的限制。详细的限制可参见 http://www.paterva.com/web5/client/community.php。简而言之,这种版本限制分为:

● 不可用于商业用途;

● 每次转换(transform)最多返回转换结果中的12 项;

● 用户需要先在官方网站上注册,才能使用客户端程序;

● API key有效期仅为数天;

● 它与社区版的其他用户共享一台性能并不出色的服务器;

● 客户端和服务器端的通信是不加密的;

● 只能升级到主要发行版;

● 没有客户支持;

● 服务器端的转换功能不会更新。

Maltego具有70多种转换功能。所谓转换(transform)就是信息收集的一个阶段。Maltego每做一次转换就是在做一个阶段的信息收集工作。

如需使用 Maltego,可在图形菜单里依次选中 Kali Linux | Information Gathering |OSINTAnalysis | maltego,或者在终端中使用下述指令。

maltego

而后您将看到它的欢迎信息(见图4.4)。数秒钟之后,程序会启动Maltego设置向导,以帮助您在第一次运行它的时候进行客户端设置。

figure_0104_0043

图4.4

点击Next后进入图4.5所示的界面。

figure_0105_0044

图4.5

此时您需要输入登录Maltego社区的账号信息。如果您没有社区账号,可点击register here链接,在官方网站上进行注册。

注册页面如图4.6所示。

figure_0105_0045

图4.6

在空白处填写相关信息之后,点击Register!按钮完成注册。

如果您有Maltego账号,在程序里输入正确的登录信息就可进入图4.7所示的界面。

figure_0106_0046

图4.7

接下来要设置Maltego转换的种子(seed),如图4.8所示。

figure_0106_0047

图4.8

此后Maltego客户端程序会连接Maltego服务器,以获取转换所需的信息。如果上述设置都设置正确,您将看到图4.9所示的界面。

figure_0107_0048

图4.9

如果出现了上述界面,就说明 Maltego 成功完成了初始化操作。您现在就可以使用Maltego客户端程序。

在介绍Maltego的各种使用方法之前,我们先熟悉一下程序的界面(见图4.10)。

figure_0107_0049

图4.10

程序窗口的左上角是 Palette(控制面板)窗口。您可以在这个窗口里选择不同实体(entity)类型的对象目标。Maltego的实体类型分为6组。

● 设备(Device):例如电话、照相机。

● 基础设施(Infrastructure):例如 AS、DNS 名称、域名、IPv4 地址、MX 记录、NS记录、网段、URL和网站。

● 地点(Locations):例如地球。

● 渗透测试(Penetration testing):采用各种技术的测试项目。

● 个人(Personal):别名、文件、E-mail 地址、图像、人物、电话号码和短语。

● 社交网络(Social Network):包括Facebook 和Twitter 实体、好友关系等。

图4.10顶部的中间部分,分别是Main View(主视图)、Bubble View(气泡图)和Entity List(实体清单)。分析人员应该在大图里标注数据之间的各种关系,而他们可在这三种视图里查看那些在大图中不明显的信息。Main View是常规工作视图,Bubble View把信息节点显示为气泡,而Entity List 则把节点显示为文本。

在视图旁边的几个图表分别代表不同的布局算法(layout algorithm)。Maltego 支持4种布局算法。

● 块状布局(Block layout):信息挖掘的默认布局。

● 分层布局(Hierarchical layout):类似文件管理器的树状布局。

● 中心布局(Centrality layout):靠近中心的节点围绕中心进行分布,其他节点分散在四周。

● 紧凑布局(Organic layout):节点分布距离尽量紧凑,每个节点与其他节点之间的距离尽量保持最短。

熟悉过程序界面之后,我们开始演示它的功能。

本文以example.com为例,演示收集某个域的信息的具体方法。

我们首先使用快捷键(Ctrl-T)创建新的工作图(graph)。在Palette标签里选Infrastructure,然后点击 Domain。把对象拖曳到主窗口。如果操作成功,您将在主窗口里看到名为paterva.com的域对象。双击这个名称,把它重新命名为目标域;在本例中,我们给它重命名为example.com。

figure_0109_0050

图4.11

右键点击这个域名,可看到可以应用的转换操作:

● DNS from domain(获取DNS 信息);

● Domain owner's details(域注册人信息);

● E-mail addresses from domain(E-mail 地址);

● Other transforms(其他转换,包括To Person、To Phone numbers、To Website);

● Files and documents from domain(文档操作);

● All transforms(查看所有转换)。

我们在菜单里选中Run Transform | Other Transforms | Domain To DNS NameSchema,转换结果如图4.12所示。

进行DNS from domain转换后,可收集网站地址和该域有关的DNS 信息。

您还可以进行其他转换。

如果您要更改测试对象为其他域,应当保存当前工作图。保存工作图的具体方法是,点击Maltego图标,然后选择Save。工作图将被以Maltego工作图的格式保存为.mtgx文件。然后,可双击现有的域对象,更改域名。

figure_0110_0051

图4.12

下一节将介绍几个收集路由信息的程序。

4.4 路由信息

获取网络路由信息的工具各种各样,本章将介绍几种常用工具。网络路由信息可以帮助测试人员了解自己的主机到目标主机之间的网络通信路径,进而理解目标主机的网络情况。保护目标主机的防火墙信息,往往也暗藏于路由信息里。

本节将介绍几款用于获取路由信息的工具。

4.4.1 tcptraceroute

tcptraceroute是traceroute程序的补充工具。传统的traceroute程序在其发送的UDP 或ICMP echo 数据包里,设置有特定的TTL(Time To Live)标志位。它把TTL的值从1开始递增,直到数据包到达目标主机为止。而tcptraceroute则是使用TCP数据包进行测试,它利用TCP SYN(握手请求)数据包进行路由信息探测。

相比其他程序,tcptraceroute 的优点在于其较高的通过率。如果在渗透测试人员和目标主机之间的防火墙禁止traceroute数据通过,那么traceroute指令就完全发挥不了作用。但是只要防火墙允许访问目标主机的特定TCP端口,就可以使用tcptraceroute程序穿过防火墙到测试目标主机。

在使用 tcptraceroute 时,如果相应的目标端口是开放的(open),程序将会收到SYN/ACK数据包;而如果目标端口是关闭的,那么它会收到一个RST数据包。

要使用tcptraceroute,只需在终端里使用下述指令。

tcptracaroute

这条指令会在屏幕上提示tcptraceroute的使用方法。

现在我们来演示它的用法。

我们使用下述指令以获取本机与example.com主机之间的路由信息。

traceroute www.example.com

该指令的返回结果如下。

traceroute to www.example.com (192.168.10.100), 30 hops max, 40 byte packets

1 192.168.1.1 (192.168.1.1) 8.382 ms 12.681 ms 24.169 ms

2 1.static.192.168.xx.xx.isp (192.168.2.1) 47.276 ms 61.215 ms

61.057 ms

3 *

4 74.subnet192.168.xx.xx.isp (192.168.4.1) 68.794 ms 76.895 ms

94.154 ms

5 isp2 (192.168.5.1) 122.919 ms 124.968 ms 132.380 ms

...

15 *

...

30 *

在第15个结果之后,就再也没有返回任何路由信息了。通常这是因为 traceroute的数据包被网络里的包过滤设备屏蔽了。

下面我们来使用tcptraceroute。假如我们事先知道目标主机为Web服务器开放了TCP协议的80端口,那么就可以使用下述指令。

tcptraceroute www.example.com

返回的结果如下。

Selected device eth0, address 192.168.1.107, port 41884 for outgoing packets

Tracing the path to www.example.com (192.168.10.100) on TCP port 80

(www),    30 hops max

1 192.168.1.1 55.332 ms 6.087 ms 3.256 ms

2 1.static.192.168.xx.xx.isp (192.168.2.1) 66.497 ms 50.436

ms 85.326 ms

3 *

4 74.subnet192.168.xx.xx.isp (192.168.4.1) 56.252 ms 28.041 ms

34.607 ms

5 isp2 (192.168.5.1) 51.160 ms 54.382 ms 150.168 ms

6 192.168.6.1 106.216 ms 105.319 ms 130.462 ms

7 192.168.7.1 140.752 ms 254.555 ms 106.610 ms

...

14 192.168.14.1 453.829 ms 404.907 ms 420.745 ms

15 192.168.15.1 615.886 ms 474.649 ms 432.609 ms

16 192.168.16.1 [open] 521.673 ms 474.778 ms 820.607 ms

这一次,我们的数据包成功到达了目标主机,并且给出了测试机与目标主机之间的完整路由信息。

4.4.2 tctrace

我们同样可以选用 tctrace 程序分析路由信息。这个程序通过向目标主机发送 TCP SYN数据包来获取相应信息。

如需使用tctrace程序,可在终端中使用下述指令。

tctrace -i<device> -d<targethost>

参数中的<device>指的是网卡接口,<targethost>则是被测试的目标主机。

例如,我们可以使用下述指令获取本机和www.example.com之间的路由信息。

tctrace -i eth0 -d www.example.com

该指令的返回结果如下。

1(1) [192.168.1.1]

2(1) [192.168.2.1]

3(all) Timeout

4(3) [192.168.4.1]

5(1) [192.168.5.1]

6(1) [192.168.6.1]

7(1) [192.168.7.1]

...

14(1) [192.168.14.1]

15(1) [192.168.15.1]

16(1) [192.168.16.1] (reached; open)

4.5 搜索引擎

Kali Linux 中的捜索引擎类工具可以使用搜索引擎获取目标主机的域名信息、电子邮件信息,以及文件的元数据(metadata)信息。这些工具被动收集的工作方式也正是它们的优势所在。如果您无法访问目标主机上的网站,不妨利用搜索引擎间接访问。就其结果而言,目标主机不会知道您具体进行了哪些操作。

4.5.1 theharvester

theharvester能够收集电子邮件账号、用户名和主机名/子域名信息。它通过数个公共资源搜索所需的信息。2.2版theharvester用到的公开资源如下所示。

● 谷歌(Google)

● 必应(Bing)

● PGP

● Linkedin

● Yandex

● People123

● Jigsaw

● Shodan

如需在Kali Linux 中使用theharvester,可在终端中使用如下指令。

theharvester

程序会在屏幕上提示该工具的使用方法。

例如,如果想从谷歌的前 100 项搜索结果里挖掘目标域里的电子邮件地址和主机名,可使用下述指令。

theharvester -d example.com -l 100 -b google

程序搜索到的E-mail地址和主机名如下。

[-] Searching in Google:

Searching 0 results...

[+] Emails found:


info@example.com

user1@example.com

user2@example.com

user3@example.com

[+] Hosts found in search engines:


192.168.118.14:sd1.example.com

192.168.118.14:sd2.example.com

192.168.118.14:event.example.com

192.168.118.14:test.example.com

203.34.118.7:nms.example.com

上述结果里含有多个E-mail地址和数个主机名,这都是theharvester通过Google搜索引擎收集到的信息。

如果需要收集其他信息,例如用户名等信息,我们可以指定程序使用linkedin.com。具体指令如下。

theharvester -d example.com -l 100 -b linkedin

该指令的返回结果如下。

[-] Searching in Linkedin..

Searching 100 results..

Users from Linkedin:

user1

user2

user3

user4

user5

user6

Total results: 6

从Linkedin.com网站上搜索到的目标域的用户名,将在后期的渗透测试阶段发挥作用。如果测试人员要发起社会工程学攻击之类的渗透,就会需要这些信息。

4.5.2 Metagoofil

Metagoofil通过谷歌引擎搜索目标域的文件的元数据信息(metadata)。目前,它支持的文件格式有:

● Word 文档(.docx、.doc);

● 表格文件(.xlsx、.xls、.ods);

● 演示文档(.pptx、.ppt、.odp);

● PDF 文件(.pdf)。

在获取元数据信息时,Metagoofil的内部操作过程大体如下:

● 使用Google 引擎在目标域内搜索指定的文件类型;

● 把搜索到的文档保存到本地磁盘;

● 从下载的文件中解析元数据信息;

● 把元数据信息的分析结果保存为HTML 文件。

我们可以在元数据信息里找到的信息有:

● 用户名;

● 软件版本;

● 服务器名或机器名。

渗透测试的后期阶段可能会用到这些信息。

要访问Metagoofil,在终端中执行如下命令:

metagoofil

这将显示该命令的使用方法和示例。

我们通过一个例子进行详细的用法说明。现在,我们要从目标域(-d example.com)里搜索DOC 文件和PDF 文件(-t .doc, .ipdf),并保存到test 目录里(-o test)。对于每种类型的文件,我们都要收集 20 个(-l 20)。我们希望这个程序只下载 5 个文件(-n 5),并将最终处理结果保存为test.html(-f test.html)。结合以上参数,我们应当使用的指令如下。

metagoofil -d example.com -l 20 -t doc,pdf –n 5 -f test.html -o test

该指令的返回结果如下。

[-] Starting online search...

[-] Searching for doc files, with a limit of 200

Searching 100 results...

Searching 200 results...

Results: 191 files found

Starting to download 5 of them:


[1/5] /support/websearch/bin/answer.py?answer=186645&amp;%20

form=bb&amp;hl=en

Error downloading /support/websearch/bin/answer.

py?answer=186645&amp;%20form=bb&amp;hl=en

[2/5] http://www.example.com/documents/customerevidence/27402_

Cakewalk_final.do

[3/5] http:// www.example.com/documents/customerevidence/5588_

marksspencer.doc

[4/5] http:// www.example.com/documents/uk/Ladbrokes.doc

[5/5] http:// www.example.com/~Gray/papers/PITAC_Interim_Report 8_98.doc

[-] Searching for pdf files, with a limit of 200

Searching 100 results...

Searching 200 results...

Results: 202 files found

Starting to download 5 of them:


[1/5] /support/websearch/bin/answer.py?answer=186645&amp;%20

form=bb&amp;hl=en

Error downloading /support/websearch/bin/answer.

py?answer=186645&amp;%20form=bb&amp;hl=en

[2/5] http:// www.example.com/pubs/77954/sl021801.pdf

[3/5] http:// www.example.com/pubs/152133/deepconvexnetwork

interspeech2011-pub.pdf

[x] Error in the parsing process

[4/5] http:// www.example.com/en-us/collaboration/papers/uruguay.pdf

[5/5] http:// www.example.com/pubs/63611/2002-droppo-icslpb.pdf

[+] List of users found:


Benjamin Van Houten

Marketing

IT

May Yee

sarah condon

clarel

Jim Gray

[+] List of software found:


Microsoft Office Word

Microsoft Word 10.0

Microsoft Word 9.0

Microsoft Word 8.0

Acrobat Distiller 5.0.5 (Windows)

Adobe PDF Library 8.0

Adobe InDesign CS3 (5.0.2)

[+] List of paths and servers found:


'Macintosh HD:Temporary Items:AutoRecovery save of Congressio'

'NCO Server:Staff (NCO Staff):Yolanda Comedy:IR22July:IR10Aug'

'C:\jim\HPCC\PACIT_Report_8_98.doc'

[+] List of e-mails found:


gzweig@mail.example.com

程序找到了很多文件,并从中收集到了大量诸如用户名和文件路径的信息。我们可以通过这些用户名穷举目标域里的用户名,进而使用字典暴力破解(在目标域中存在的)用户名的密码。需要小心的是,如果对目标域里的用户名进行暴力破解,可能会造成账号锁定的情况。此外,我们可以根据路径信息推测目标主机的操作系统。可见,我们完全可以在不直接访问目标域的网址的情况下获取上述信息。

Metagoofil 能够以报告格式生成汇总信息。例如,若把报告文件储存为 HTML 格式文件,我们可看到图4.13所示的内容。

figure_0118_0052

图4.13

这个报告含有目标域的用户名、软件版本、E-mail地址和服务器信息。

4.6 本章总结

本章介绍了信息收集阶段的渗透测试工作。这个阶段的工作通常是渗透测试里最先进行的工作。在这个阶段,我们要尽可能地收集目标组织的信息。越是了解测试目标,测试的工作就越是容易。著名的《孙子兵法》认为:

知己知彼,百战百胜。

这句话揭示了渗透测试领域的奥秘。

本章介绍了Kali Linux 里的信息收集工具。本章首先介绍了通过公开网站收集目标单位信息的方法,而后介绍了使用软件获取域注册信息的方法,还介绍了可收集路由信息的工具,以及利用搜索引擎来收集信息的工具。

下一章我们将介绍目标识别。