什么是Hydra?
- Hydra(九头蛇) 是一款暴力破解工具,能帮助渗透测试人员和合法(授权)黑客破解网络服务的密码。 Hydra 能够对 50 多种协议进行快速字典爆破,包括 telnet、FTP、HTTP、HTTPS、SMB、数据库以及其他多种服务。
- Hydra由黑客组织“The Hacker’s Choice”开发。
- 它于 2000年首次发布,作为一个概念验证工具,展示了如何对网络登录服务进行爆破。
- Hydra还是一个并行登录破解工具,意味着可以同时建立多个连接。与顺序暴力破解不同,这减少了破解密码所需的时间。
- 虽然 John 和 Hydra都是暴力破解工具,但 John 离线工作,而 Hydra 在线工作。 在本文中,我们将探讨 Hydra 的工作原理,并介绍一些实际用例。
注意:本文章仅供教育目的。如果您非法使用并陷入麻烦,我不会承担任何责任。在扫描/暴力破解/利用系统之前,请一定获得资产所有者的许可。
如何安装 Hydra
Hydra 在 Kali Linux 和 Parrot OS 中已预先安装。如果您使用的是其中之一,可以立即开始使用 Hydra。
在 Ubuntu 上,可以使用 apt 包管理器安装:
$ apt install hydra
在 Mac 上,可以在 Homebrew 中找到 Hydra:
$ brew install hydra
如果您使用的是 Windows,建议使用虚拟机并安装 Linux。个人而言,如果您想成为专业的渗透测试人员,不推荐使用 Windows。
如何使用 Hydra
让我们看看如何使用 Hydra。我们将了解 Hydra 为暴力破解用户名和密码提供的常见格式和选项,包括单个用户名/密码爆破、密码喷洒爆破和字典爆破。
密码喷洒是一种暴力破解attack,恶意行为者会对多个账户尝试使用同一个密码进行破解,然后再尝试另一个密码。密码喷洒attack通常很容易成功,因为很多用户会使用简单易猜的密码,如“password”或“123456”等。
如果已经安装了 Hydra,可以使用 help 命令开始,如下所示:
$ hydra -h
这将为您提供在使用 Hydra 时可以参考的标志和选项列表。
Hydra参数分析:
root@kali:~# hydra -h
// 显示 Hydra 工具的帮助信息
Hydra v9.5 (c) 2023 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).
Syntax: hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e nsr] [-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-W TIME] [-f] [-s PORT] [-x MIN:MAX:CHARSET] [-c TIME] [-ISOuvVd46] [-m MODULE_OPT] [service://server[:PORT][/OPT]]
// 说明 Hydra 命令的语法格式
Options:
-R // 恢复之前中断或崩溃的会话
-I // 忽略现有的恢复文件(不等待 10 秒)
-S // 执行 SSL 连接
-s PORT // 如果服务在非默认端口上,在此指定端口
-l LOGIN or -L FILE // 使用指定的登录名 LOGIN,或从文件 FILE 加载多个登录名
-p PASS or -P FILE // 尝试指定的密码 PASS,或从文件 FILE 加载多个密码
-x MIN:MAX:CHARSET // 密码暴力生成,输入"-x -h"获取帮助
-y // 禁用在暴力破解中使用符号,见上文
-r // 使用非随机的打乱方法进行 -x 选项的操作
-e nsr // 尝试 "n" 空密码、"s" 以登录名作为密码和/或 "r" 反转登录名
-u // 循环遍历用户,而非密码(有效!-x 选项隐含此操作)
-C FILE // 以冒号分隔的"login:pass"格式,代替 -L/-P 选项
-M FILE // 要attack的服务器列表,每行一个,':'指定端口
-o FILE // 将找到的登录/密码对写入 FILE 而不是标准输出
-b FORMAT // 为 -o FILE 指定格式:text(默认)、json、jsonv1
-f / -F // 当找到登录/密码对时退出(-M: -f 针对每个主机,-F 全局)
-t TASKS // 每个目标并行运行的连接数(默认: 16)
-T TASKS // 总体并行运行的连接数(对于 -M,默认: 64)
-w TIME // 等待响应的时间(默认 32)
-W TIME // 每个线程之间连接的等待时间(默认 0)
-c TIME // 每个登录尝试在所有线程上的等待时间(强制 -t 1)
-4 / -6 // 使用 IPv4(默认)/ IPv6 地址(在 -M 中也始终放在 [] 中)
-v / -V / -d // 详细模式/为每个尝试显示登录名和密码/调试模式
-O // 使用旧的 SSL v2 和 v3
-K // 不重复失败的尝试(适用于 -M 大规模扫描)
-q // 不打印关于连接错误的消息
-U // 服务模块使用详情
-m OPT // 特定于模块的选项,查看 -U 输出获取信息
-h // 显示更多命令行选项(完整帮助)
server // 目标:DNS、IP 或 192.168.0.0/24(这个或 -M 选项)
service // 要破解的服务(见下面支持的协议)
OPT // 某些服务模块支持额外的输入(-U 查看模块帮助)
"目前Hydra支持的协议(服务service)"
Asterisk, AFP, Cisco AAA, Cisco auth, Cisco enable, CVS, Firebird, FTP,
HTTP-FORM-GET, HTTP-FORM-POST, HTTP-GET, HTTP-HEAD, HTTP-POST, HTTP-PROXY,
HTTPS-FORM-GET, HTTPS-FORM-POST, HTTPS-GET, HTTPS-HEAD, HTTPS-POST,
HTTP-Proxy, ICQ, IMAP, IRC, LDAP, MEMCACHED, MONGODB, MS-SQL, MYSQL, NCP, NNTP, Oracle Listener,
Oracle SID, Oracle, PC-Anywhere, PCNFS, POP3, POSTGRES, Radmin, RDP, Rexec, Rlogin,
Rsh, RTSP, SAP/R3, SIP, SMB, SMTP, SMTP Enum, SNMP v1+v2+v3, SOCKS5,
SSH (v1 and v2), SSHKEY, Subversion, Teamspeak (TS2), Telnet, VMware-Auth,
VNC and XMPP.
Examples(使用示例):
hydra -l user -P passlist.txt ftp://192.168.0.1
// 使用指定的用户"user"和密码列表"passlist.txt"对 FTP 服务在 192.168.0.1 进行暴力破解
hydra -L userlist.txt -p defaultpw imap://192.168.0.1/PLAIN
// 使用用户列表"userlist.txt"和指定的默认密码"defaultpw"对 IMAP 服务在 192.168.0.1 进行破解,使用 PLAIN 认证方式
hydra -C defaults.txt -6 pop3s://[2001:db8::1]:143/TLS:DIGEST-MD5
// 使用冒号分隔的"login:pass"格式的文件"defaults.txt"对 IPv6 地址 2001:db8::1 的 POP3S 服务在 143 端口进行破解,使用 TLS 和 DIGEST-MD5 认证方式
hydra -l admin -p password ftp://[192.168.0.0/24]/
// 使用指定的用户"admin"和密码"password"对 192.168.0.0/24 网段的 FTP 服务进行暴力破解
hydra -L logins.txt -P pws.txt -M targets.txt ssh
// 使用用户列表"logins.txt"和密码列表"pws.txt",根据"targets.txt"中的目标列表对 SSH 服务进行暴力破解
如何使用 Hydra 进行单个用户名/密码attack
让我们从一个简单的attack开始。如果我们知道系统中预期的用户名和密码,可以使用 Hydra 进行测试。
以下是语法:
$ hydra -l <用户名> -p <密码> <服务器> <服务>
假设在 114.51.41.191 上有一个名为“tiandou”、密码为“aytdd”的用户,以下是如何使用 Hydra 测试 SSH 的凭据:
$ hydra -l tiandou -p aytdd 114.51.41.191 ssh
如果成功,结果将如下所示:
(aytdd不符合密码复杂度要求)
如何使用 Hydra 进行密码喷洒attack
如果我们知道一个密码,但不确定是谁在使用,我们可以使用密码喷洒attack来确定用户名。
密码喷洒attack是使用单个密码对多个用户进行测试。如果有人使用该密码,Hydra 会为我们找到匹配项。
此attack假设我们知道系统中的用户列表。对于此示例,我们将创建一个名为 users.txt 的文件,其中包含以下用户:
root
admin
user
zhangyi
tiandou
aytdd
现在我们要测试谁的密码是“zmyyq”。以下是如何使用 Hydra 进行密码喷洒attack:
$ hydra -L users.txt -p zmyyq 114.51.41.191 ssh
如果有任何用户与给定密码匹配,我们将得到类似的结果。还应注意,我们使用了 -L 标志而不是 -l。-l 用于单个用户名,-L 用于用户名列表(字典)。
如何使用 Hydra 进行字典attack
让我们看看如何进行字典attack。在实际场景中,这是我们经常使用 Hydra 的方式。
字典attack是指我们有单个/多个用户名,并向 Hydra 提供密码字典。Hydra 然后针对列表中的每个用户测试所有这些密码。
在此示例中,我将使用 Rockyou 字典以及之前attack中创建的 users.txt 文件。如果您使用 Kali Linux,可以在 /usr/share/wordlists/rockyou.txt 找到 RockYou 字典。
以下是字典attack的命令:
$ hydra -L users.txt -P /usr/share/wordlists/rockyou.txt 114.51.41.191 ssh
如果attack成功,我们将看到与其他两个命令类似的结果。Hydra 会将所有匹配的成功用户名/密码组合以绿色突出显示。
如何在 Hydra 中使用详细和调试标志
在运行大型暴力破解attack时,Hydra 可能非常安静。如果要确保 Hydra 按预期工作,可以使用两个标志。
详细(-v)标志将为我们显示每个用户名/密码组合的登录尝试。当有很多组合要测试时,这可能会产生大量信息,但如果需要,可以使用详细标志。
以下是一个示例结果。可以看到,Hydra 除了成功匹配外,还打印了失败尝试的信息。
我们还可以使用调试(-d)标志收集更多信息。以下是使用调试标志的相同结果:
可以看到,Hydra 打印的信息远远超过我们的需要。虽然我们很少使用调试模式,但我们可以选择观察 Hydra 在暴力破解服务时采取的每个操作也挺不错的。
如何在 Hydra 中保存结果
让我们看看如何保存结果。花费数小时破解密码,如果由于系统崩溃而丢失,那就毫无意义了。
我们可以使用 -o 标志并指定文件名来保存结果。以下是语法:
$ hydra -l <用户名> -p <密码> <ip> <服务> -o <file.txt>
更多标志和格式
Hydra 还提供了一些对我们作为渗透测试人员有用的其他标志和格式:
服务规范
无需单独指定服务,可以将其与 IP 地址一起使用。例如,要暴力破解 SSH,可以使用以下命令:
$ hydra -l <用户名> -p <密码> ssh://<ip>
如何恢复attack
如果 Hydra 的会话在attack进行中退出,可以使用 -R 标志恢复attack,而无需从头开始。
$ hydra -R
如何使用自定义端口
有时系统管理员会更改服务的默认端口。例如,FTP 可以在 3000 端口而不是默认的 21 端口运行。在这种情况下,可以使用 -s 标志指定端口。
$ hydra -l <用户名> -p <密码> <ip> <服务> -s <端口>
如何attack多个主机
如果要attack多个主机怎么办?很简单,可以使用 -M 标志。files.txt 将包含 IP 地址或主机的列表,而不是单个 IP 地址。
$ hydra -l <用户名> -p <密码> -M <host_file.txt> <服务>
有针对性的组合
如果我们有用户名和密码的列表,可以进行字典attack。但如果我们有关于哪些用户名可能具有一组密码的更多信息,可以为 Hydra 准备自定义列表。
例如,我们可以创建一个由分号分隔的用户名和密码列表,如下所示:
username1:password1
username2:password2
username3:password3
然后,我们可以使用 -C 标志告诉 Hydra 运行这些特定组合,而不是遍历所有用户和密码。这大大减少了完成暴力破解attack所需的时间。
以下是语法:
$ hydra -C <combinations.txt> <ip> <服务>
我们已经详细了解了如何使用 Hydra。现在您应该准备好对 FTP、SSH 和 Telnet 等网络服务进行实际审计。
但作为渗透测试人员,了解如何防御这些attack很重要。记住,we are good people😎
如何防御 Hydra
防御暴力破解attack的明显解决方案是设置强密码。密码越强,应用暴力破解技术就越困难。
我们还可以强制实施密码策略,每隔几周更改密码。不幸的是,许多个人和企业多年来一直使用相同的密码。这使他们容易成为暴力破解attack的目标。
另一种防止基于网络的暴力破解的方法是限制授权尝试(限制尝试登录次数)。如果在几次登录尝试失败后锁定账户,暴力破解attack将不起作用。这在QQ、需多应用中很常见,如果几次登录尝试失败,您的账户将被锁定。
最后,像 re-captcha **(验证码)**这样的工具可以很好地防止暴力破解attack。像 Hydra 这样的自动化工具无法像真正的人类一样解决验证码。
总结
Hydra 是一款快速灵活的网络暴力破解工具,可用于attack SSH 和 FTP 等服务。凭借模块化架构和对并行化的支持,Hydra 可以轻松扩展以包括新的协议和服务。
Hydra 无疑是渗透测试工具包中的强大工具。