简介
在本实验中,你将学习攻击者如何攻破薄弱的 Web 身份验证系统。你将分析标准的 HTTP POST 登录请求,并配置 Hydra 暴力破解工具,针对 Web 门户的登录表单执行自动化字典攻击,以恢复有效的凭据。
暴力破解攻击涉及系统性地提交大量密码或口令,以期最终猜出正确的凭据。在针对 Web 应用程序时,攻击者通常会关注使用 HTTP POST 方法传输用户凭据的登录表单。了解这些攻击的工作原理对于保护 Web 应用程序以及实施适当的速率限制和账户锁定机制至关重要。
这从根本上是一个身份验证经济学问题。如果应用程序允许攻击者以极低的成本进行大量猜测,那么薄弱或重复使用的凭据就很容易被破解。
分析登录请求参数
在此步骤中,你将分析目标 Web 应用程序,以了解它如何处理登录请求。在发起暴力破解攻击之前,你必须确定目标 URL、所使用的 HTTP 方法、输入字段的名称以及登录失败时返回的消息。
这一侦察步骤非常重要,因为像 Hydra 这样的工具,其效果取决于你提供的请求模板。如果你对表单的理解有误,攻击逻辑从一开始就是错误的。
我们已为你启动了一个运行在 8080 端口的本地 Web 服务器。首先,让我们查看登录页面的 HTML 源代码以识别表单参数。你可以使用 curl 命令获取网页内容。
curl -s http://127.0.0.1:8080/
输出将显示一个简单的 HTML 表单。注意 action="/login" 属性,它告诉我们表单数据被发送到哪里。method="POST" 属性表明数据是使用 HTTP POST 请求发送的。最后,观察输入字段的 name 属性:username 和 password。
接下来,你需要模拟一次失败的登录尝试,看看服务器如何响应。这是一个关键步骤,因为暴力破解工具需要知道“失败”是什么样子的,这样当失败消息消失时,它们才能识别出“成功”。
使用 curl 发送带有虚假凭据的 POST 请求。-X POST 标志指定了 HTTP 方法,-d 标志允许你发送表单数据。
curl -X POST -d "username=testuser&password=wrongpass" http://127.0.0.1:8080/login
你应该会看到以下输出:
Invalid credentials. Please try again.
这个特定的字符串 Invalid credentials 就是失败消息。稍后你将使用这个确切的短语来配置暴力破解工具。
选择目标字典
在此步骤中,你将准备用于暴力破解攻击的字典(词表)。字典攻击依赖于预定义的潜在用户名和密码列表。
字典攻击比盲目的穷举搜索更快,因为它们利用了人类的可预测性。人们在选择密码时并不是完全随机的。
攻击者不会尝试所有可能的字符组合,而是使用包含常见用户名(如 admin、root、user)和常用密码(如 123456、password、qwerty)的字典。
你将在当前工作目录(~/project)中创建两个简单的文本文件。第一个文件将包含潜在用户名的列表。使用 echo 命令将名称写入名为 users.txt 的文件中。
echo "root" > users.txt
echo "admin" >> users.txt
echo "test" >> users.txt
> 操作符用于创建文件并写入第一行,而 >> 操作符用于将后续行追加到现有文件中。
接下来,创建一个名为 passwords.txt 的文件,其中包含潜在密码列表。
echo "password123" > passwords.txt
echo "admin123" >> passwords.txt
echo "secret123" >> passwords.txt
echo "123456" >> passwords.txt
你可以使用 cat 命令验证新创建的字典内容。
cat users.txt
cat passwords.txt
在现实场景中,渗透测试人员会使用庞大的、公开可用的字典,例如 rockyou.txt,其中包含数百万个被泄露的密码。对于本教学实验,这些小型自定义字典已经足够了。
为 HTTP POST 表单配置 Hydra
在此步骤中,你将学习如何为 Hydra 构建命令,这是一个功能强大的网络登录破解工具。Hydra 支持多种协议,包括 HTTP、FTP、SSH 等。
要攻击 Web 登录表单,Hydra 使用一个名为 http-post-form 的特定模块。该模块需要一个格式严谨的字符串,以便了解如何与目标 Web 应用程序交互。
http-post-form 模块的语法如下:"<path>:<form parameters>:<failure string>"
让我们拆解一下如何将其应用于你在步骤 1 中收集的信息。首先是路径(path),即表单提交的 URL;在我们的例子中,它是 /login。接下来是表单参数(form parameters),代表 POST 请求中发送的数据。你发现字段是 username 和 password。Hydra 使用特殊的占位符 ^USER^ 和 ^PASS^ 来注入来自字典的单词,因此参数字符串变为 username=^USER^&password=^PASS^。最后,失败字符串(failure string)是登录失败时页面上出现的文本,你已将其识别为 Invalid credentials。
将这三部分用冒号连接起来,模块配置字符串就变成了:"/login:username=^USER^&password=^PASS^:Invalid credentials"
在执行实际攻击之前,你可以浏览 Hydra 内置的 http-post-form 模块帮助文档,以更好地了解其功能。运行以下命令查看模块特定的帮助:
hydra -U http-post-form
该命令会输出有关如何格式化模块字符串的详细说明和示例,当你将来遇到更复杂的登录表单时,这是一个极好的参考。
执行暴力破解攻击
在此步骤中,你将结合所学知识,针对本地 Web 服务器执行自动化字典攻击。
你将使用带有多个标志的 hydra 命令:
-L users.txt:指定包含用户名列表的文件。-P passwords.txt:指定包含密码列表的文件。-s 8080:指定目标端口。127.0.0.1:目标服务器的 IP 地址。http-post-form:要使用的协议模块。"/login:username=^USER^&password=^PASS^:Invalid credentials":你在上一步中构建的模块配置字符串。
在终端中执行以下命令以启动暴力破解攻击:
hydra -L users.txt -P passwords.txt -s 8080 127.0.0.1 http-post-form "/login:username=^USER^&password=^PASS^:Invalid credentials"
Hydra 将开始测试字典中用户名和密码的所有组合。由于字典很小且服务器是本地的,攻击将很快完成。
你应该会看到类似以下的输出:
Hydra v9.2 (c) 2021 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2026-10-25 10:00:00
[DATA] max 12 tasks per 1 server, overall 12 tasks, 12 login tries (l:3/p:4), ~1 tries per task
[DATA] attacking http-post-form://127.0.0.1:8080/login:username=^USER^&password=^PASS^:Invalid credentials
[8080][http-post-form] host: 127.0.0.1 login: admin password: secret123
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2026-10-25 10:00:01
注意以绿色高亮显示(或明确指出成功)的那一行:[8080][http-post-form] host: 127.0.0.1 login: admin password: secret123。Hydra 成功识别出用户名 admin 和密码 secret123 的组合没有返回“Invalid credentials”字符串,这意味着登录成功。
总结
在本实验中,你成功学习了如何分析和攻击薄弱的 Web 身份验证系统。你首先检查了 HTTP POST 登录表单,以确定目标路径、输入参数和失败消息。然后,你为字典攻击创建了自定义词表。最后,你配置并执行了 Hydra 暴力破解工具,实现了登录尝试的自动化,并成功恢复了有效凭据。
了解这些技术凸显了实施强力安全措施(如账户锁定、验证码和多因素身份验证 (MFA))的重要性,以保护 Web 应用程序免受自动化暴力破解攻击。


