引言
在本实验中,你将学习如何处理 Gobuster 遇到 TLS 证书错误的情况,特别是当处理自签名或无效证书时。默认情况下,Gobuster 和许多其他工具一样,会执行严格的 TLS 证书验证以确保安全通信。然而,在某些测试场景下,你可能需要绕过此验证。本实验将指导你识别此类目标,观察默认错误,然后使用 -k 标志禁用证书验证,从而允许扫描继续进行。最后,我们将讨论禁用 TLS 验证的安全影响。
使用自签名或无效 TLS 证书识别目标
在本步骤中,你将识别一个使用自签名或无效 TLS 证书的目标 URL。为了本实验的目的,我们将使用一个已知存在证书问题的公开测试站点,Gobuster 会对此发出警告。这使我们能够可靠地演示问题及其解决方案。
打开你的终端,使用 curl 尝试访问目标 URL。你应该会看到一个证书错误,表明你的系统不信任该证书。这正是 Gobuster 也会遇到问题的场景。
执行以下命令:
curl https://self-signed.badssl.com/
你应该会看到类似以下的输出,表明存在证书问题:
curl: (60) SSL certificate problem: self signed certificate
More details here: https://curl.haxx.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about such a situation and
how to fix it, please consult the relevant articles in the links above.
此输出确认目标 https://self-signed.badssl.com/ 提供的证书默认不被信任,这正是本实验所需要的。
尝试扫描并观察证书错误
在本步骤中,你将尝试在不禁用 TLS 证书验证的情况下针对已识别的目标运行 Gobuster。不出所料,Gobuster 将会遇到自签名证书并以错误终止,这与 curl 显示的类似。这演示了 Gobuster 强制执行严格证书验证的默认行为。
执行以下 Gobuster 命令:
gobuster dir -u https://self-signed.badssl.com/ -w /usr/share/wordlists/dirb/common.txt -q
dir: 指定我们正在执行目录/文件暴力破解扫描。-u https://self-signed.badssl.com/: 设置目标 URL。-w /usr/share/wordlists/dirb/common.txt: 指定用于暴力破解的单词列表。-q: 抑制横幅和其他非必要输出,使错误更清晰。
你应该会看到类似以下的输出,表明存在 TLS 握手错误:
[!] GoBuster is unable to connect to the target: Get "https://self-signed.badssl.com/": x509: certificate signed by unknown authority
此错误消息确认 Gobuster 由于不受信任的证书未能建立连接,从而阻止了扫描的进行。
使用 -k 标志重新运行扫描
在本步骤中,你将重新运行 Gobuster 扫描,但这次会包含 -k 标志。-k 标志(--no-tls-validation 的缩写)指示 Gobuster 跳过 TLS 证书验证。这在受控环境或测试具有自签名证书的目标时非常有用,在这些情况下,尽管有证书警告,你仍然明确信任目标。
执行以下 Gobuster 命令,添加 -k 标志:
gobuster dir -u https://self-signed.badssl.com/ -w /usr/share/wordlists/dirb/common.txt -k -q
-k: 这是禁用 TLS 证书验证的关键标志。
这次,Gobuster 不应立即因证书错误而终止。相反,它将开始目录暴力破解过程。如果单词列表很大且未快速找到目录,你可能不会立即看到输出,但没有出现之前的错误表明操作成功。
观察扫描现在可以继续进行
在本步骤中,你将确认 Gobuster 扫描现在正在积极运行并处理单词列表,这得益于 -k 标志。由于使用了 -q 标志来抑制大部分输出,除非找到目录,否则你可能看不到太多活动。为了使进度更加可见,我们将移除 -q 标志,让 Gobuster 运行一小段时间。
再次执行以下命令,但这次不带 -q 标志,以便你能看到进度:
gobuster dir -u https://self-signed.badssl.com/ -w /usr/share/wordlists/dirb/common.txt -k
你现在应该能看到 Gobuster 的正常输出,表明它正在积极扫描目标。输出将显示进度以及发现的任何目录或文件。例如:
===============================================================
Gobuster vX.X.X -- by OJ <@_odejim> & @Neohapsis
===============================================================
[+] Url: https://self-signed.badssl.com/
[+] Threads: 10
[+] Wordlist: /usr/share/wordlists/dirb/common.txt
[+] Status codes: 200,204,301,302,307,401,403,405
[+] User Agent: gobuster/X.X.X
[+] Timeout: 10s
[+] Allow redirects: false
[+] Follow new location: false
[+] No TLS validation: true
===============================================================
2023/10/27 10:30:00 Starting gobuster in directory enumeration mode
/admin (Status: 301)
/login (Status: 301)
...
一旦你确认扫描正在运行,就可以按 Ctrl+C 停止扫描。关键在于扫描已成功启动,没有出现之前的证书错误。
理解禁用验证的安全影响
在最后一步中,我们将讨论禁用 TLS 证书验证的安全影响。虽然 -k 标志在特定的测试场景中很有用,但了解为什么应该谨慎使用它,并且仅在必要时使用它至关重要。
当你禁用 TLS 证书验证时,你实际上是在告诉 Gobuster(或任何其他工具)信任服务器提供的任何证书,无论它是否有效、已过期、自签名或由不受信任的机构颁发。这会带来几种安全风险:
- 中间人攻击 (Man-in-the-Middle, MitM Attacks): 攻击者可以拦截你与合法服务器的连接,并提供他们伪造的证书。如果禁用了验证,你的工具将不知情地连接到攻击者的服务器,使他们能够窃听或操纵你的流量。
- 身份冒充: 你可能会意外连接到一个冒充你目标目标的恶意服务器。没有证书验证,就没有加密保证你正在与真正的服务器通信。
- 数据完整性和机密性受损: 如果攻击者能够成功执行中间人攻击,他们可能会读取、修改或注入你的通信数据,从而损害机密性和完整性。
何时可以使用 -k?
- 受控测试环境: 当你在实验环境中测试应用程序或服务器时,你明确控制服务器,并且了解其自签名或无效证书。
- 内部网络: 对于在受信任网络内通信的内部工具,你在其中完全控制所有端点并了解风险。
- 调试: 暂时用于调试目的,但在生产或敏感操作中始终重新启用验证。
最佳实践: 始终优先考虑强大的 TLS 证书验证。仅在绝对必要时禁用它,并充分了解相关的风险。对于生产系统,请确保始终使用有效、受信任的证书。
至此,关于在 Gobuster 中禁用 TLS 证书验证的实验结束了。你已经学会了如何识别存在证书问题的目标,观察 Gobuster 的默认行为,然后使用 -k 标志绕过验证,同时也了解了关键的安全影响。
总结
在本实验中,你成功学会了如何在 Gobuster 中管理 TLS 证书验证。你首先使用 curl 识别了一个带有自签名证书的目标,这展示了典型的证书错误。然后,你观察到 Gobuster 默认情况下由于严格的 TLS 验证而无法扫描此类目标。实验的核心是使用 -k 标志配合 Gobuster 来绕过证书验证,从而使扫描得以继续。最后,你了解了禁用 TLS 验证的重要安全影响,并强调了仅在受控或特定测试场景中谨慎使用它的必要性。这些知识对于有效和安全地使用 Web 扫描工具至关重要。
