1. 介绍

欢迎来到网络安全模块的第一个房间。本模块涵盖:

在本房间中,我们将先定义被动侦察和主动侦察,随后重点讲解与被动侦察相关的核心工具。我们将学习三个命令行工具:

  • whois:查询 WHOIS 服务器
  • nslookup:查询 DNS 服务器
  • dig:查询 DNS 服务器

我们使用 whois 查询 WHOIS 记录,使用 nslookup 和 dig 查询 DNS 数据库记录。这些记录都属于公开信息,因此不会触发目标警报。

我们还将学习两个在线服务的使用:

  • DNSDumpster
  • Shodan.io

这两个在线服务让我们能够在不直接连接目标的情况下收集其相关信息。

前置条件:本房间要求具备基础网络知识以及对命令行的基本熟悉。如有需要,可参考“网络基础”和“Linux 基础”模块获取相关知识。

重要提示:请注意,如果您尚未订阅,AttackBox 将无法访问互联网,因此您需要使用 VPN 来完成需要互联网连接的练习题目。


本房间不通过目标虚拟机(VM)来演示所讨论的主题;相反,我们将查询由 TryHackMe 拥有的域名的公开 WHOIS 服务器和 DNS 服务器。请启动 AttackBox 并确保其已就绪。稍后任务——尤其是任务 3 和 4——将使用 AttackBox 回答问题。

2. 被动侦察与主动侦察

本房间假设用户已具备计算机网络的基本知识。若您希望复习该主题,建议先学习“网络基础”模块。

在计算机系统与网络出现之前,《孙子兵法》就告诫我们:“知己知彼,百战不殆。”如果您扮演攻击者角色,需要收集目标系统的信息;若您扮演防御者角色,则需了解对手能够发现您的系统与网络的哪些信息。

侦察(recon)可定义为对目标进行初步调查以收集信息。它是“统一杀伤链”中在系统上获取初始立足点的第一步。我们将侦察分为:

  • 被动侦察
  • 主动侦察

在被动侦察中,您依赖公开可得的知识。这些信息来自公开资源,无需直接与目标交互。可将其类比为在远处观察目标领地,而无需踏足其中。
在这里插入图片描述
被动侦察活动包括多种方式,例如:

  • 从公共 DNS 服务器查询域名的 DNS 记录
  • 查看与目标网站相关的招聘广告
  • 阅读关于目标公司的新闻报道

而主动侦察则无法如此隐蔽地进行,它需要直接与目标交互。可将其类比为检查门窗的锁以及其他潜在入口。
在这里插入图片描述
主动侦察活动示例包括:

  • 连接公司服务器(如 HTTP、FTP、SMTP)。
  • 致电公司,试图获取信息(社会工程学)。
  • 冒充维修人员进入公司场所。

鉴于主动侦察的侵入性,除非获得适当的法律授权,否则很容易引发法律问题。


问答环节

  1. 你访问目标公司的 Facebook 页面,希望获取一些员工姓名。这属于哪种侦察活动?(A 表示主动,P 表示被动)P
  2. 你向公司 Web 服务器的 IP 地址发送 ping 命令,以检查 ICMP 流量是否被屏蔽。这属于哪种侦察活动?(A 表示主动,P 表示被动)A
  3. 你在一次聚会上偶遇目标公司的 IT 管理员,并尝试通过社会工程学获取更多关于其系统和网络基础设施的信息。这属于哪种侦察活动?(A 表示主动,P 表示被动)A

3. Whois

WHOIS 是一种遵循 RFC 3912 规范的请求与响应协议。WHOIS 服务器监听 TCP 43 端口以接收传入请求。域名注册商负责维护其出租域名的 WHOIS 记录。WHOIS 服务器会返回与所请求域名相关的各种信息,其中我们特别关注:

  • 注册商:该域名是通过哪家注册商注册的?
  • 注册人联系信息:姓名、组织、地址、电话等(除非通过隐私服务隐藏)。
  • 创建、更新及到期日期:该域名首次注册时间?最后更新时间?何时需要续费?
  • 名称服务器:应向哪台服务器查询以解析该域名?

要获取这些信息,需使用 whois 客户端或在线服务。许多在线服务都提供 whois 信息,但通常使用本地 whois 客户端更快、更方便。在 AttackBox(或本地 Linux 系统,如 Parrot 或 Kali)上,你可在终端直接调用 whois 客户端。其语法为:

