简介
在本实验中,你将学习如何保存 Hydra 攻击结果。Hydra 是一款强大的密码破解工具,将用于测试模拟 HTTP 登录表单的安全性。你将首先对目标 Web 服务器运行基本的 HTTP 攻击,利用用户名和密码列表。
本实验将指导你使用 -o
选项保存攻击结果,并使用 -b
选项将其输出为 JSON 格式。最后,你将比较文本和 JSON 输出,了解 Hydra 以不同方式呈现其发现结果的方式。
在本实验中,你将学习如何保存 Hydra 攻击结果。Hydra 是一款强大的密码破解工具,将用于测试模拟 HTTP 登录表单的安全性。你将首先对目标 Web 服务器运行基本的 HTTP 攻击,利用用户名和密码列表。
本实验将指导你使用 -o
选项保存攻击结果,并使用 -b
选项将其输出为 JSON 格式。最后,你将比较文本和 JSON 输出,了解 Hydra 以不同方式呈现其发现结果的方式。
本步骤中,你将设置一个模拟的 HTTP 登录服务,并创建 Hydra 所需的用户名和密码列表。这将提供一个受控的环境,用于练习保存 Hydra 的输出。
首先,导航到你的项目目录:
cd ~/project
接下来,你将创建一个简单的 Python 脚本,模拟 HTTP 登录服务。该脚本将在端口 80 上监听,并响应发送到 /login.php
的 POST 请求。它将把 admin
视为正确的用户名,password
视为正确的密码。
使用 nano
创建 login.py
文件:
nano login.py
将以下 Python 代码粘贴到 nano
编辑器中:
from http.server import BaseHTTPRequestHandler, HTTPServer
import urllib.parse
import os
class LoginHandler(BaseHTTPRequestHandler):
def do_POST(self):
if self.path == '/login.php':
content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length).decode('utf-8')
parsed_data = urllib.parse.parse_qs(post_data)
username = parsed_data.get('username', [''])[0]
password = parsed_data.get('password', [''])[0]
if username == 'admin' and password == 'password':
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write(b"Login successful!")
else:
self.send_response(401)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write(b"Invalid username or password")
else:
self.send_response(404)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write(b"Not found")
def run(server_class=HTTPServer, handler_class=LoginHandler, port=80):
server_address = ('', port)
httpd = server_class(server_address, handler_class)
print(f"Starting httpd server on port {port}")
httpd.serve_forever()
if __name__ == "__main__":
run()
按 Ctrl+X
,然后 Y
,再按 Enter
保存文件。
现在,在后台运行 Python HTTP 服务器。这将模拟 Hydra 的目标服务。
nohup python3 login.py > /dev/null 2>&1 &
nohup
命令允许进程即使你关闭终端后也能继续运行,> /dev/null 2>&1 &
将所有输出重定向到 /dev/null
并将进程置于后台运行。
接下来,你将创建 Hydra 攻击将使用的用户名和密码列表。
在 ~/project
目录中创建一个名为 users.txt
的文件:
nano users.txt
将以下用户名添加到文件中:
admin
user
test
按 Ctrl+X
,然后 Y
,再按 Enter
保存文件。
最后,在 ~/project
目录中创建一个名为 passwords.txt
的文件:
nano passwords.txt
将以下密码添加到文件中:
password
123456
test
按 Ctrl+X
,然后 Y
,再按 Enter
保存文件。
你已成功设置了目标 HTTP 服务并准备好了用户名和密码列表。
本步骤中,你将使用 Hydra 对你设置的模拟登录服务执行基本的 HTTP 攻击。这将演示 Hydra 如何尝试破解凭据,而无需将输出保存到文件。
Hydra 是一款强大的密码破解工具,可用于测试各种服务的安全性,包括 HTTP。在本场景中,你将针对简单的 HTTP 登录表单。
你将使用 Hydra 的 http-post-form
模块,该模块旨在攻击使用 HTTP POST 方法提交的 Web 表单。目标服务运行在 127.0.0.1
的 80
端口上,登录表单位于 /login.php
。
在你的终端中执行以下 Hydra 命令:
hydra -L ~/project/users.txt -P ~/project/passwords.txt 127.0.0.1 http-post-form "/login.php:username=^USER^&password=^PASS^:Invalid username or password"
让我们分解这个命令:
hydra
: 调用 Hydra 工具的命令。-L ~/project/users.txt
: 指定用户名列表文件的路径。Hydra 将迭代此文件中的每个用户名。-P ~/project/passwords.txt
: 指定密码列表文件的路径。Hydra 将尝试此文件中的每个密码,针对每个用户名。127.0.0.1
: 模拟 HTTP 服务器的目标 IP 地址。http-post-form
: Hydra 用于攻击 HTTP POST 表单的模块。"/login.php:username=^USER^&password=^PASS^:Invalid username or password"
: 这部分至关重要,它定义了 Hydra 如何与表单交互:
/login.php
: 目标服务器上登录页面的路径。username=^USER^&password=^PASS^
: 定义在 POST 请求中发送的参数。^USER^
和 ^PASS^
是 Hydra 用你用户名和密码列表中的值替换的占位符。Invalid username or password
: Hydra 在服务器响应中查找的错误消息,以确定登录尝试是否失败。如果 未 找到此字符串,Hydra 将认为登录尝试成功。运行命令后,Hydra 将直接在你的终端中显示其进度和任何成功的登录尝试。
示例输出(如果成功):
Hydra vX.X (c) XXXX by van Hauser/THC - Use freely but only for legal purposes.
Hydra is starting...
[DATA] X task, X servers, X login tries (l:X/p:X), ~X try per server
[DATA] attacking service http-post-form on port 80
[ATTACK] attacking 127.0.0.1:80/login.php
[80][http-post-form] host: 127.0.0.1 login: admin password: password
此输出表明 Hydra 成功找到了 admin
用户名和 password
密码组合。如果未找到成功的登录,Hydra 将完成,而不会显示任何成功的登录凭据。
本步骤中,你将学习如何使用 -o
选项将 Hydra 攻击的结果保存到文件中。这对于后续分析结果或报告用途非常有用,因为它将任何破解的凭据存储在持久性文件中。
-o
选项允许你指定一个输出文件,Hydra 将在其中存储破解的凭据。如果 Hydra 找到有效的用户名和密码组合,它将以简单易读的格式写入指定的文件。
你将继续使用相同的场景:模拟的 Web 服务器在 127.0.0.1
的 80
端口上运行,登录表单位于 /login.php
,以及你之前创建的 users.txt
和 passwords.txt
文件。
要将结果保存到 ~/project
目录中的名为 hydra.log
的文件中,请执行以下命令:
hydra -L ~/project/users.txt -P ~/project/passwords.txt -o ~/project/hydra.log 127.0.0.1 http-post-form "/login.php:username=^USER^&password=^PASS^:Invalid username or password"
与之前的命令唯一的区别是添加了 -o ~/project/hydra.log
选项。这告诉 Hydra 将结果保存到 hydra.log
文件中,而不是仅在终端中显示它们。
运行命令后,Hydra 将尝试使用每个用户名和密码组合进行登录。如果找到成功的登录,用户名和密码将写入 hydra.log
文件。
要查看 hydra.log
文件的内容,请使用 cat
命令:
cat ~/project/hydra.log
示例输出(如果成功):
如果 Hydra 找到 admin:password
组合,hydra.log
文件将包含类似于此的行:
127.0.0.1 http-post-form: admin:password
如果未找到成功的登录,hydra.log
文件将为空。
需要注意的是,-o
选项将覆盖已存在的输出文件。如果要将结果追加到现有文件中,则应使用 -O
(大写 O)选项。但是,对于本实验,-o
选项就足够了。
本步骤中,你将探索如何使用 -b
选项以 JSON 格式输出 Hydra 攻击的结果。JSON (JavaScript 对象表示法) 是一种轻量级的数据交换格式,易于人类阅读和编写,也易于机器解析和生成。这种格式在需要以编程方式处理结果时特别有用,例如,将 Hydra 的输出集成到其他工具或脚本中。
-b
选项与 -o
选项结合使用,指示 Hydra 将输出保存到指定格式的文件中。-b
选项需要一个格式参数:text
(默认)、json
或 jsonv1
。
你将继续使用相同的场景:模拟的 Web 服务器在 127.0.0.1
的 80
端口上运行,登录表单位于 /login.php
,以及 users.txt
和 passwords.txt
文件。
要将结果以 JSON 格式保存到 ~/project
目录中的名为 hydra.json
的文件中,请执行以下命令:
hydra -L ~/project/users.txt -P ~/project/passwords.txt -o ~/project/hydra.json -b json 127.0.0.1 http-post-form "/login.php:username=^USER^&password=^PASS^:Invalid username or password"
在这个命令中,你添加了 -b json
选项以及 -o ~/project/hydra.json
选项。这指示 Hydra 将输出以 JSON 格式保存到 hydra.json
文件中。
运行命令后,Hydra 将尝试使用每个用户名和密码组合进行登录。如果找到成功的登录,用户名和密码将以 JSON 格式写入 hydra.json
文件。
要查看 hydra.json
文件的内容,请使用 cat
命令:
cat ~/project/hydra.json
示例输出(如果成功):
如果 Hydra 找到 admin:password
组合,hydra.json
文件将包含类似于此的 JSON 对象:
{
"generator": {
"software": "Hydra",
"version": "v9.2",
"built": "2025-05-30 08:10:07",
"server": "127.0.0.1",
"service": "http-post-form",
"jsonoutputversion": "1.00",
"commandline": "hydra -L users.txt -P passwords.txt -o hydra.json -b json 127.0.0.1 http-post-form /login.php:username=^USER^&password=^PASS^:Invalid username or password"
},
"results": [
{
"port": 80,
"service": "http-post-form",
"host": "127.0.0.1",
"login": "admin",
"password": "password"
}
],
"success": true,
"errormessages": [],
"quantityfound": 1
}
如果未找到成功的登录,hydra.json
文件将包含一个空的 JSON 数组:
[]
这种 JSON 格式允许你使用像 Python 或 JavaScript 这样的脚本语言轻松解析结果,以便进行进一步分析或自动化。
在本实验中,你学习了如何使用 Hydra(一个强大的密码破解工具)执行基本的 HTTP 攻击。你搭建了一个模拟的 HTTP 登录服务,并创建了用户名和密码列表。然后,你使用 Hydra 尝试破解 127.0.0.1
上的模拟 HTTP 登录表单。
你探索了如何使用 -o
选项将 Hydra 的输出保存到文件中,创建了一个易于阅读的 hydra.log
文件。此外,你学习了如何使用 -b
选项以 JSON 格式输出结果,生成一个机器可读的 hydra.json
文件。本实验展示了 Hydra 在呈现其发现结果方面的灵活性,允许快速查看和以编程方式处理攻击结果。