Hydra
Hydra 是一款在线暴力破解(Brute Force)密码工具,能够快速尝试大量用户名和密码组合,以测试各种网络服务的登录凭据。
根据 Hydra 官方仓库,它支持对许多网络协议进行密码测试,包括:
- SSH
- FTP
- HTTP/HTTPS(GET、POST、表单登录)
- Telnet
- SMB
- RDP(远程桌面)
- MySQL
- PostgreSQL
- MongoDB
- LDAP
- SMTP
- POP3
- IMAP
- SNMP(v1、v2、v3)
- VNC
- SIP
- XMPP
- Oracle
- MS SQL
- VMware
- 以及许多其他协议
因此,Hydra 的用途非常广泛,可以针对不同类型的认证服务进行安全测试。
Hydra 命令
Hydra 使用的参数取决于要攻击的服务(协议)。
FTP
如果需要对 FTP 服务进行密码测试,用户名为 user,密码字典为 passlist.txt,可以使用:
hydra -l user -P passlist.txt ftp://MACHINE_IP
SSH
对 SSH 服务进行密码测试的基本命令:
hydra -l <username> -P <full path to pass> MACHINE_IP -t 4 ssh
| 选项 | 描述 |
|---|---|
-l | 指定用于登录的(SSH)用户名 |
-P | 表示密码列表 |
-t | 设置要生成的线程数 |
Web Form
也可以使用 Hydra 对网页表单进行暴力破解。必须知道它发出的是哪种类型的请求;常用的方法是 GET 或 POST 方法。
hydra -l <username> -P <wordlist> MACHINE_IP http-post-form "<path>:<login_credentials>:<invalid_response>"
| 选项 | 描述 |
|---|---|
-l | 用于(网页表单)登录的用户名 |
-P | 要使用的密码列表 |
http-post-form | 表单类型为 POST |
<path> | 例如,登录页面网址login.php |
<login_credentials> | 例如,用于登录的用户名和密码username=^USER^&password=^PASS^ |
<invalid_response> | 登录失败时的部分响应 |
-V | 每次尝试都会输出详细信息 |
下面是一个更具体的 Hydra 命令示例,用于暴力破解 POST 登录表单:
hydra -l <username> -P <wordlist> MACHINE_IP http-post-form "/:username=^USER^&password=^PASS^:F=incorrect" -V
- 登录页面仅
/显示主 IP 地址。 username是输入用户名的表单字段。- 指定的用户名将替换
^USER^ password是输入密码的表单字段。- 提供的密码将被替换
^PASS^ - 最后,
F=incorrect这是一个在登录失败时出现在服务器响应中的字符串
另外,如果 Web 服务器监听的是非默认端口号,您可以使用以下方式显式指定端口号 -s <port>,例如:
hydra -l <username> -P <wordlist> MACHINE_IP http-post-form "/:username=^USER^&password=^PASS^:F=incorrect" -s <port> -V
实验
使用 Hydra 对 Molly 的网站密码进行暴力破解
启动 Burp 代理 获取表单参数username和password
登录失败页面出现Your username or password is incorrect. 作为登录失败的提示
hydra -l molly -P /usr/share/wordlists/rockyou.txt 10.49.170.238 http-post-form "/login:username=^USER^&password=^PASS^:Your username or password is incorrect."
结果:
Hydra 对 Molly 的 SSH 密码进行暴力破解
hydra -l molly -P /usr/share/wordlists/rockyou.txt 10.49.170.238 ssh
结果:
Gobuster
Gobuster 是一款使用 Go(Golang) 编写的开源渗透测试工具。它主要通过字典爆破(Brute Force) 的方式,配合特定的字典(Wordlist),枚举目标的各种资源,并根据服务器返回的响应判断资源是否存在。
它可以枚举网站目录,DNS子域名、虚拟主机、Amazon S3 存储桶、Google Cloud Storage 存储桶。许多安全专家使用此工具进行渗透测试、漏洞赏金猎取和网络安全评估。
本实验使用的是一个局域网环境,DNS 服务器运行在 Web 服务器上。为了能够解析本实验中使用的域名,
需要修改以下/etc/resolv-dnsmasq文件:
- 在攻击机上打开终端并输入命令:
sudo nano /etc/resolv-dnsmasq。 nameserver MACHINE_IP作为第一行插入。- 按 CTRL+O 保存文件,然后按 ENTER 键,最后按 CTRL+X 退出编辑器。
- 输入命令
/etc/init.d/dnsmasq restart重启 Dnsmasq 服务。
在本实验中,将重点学习 Gobuster 的三个命令:
- dir:枚举 Web 目录和文件
- dns:枚举 DNS 子域名
- vhost:枚举虚拟主机(Virtual Host)
| 短参数 | 长参数 | 说明 |
|---|---|---|
-t | --threads | 设置扫描线程数。 每个线程负责发送请求,默认值为 10。如果使用大型字典,可以适当增加线程数以提高扫描速度;如果机器性能较低或目标服务器较敏感,也可以降低线程数。 |
-w | --wordlist | 指定字典文件。 Gobuster 会把字典中的每一项依次拼接到目标 URL 上进行尝试。 |
| (无短参数) | --delay | 设置请求之间的间隔时间。 某些网站会根据短时间内大量请求判断是否有人在枚举目录,因此可以增加请求间隔,使扫描流量更接近正常用户访问。 |
| (无短参数) | --debug | 开启调试模式。 当命令出现异常或报错时,可输出更多调试信息,便于排查问题。 |
-o | --output | 将扫描结果保存到指定文件。 |
示例:
gobuster dir -u "http://www.example.com/" -w /usr/share/wordlists/dirb/small.txt -t 64
gobuster dir: 使用目录和文件枚举模式-u "http://www.example.thm/": 目标 URL-w /usr/share/wordlists/dirb/small.txt: 使用small.txt字典-t 64: 设置线程数
dir
输入以下命令即可显示帮助:gobuster dir --help
下面这些是 Gobuster 在目录枚举、子域名枚举等场景中常用的参数。
| 短参数 | 长参数 | 说明 |
|---|---|---|
-c | --cookies | 携带 Cookie 发起请求。 例如登录后的 Session ID、JWT Cookie 等。当目标网站需要登录后才能访问时,可以使用此参数。 |
-x | --extensions | 指定要扫描的文件扩展名。 例如扫描 .php、.js、.html 等文件。 |
-H | --headers | 添加自定义 HTTP 请求头。 例如 Authorization、User-Agent、Host 等。 |
-k | --no-tls-validation | 忽略 HTTPS 证书验证。 在 CTF、TryHackMe 等实验环境中,经常使用自签名证书(Self-signed Certificate),开启此参数可以避免 TLS 验证错误。 |
-n | --no-status | 不显示 HTTP 状态码。 让输出更加简洁。 |
-P | --password | 指定登录密码。 与 -U(用户名)一起使用,执行需要身份认证的请求。 |
-s | --status-codes | 仅显示指定状态码的响应。 例如 200,或者状态码范围 300-400。 |
-b | --status-codes-blacklist | 隐藏指定状态码。 例如隐藏 404。使用该参数时,会覆盖 -s 的设置。 |
-U | --username | 指定登录用户名。 通常配合 -P 使用。 |
-r | --followredirect | 自动跟随 HTTP 重定向(301、302 等)。 当服务器返回跳转时,Gobuster 会继续访问新的 URL。 |
示例:
枚举目录和文件的实际示例:
gobuster dir -u "http://www.example.com" -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 64 --exclude-length 1055 -o gobuster -n
用该-x标志来指定要枚举的文件类型:
gobuster dir -u "http://www.example.com" -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x .php,.js
dns
输入以下命令即可显示帮助:gobuster dns --help
| 短参数 | 长参数 | 说明 |
|---|---|---|
-c | --show-cname | 显示 CNAME(规范名称)记录。(不能与 -i 同时使用。) |
-i | --show-ips | 显示域名及其子域名解析得到的 IP 地址。 |
-r | --resolver | 指定自定义 DNS 服务器进行解析。 |
-d | --domain | 指定要枚举的目标域名。 |
DNS 模式下运行 Gobuster,使用以下命令语法:
gobuster dns -d example.thm -w /path/to/wordlist
示例:
gobuster dns -d example.thm -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt
vhost
输入以下命令即可显示帮助信息:gobuster vhost --help
vhost(Virtual Host,虚拟主机)模式使用的参数与 dir 模式类似,下面是最常用的几个参数。
| 短参数 | 长参数 | 说明 |
|---|---|---|
-u | --url | 指定目标 URL(基础域名),Gobuster 会基于该 URL 爆破虚拟主机。 |
| (无短参数) | --append-domain | 自动将基础域名追加到字典中的每个单词后面,例如 admin → admin.example.com。 |
-m | --method | 指定 HTTP 请求方法,例如 GET、POST。默认使用 GET。 |
| (无短参数) | --domain | 为字典中的每个单词追加指定域名,生成完整的主机名。如果没有在 URL 中明确提供域名,可使用此参数。 |
| (无短参数) | --exclude-length | 根据响应内容长度过滤结果,用于排除默认页面或误报。 |
-r | --follow-redirect | 自动跟随 HTTP 重定向(301、302 等),适用于虚拟主机发生跳转的情况。 |
运行 Gobuster vhost,使用以下命令语法:
gobuster vhost -u "http://example.thm" -w /path/to/wordlist
示例:
gobuster vhost -u "http://10.49.184.99" -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt --append-domain --domain example.thm --exclude-length 250-320