whois DOMAIN_NAME

其中 DOMAIN_NAME 是你想获取信息的域名。下例演示了执行 whois tryhackme.com 的情形。

           
user@TryHackMe$ whois tryhackme.com
[Querying whois.verisign-grs.com]
[Redirected to whois.namecheap.com]
[Querying whois.namecheap.com]
[whois.namecheap.com]
Domain name: tryhackme.com
Registry Domain ID: 2282723194_DOMAIN_COM-VRSN
Registrar WHOIS Server: whois.namecheap.com
Registrar URL: http://www.namecheap.com
Updated Date: 2021-05-01T19:43:23.31Z
Creation Date: 2018-07-05T19:46:15.00Z
Registrar Registration Expiration Date: 2027-07-05T19:46:15.00Z
Registrar: NAMECHEAP INC
Registrar IANA ID: 1068
Registrar Abuse Contact Email: abuse@namecheap.com
Registrar Abuse Contact Phone: +1.6613102107
Reseller: NAMECHEAP INC
Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
Registry Registrant ID: 
Registrant Name: Withheld for Privacy Purposes
Registrant Organization: Privacy service provided by Withheld for Privacy ehf
[...]
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
>>> Last update of WHOIS database: 2021-08-25T14:58:29.57Z <<<
For more information on Whois status codes, please visit https://icann.org/epp

我们可以看到大量信息,按显示顺序逐一查看。首先注意到查询被重定向到 whois.namecheap.com;此时,namecheap.com 正在维护该域名的 WHOIS 记录。此外,还能看到创建日期、最后更新日期和到期日期。

接下来,我们获取注册商和注册人信息。除非使用了隐私服务,否则可看到注册人姓名及联系方式。虽然上方未显示,但我们还能获得该域名的管理员和技术联系人。最后,列出了需查询的域名服务器,以便查找 DNS 记录。

收集到的信息可用于发现新的攻击面,例如社会工程学或技术性攻击。例如,根据渗透测试的范围,你可能会考虑针对管理员用户的邮件服务器或 DNS 服务器发起攻击(假设它们归客户所有且属于测试范围)。

需要注意的是,由于自动化工具滥用 WHOIS 查询来收集电子邮件地址,许多 WHOIS 服务已采取防护措施,例如隐藏电子邮件地址。此外,许多注册人订阅隐私服务,以防止垃圾邮件收集者获取其信息并保持隐私。

在 AttackBox 上打开终端,运行命令 whois tryhackme.com,获取回答以下问题所需的信息。


问答环节

  1. TryHackMe.com这个域名什么时候注册的?20180705
  2. TryHackMe.com域名的注册商是谁? NameCheap.com
  3. TryHackMe.com 使用的名称服务器是由谁提供的? cloudflare.com

4. nslookup 和 dig

在上一任务中,我们使用 WHOIS 协议获取了所查询域名的各种信息,特别是从注册商处获得了 DNS 服务器。

使用 nslookup(Name Server Look Up)查找域名的 IP 地址。只需执行命令 nslookup DOMAIN_NAME,例如 nslookup tryhackme.com。更通用的格式是 nslookup OPTIONS DOMAIN_NAME SERVER。这三个主要参数的含义如下:

  • OPTIONS:查询类型,如下表所示。例如,用 A 查 IPv4 地址,用 AAAA 查 IPv6 地址。
  • DOMAIN_NAME:要查询的域名。
  • SERVER:要查询的 DNS 服务器。可选用任何本地或公共 DNS 服务器。Cloudflare 提供 1.1.1.11.0.0.1,Google 提供 8.8.8.88.8.4.4,Quad9 提供 9.9.9.9149.112.112.112。若想替代 ISP 的 DNS 服务器,还有更多公共 DNS 服务器可选。
查询类型 结果
A IPv4 地址
AAAA IPv6 地址
CNAME 规范名称
MX 邮件服务器
SOA 授权起始记录
TXT TXT 记录

例如,可使用命令 nslookup -type=A tryhackme.com 1.1.1.1(或大小写不敏感的 nslookup -type=a tryhackme.com 1.1.1.1)来返回 tryhackme.com 使用的所有 IPv4 地址。

user@TryHackMe$ nslookup -type=A tryhackme.com 1.1.1.1
Server:		1.1.1.1
Address:	1.1.1.1#53

