尽管Kali内置多种工具方便侦察,但许多工具包含的功能是重叠的,而且将数据从一个工具导入另一个工具通常是一个复杂的手工过程。大多数测试人员选择使用一个工具子集,用脚本调用它们。
最初的侦察一体化工具是命令行模式的,其中最常用的是DeepMagic信息收集工具(DMitry)。DMitry可以进行whois查询,检索netcraft.com信息,搜索子域名和电子邮件地址,并进行TCP扫描。但除了这些功能之外,它不具有可扩展性。
图3.7提供了使用DMitry工具对www.cyberhia.com进行查询的结果,以下这个命令可以用来枚举反向DNS到IP查询、whois、子域名、电子邮件地址和开放端口的细节。
图3.7 运行DMitry提取域名和Whois信息
注意,这里产生的一些信息可能属于提供DNS保护的托管公司。比如我们获取到的目标是Cloudflare或AWS内容交付网络(CDN)托管的名称服务器。
目前已有被动和主动侦察的集成应用框架。在下一节中,我们将更多地关注recon-ng。
recon-ng是一个用于进行侦察(被动和主动)的开源框架,最近还增加了一个完整的新插件市场。该框架类似于Metasploit和社会工程工具包(SET);recon-ng使用一个非常模块化的框架,每个模块都是一个定制的命令解释器,预先配置好要执行的特定任务。
recon-ng框架及其模块是用Python语言编写的,方便渗透测试人员轻松构建或改变模块进行测试。recon-ng工具还可调用第三方API来进行一些评估,这种额外的灵活性意味着recon-ng进行的一些活动可能会被第三方追踪到。用户可以指定一个常规的useragent字符串或代理请求,以尽量减少对目标网络的告警。
在较新版本的Kali中recon-ng是默认安装的。recon-ng收集的所有数据都被保存在一个数据库中,允许你针对存储的数据创建各种报告。用户可以选择其中一个报告模块来自动创建CVS报告或HTML报告。
要启动应用程序,在提示符下输入recon-ng;要查看可用的模块,在recon-ng>中输入marketplace search,如图3.8所示。
图3.8 在recon-ng中使用marketplace search对所有可用模块进行搜索
要安装任何模块,运行marketplace install modulename命令。要加载一个特定的模块,在modulename后输入modules load。如果模块有一个独特的名字,可以输入名字独特的部分,使用Ta b键自动补充完成命令,模块就会被加载,而不用输入完整的路径。
输入info能看到模块如何运行,如果有需要,还可以查看在哪里获取API密钥。一旦模块被加载,使用options set命令来设置选项,然后输入run来执行,如图3.9所示。
一般来说,测试人员可以用recon-ng来完成以下工作。
•使用多种来源收集主机和联系人,如haveibeenpwned、mangle、mailtester、censys和shodan。
•使用Flickr、Shodan、Geocode、YouTube和Twitter,识别主机和个人的地理位置。
•使用netcraft和相关模块识别主机信息。
•识别已被泄露到互联网上的账户和密码信息(domains-credentials中的pwnedlist模块——domain_ispwned、account_creds、domain_creds、leak_lookup和leaks_dump)。
1.IPv4
互联网协议(IP)地址是一串独特的数字,用于识别连接到私人网络或公共互联网的设备。如今,互联网IP地址大部分是基于版本4的,被称为IPv4。Kali集成了几个工具用于进行DNS侦察,如表3.2所示。
图3.9 加载hackertarget模块并设置源为www.packtpub.com
表3.2 Kali中用于进行DNS侦察的工具
在测试过程中,大多数研究者运行fierce以确认所有可能的目标已经被识别,然后运行至少两个集成工具(例如dnsenum和dnsrecon)以产生最大的数据量并提供一定程度的交叉验证。
在图3.10中,dnsrecon生成一个标准的DNS记录搜索和SRV记录的搜索。每个案例都显示了结果的摘要。
dnsrecon帮助渗透测试人员获得SOA记录、名称服务器(NS)、邮件交换器(MX)主机、使用发件人策略框架(SPF)发送电子邮件的服务器,以及正在使用的IP地址范围。
2.IPv6
尽管IPv4看起来是一个很大的地址空间,但几年前自由可用的IP地址已经用尽,迫使人们采用NAT来增加可用地址的数量。在选用改进的IP地址方案时,人们找到了一个更持久的解决方案,即IPv6。虽然它只占互联网地址的不到5%,但其使用量正在增加,渗透测试人员必须准备好解决IPv4和IPv6之间的差异。
图3.10 运行dnsrecon工具搜索www.packtpub.com
在IPv6中,源地址和目的地址的长度为128位,产生2 128 个可能的地址,准确地说是340,282,366,920,938,463,463,374,607,431,768,211,456个地址。
可寻址空间大小的增加给渗透测试人员带来了一些问题,特别是在扫描可用地址空间中寻找活跃的服务器时。然而,IPv6协议的一些特性也简化了探测发现过程,特别是使用ICMPv6来识别活跃的本地链接地址。
在进行初始扫描时,考虑IPv6是很重要的,原因如下:
•测试工具对IPv6功能的支持并不均衡,因此测试人员必须确保每个工具都经过验证,以确定其在IPv4、IPv6和混合网络中的性能及准确性。
•由于IPv6是一个相对较新的协议,目标网络可能包含错误的配置导致泄露重要数据;测试人员必须准备好识别和使用这些信息。
•旧的网络控制设备(防火墙、IDS和IPS)可能无法检测到IPv6侦察。在这种情况下,渗透测试人员可以使用IPv6隧道来保持与网络的隐蔽通信,并渗出未检测到的数据。
Kali上有几个利用IPv6的工具(大多数集成扫描器,如nmap,现在支持IPv6),其中一些在此详细介绍。专门针对IPv6的工具主要来自THC-IPv6攻击工具包。这个工具可以通过运行以下命令来安装。
表3.3提供了一份用于侦察IPv6的工具清单。
表3.3 Kali中用于评估IPv6的工具
Metasploit也可以用于IPv6主机发现。auxiliary/scanner/discovery/ipv6_multicast_ping模块可发现所有具有物理(MAC)地址的IPv6机器,如图3.11所示。
图3.11 使用Metasploit IPv6扫描器发现网络上的IPv6设备
sudo atk6-alive6 IPv6套件可发现同一网段的实时地址,如图3.12所示。
图3.12 使用atk6-alive6发现网络中的IPv6实时设备
路由映射最初是作为一种诊断工具来使用,跟踪从一个主机到下一个主机的IP数据包来查看路由信息。
使用IP数据包中的生存时间(TTL)字段,从一个节点到下一个节点的每一跳都会触发一个来自接收路由器的ICMPTIME_EXCEEDED消息,用于将TTL字段的值递减1。
这些数据包会计算经过的跳数和记录采取的路线,从攻击者或渗透测试者的角度来看,traceroute数据会产生以下重要信息:
•攻击者和目标之间的确切路径。
•与网络的外部拓扑结构有关的提示。
•确定可能过滤攻击流量的访问控制设备(防火墙和包过滤路由器)。
•如果网络配置错误,就有可能确定内部寻址。
使用基于网络的traceroute(www.traceroute.org),有可能追踪到目标网络的各种地理源站点。这些类型的扫描经常会发现不止一个不同的到达目标的网络连接,这是在靠近目标的地方只执行单一的traceroute命令可能会漏掉的信息。基于网络的traceroute也可以识别连接两个或多个网络的多宿主主机。这些主机是攻击者的重要目标,因为它们极大地增加了通往目标的攻击面。
在Kali中,traceroute是一个命令行程序,使用ICMP数据包来映射路由;在Windows中,该命令是tracert。
如果你从Kali启动traceroute,你可能会看到大多数跳数被过滤(数据显示为* * *)。例如,从作者现在的位置执行traceroute到www.packtpub.com,将产生图3.13所示的输出。
图3.13 在Kali上运行traceroute www.packtpub.com的结果
然而,如果使用Windows命令行中的tracert运行相同的请求,将看到图3.14所示的输出。
我们不仅得到了完整的路径,还可以看到www.google.com正解析到一个稍有不同的IP地址,表明负载均衡器正在发挥作用(你可以使用Kali的lbd脚本来确认这一点;然而,这一活动可能被目标站点记录下来)。
路径数据不同的原因是,默认情况下,traceroute使用UDP数据报,而Windows tracert工具使用ICMP回显请求(ICMP类型8)。因此,在使用Kali工具完成traceroute时,为了获得最完整的路径,并绕过数据包过滤设备,使用多种协议是很重要的。Kali提供了一套用于完成路由跟踪的工具,详见表3.4。
图3.14 使用Windows tracert工具跟踪路由到www.packtpub.com
表3.4 Kali上可用于完成路由跟踪的工具
hping3是最有用的工具之一,因为它可对数据包类型、源数据包和目标数据包进行控制。例如,如果谷歌不允许ping请求,你将数据包作为TCP SYN请求发送,就有可能ping到服务器。
在下面的例子中,测试人员试图从命令行ping目标域,没有数据返回;目标域显然阻断了基于ICMP的ping命令。然而,下一条命令调用了hping3,指示它做以下工作。
•使用设置了SYN标志的TCP向目标域发送一条类似于ping的命令(-S)。
•将数据包引向80端口;这种类型的合法请求很少被阻止(-p 80)。
•设置向目标发送三个数据包的计数(-c 3)。
要执行前面的步骤,请使用图3.15中的命令。
hping3命令成功地识别了目标的在线状态,并提供了一些基本的路由信息。
图3.15 对目标80端口运行hping3