Hydra 暴力破解工具
以 SSH 为例,如果需要进行暴力破解,首先我们需要一个靠谱的密码字典,纯粹的随机尝试效率极低,而有针对性地尝试高频密码自然拥有更高的效率。接下来,需要一个靠谱的程序自动使用密码进行尝试登入,这需要根据不同的协议进行针对性的实现。
前者可以直接在很多地方下载得到,比如 rockyou.txt。而后者,可以使用支持大量协议的 Hydra。
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
看到相应的入侵警告。
如果将其与防火墙联动,即可将该来源进行屏蔽,抵御暴力破解。
如何让自己的密码更安全?
从字典中可以看到,字典覆盖了大多数常见的单词,以及字母与数字的结合,如果可以巧妙地引入部分大写字母以及特殊符号,可以极大增加破解的难度。比如包括 LastPass 在内各种密码管理软件,可以生成诸如jK2QffA35XjP
这种随机的混合字符串,如果在综合大小写数字符号等内容,可以认为是难以破解的。