Non-authoritative answer:
Name:	tryhackme.com
Address: 172.67.69.208
Name:	tryhackme.com
Address: 104.26.11.229
Name:	tryhackme.com
Address: 104.26.10.229

A 记录和 AAAA 记录分别用于返回 IPv4 和 IPv6 地址。从渗透测试的角度来看,这种查询非常有用。在上面的示例中,我们从一个域名出发,获得了三个 IPv4 地址。假设这些 IP 地址在渗透测试范围内,则可以进一步检查它们是否存在漏洞。

如果你想了解某个域名的邮件服务器及其配置,可以执行命令 nslookup -type=MX tryhackme.com 进行查询。示例如下:

           
user@TryHackMe$ nslookup -type=MX tryhackme.com
Server:		127.0.0.53
Address:	127.0.0.53#53

Non-authoritative answer:
tryhackme.com	mail exchanger = 5 alt1.aspmx.l.google.com.
tryhackme.com	mail exchanger = 1 aspmx.l.google.com.
tryhackme.com	mail exchanger = 10 alt4.aspmx.l.google.com.
tryhackme.com	mail exchanger = 10 alt3.aspmx.l.google.com.
tryhackme.com	mail exchanger = 5 alt2.aspmx.l.google.com.

我们可以看到,tryhackme.com 当前的邮件配置使用 Google。由于 MX 记录查询的是邮件交换服务器,因此当某个邮件服务器尝试投递发送至 @tryhackme.com 的邮件时,它会先尝试连接优先级为 1 的 aspmx.l.google.com;若该服务器忙碌或不可用,邮件服务器将依次尝试连接 alt1.aspmx.l.google.com 或 alt2.aspmx.l.google.com。

这些邮件服务器均由 Google 提供,因此我们不应预期它们运行着易受攻击的版本。然而,在其他情况下,我们可能会发现安全配置不当或未打补丁的邮件服务器。

这类信息在继续对目标进行被动侦察时可能非常有价值。你可以对其他域名重复类似查询,并尝试不同类型(如 -type=txt)。谁知道一路上你还能发现什么!

如需进行更高级的 DNS 查询或使用额外功能,可使用 dig(“Domain Information Groper”的缩写)。让我们用 dig 查询 MX 记录,并与 nslookup 的结果进行比较。可直接使用 dig DOMAIN_NAME,但通过 dig DOMAIN_NAME TYPE 可指定记录类型。若要选择查询的 DNS 服务器,则使用 dig @SERVER DOMAIN_NAME TYPE

  • SERVER:要查询的 DNS 服务器。
  • DOMAIN_NAME:要查询的域名。
  • TYPE:DNS 记录类型,如前文表格所示。
user@TryHackMe$ dig tryhackme.com MX

; <<>> DiG 9.16.19-RH <<>> tryhackme.com MX
;; global options: +cmd
;; Got answer:
;; ->>HEADER<

快速对比 nslookup 和 dig 的输出可见,dig 默认返回了更多信息,例如 TTL(生存时间)。若想向 1.1.1.1 这台 DNS 服务器查询,可执行:

dig @1.1.1.1 tryhackme.com MX

在 AttackBox 上打开终端,使用 nslookup 或 dig 命令获取回答下列问题所需的信息。


问答环节

  1. 查看 thmlabs.com 的 TXT 记录,其中的 flag 是什么? THM{a5b83929888ed36acb0272971e438d78}

5. DNS转储程序

诸如 nslookup 和 dig 这类 DNS 查询工具无法自行发现子域名。被检查的域名可能包含其他子域名,而这些子域名往往能揭示大量关于目标的信息。例如,若 tryhackme.com 存在子域名 wiki.tryhackme.com 和 webmail.tryhackme.com,你就需要进一步了解它们,因为它们可能蕴含目标的宝贵信息。其中某个子域名可能已被搭建却长期未更新,缺乏定期维护通常会导致服务出现漏洞。那么,我们如何才能知道这些子域名的存在呢?

可以考虑使用多个搜索引擎来汇总公开已知的子域名列表。仅使用一个搜索引擎远远不够;此外,我们往往需要浏览至少数十条结果才能发现有价值的数据。毕竟,你寻找的是那些未被明确公开的子域名,它们未必会出现在搜索结果的首页。另一种发现子域名的方法是依靠暴力枚举查询,找出拥有 DNS 记录的子域名。

为避免如此耗时的搜索,可以使用提供详尽 DNS 查询结果的在线服务,如 DNSDumpster。如果在 DNSDumpster 上搜索 tryhackme.com,就能发现子域名 blog.tryhackme.com,而普通 DNS 查询无法提供这一信息。此外,DNSDumpster 会以易读的表格和图形返回收集到的 DNS 信息,并提供所有监听服务器的收集信息。

我们将在 DNSDumpster 上搜索 tryhackme.com,让你预览预期输出。在结果中,我们得到了该域名的一系列 DNS 服务器;DNSDumpster 还将域名解析为 IP 地址,甚至尝试对其进行地理定位。我们还能看到 MX 记录,DNSDumpster 将五个邮件交换服务器全部解析为对应的 IP 地址,并提供了更多关于所有者和位置的信息。最后,还能看到 TXT 记录。实际上,仅需一次查询即可获取所有这些信息。

在这里插入图片描述
DNSDumpster 还会将收集到的信息以图形方式呈现。它将之前表格中的数据绘制成图,你可以看到 DNS 和 MX 分别分支到各自的服务器,并同时显示出对应的 IP 地址。

在这里插入图片描述

目前还有一个测试版功能,允许你将该图表导出。如有需要,你还可以拖动各模块,对图表进行调整。
在这里插入图片描述
使用 AttackBox 上的浏览器,或你自己的系统,来回答下面的问题。


问答环节

  1. 在 DNSDumpster 上查询 tryhackme.com,除了 www 和 blog 之外,你还会发现一个有趣的子域名是什么?remote

6. Shodan.io

当你接到针对特定目标进行渗透测试的任务时,在被动侦察阶段,像 Shodan.io 这样的服务非常有用,可以在不主动连接的情况下了解客户网络的各种信息。此外,在防御端,你也可以使用 Shodan.io 提供的不同服务,了解属于你组织且已联网并暴露的设备。

与网页搜索引擎不同,Shodan.io 会尝试连接到所有可在线访问的设备,以构建一个连接“设备”的搜索引擎。一旦收到响应,它就会收集与该服务相关的所有信息,并保存到数据库中供人检索。以下记录了 tryhackme.com 其中一台服务器的保存信息。

在这里插入图片描述
这条记录展示的是一台 Web 服务器;然而,如前所述,Shodan.io 会收集任何它能找到的联网设备的信息。在 Shodan.io 上搜索 tryhackme.com 将会至少显示上述截图中的记录。通过这条 Shodan.io 搜索结果,我们可以了解到与搜索相关的多项信息,例如:

  • IP 地址
  • 托管公司
  • 地理位置
  • 服务器类型及版本

你也可以尝试用从 DNS 查询中获得的 IP 地址进行搜索,当然这些 IP 地址更有可能发生变化。在 Shodan.io 的帮助页面可以了解所有可用的搜索选项,建议你加入 TryHackMe 的 Shodan.io。

回答下列问题时,最好直接访问 Shodan.io;请注意,无需高级账户即可在 Shodan.io 找到答案。


问答环节

  1. 根据 Shodan.io 的数据,在全球公开可访问的 Apache 服务器数量方面,排名第一的国家是哪一个?United States
  2. 根据 Shodan.io 的数据,Apache 使用的第三常见端口是什么?8080
  3. 根据 Shodan.io 的数据,nginx 使用的第三常见端口是什么?5001

7. 总结

在本房间中,我们专注于被动侦察,具体介绍了命令行工具 whois、nslookup 和 dig,并讨论了两种公开可用的服务:DNSDumpster 和 Shodan.io。这些工具的优势在于无需直接连接目标即可收集其信息;一旦熟练掌握搜索选项并习惯阅读结果,你将能获取海量信息。

目的 命令行示例
查询 WHOIS 记录 whois tryhackme.com
查询 DNS A 记录 nslookup -type=A tryhackme.com
在指定 DNS 服务器查询 DNS MX 记录 nslookup -type=MX tryhackme.com 1.1.1.1
查询 DNS TXT 记录 nslookup -type=TXT tryhackme.com
查询 DNS A 记录 dig tryhackme.com A
在指定 DNS 服务器查询 DNS MX 记录 dig @1.1.1.1 tryhackme.com MX
查询 DNS TXT 记录 dig tryhackme.com TXT

学习更多关于DNS的知识可以访问: DNS in Detail.

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