本文是我翻译的hydra在GitHub的README.md内容,有少量删改。原文地址:https://github.com/vanhauser-thc/thc-hydra/blob/master/README.md
几乎任何的密码安全研究都显示,最大的安全漏洞之一是弱口令。
为了让研究者和安全顾问们能向人们展示从远程计算机未授权获取一个系统的访问权限是多么的容易,Hydra由此诞生。
郑重声明,这个工具只是为了合法目的!
目前已经有了很多登录破解的工具,但是没有一个能像Hydra这样支持多协议攻击,并且支持并行连接。
它已经在Linux, Windows/Cygwin, Solaris, FreeBSD/OpenBSD, QNX (Blackberry 10) 和 MacOS系统上进行了完善的编译测试。
目前这个工具支持如下的协议:
当然,这个工具的模块化引擎可以快速简单的增加对新协议的支持,所以未来很快会支持更多的协议类型。我们很期待你加入我们,为工具增加新功能,增强现有的功能,或者是修复一些BUG!! :-)
你可以在网站:https://www.thc.org/thc-hydra 获取最新的发行版本。
如果你想关注此项目的开发进展,或者想贡献自己的力量。项目的GitHub主页:https://github.com/vanhauser-thc/thc-hydra
svn co https://github.com/vanhauser-thc/thc-hydra
或者
git clone https://github.com/vanhauser-thc/thc-hydra
注意,如果你使用的是开发版本,它会包含有最新的特性,但是也会有新的BUG,甚至无法运行。
配置,编译,安装Hydra,使用如下命令:
./configure
make
make install
如果你想使用ssh模块,就必须在你的系统上安装配置libssh(不是libssh2!),可以从这个链接获取:http://www.libssh.org,为开启ssh v1的支持,你需要在执行cmake命令时加上-DWITH_SSH1=On
选项。
如果你使用的是Ubuntu/Debian系列的系统,如下的命令可以安装几个可选模块所需的补充类库(注意命令安装的类库在你的系统上可能找不到,因为不同系统上的同一软件名称可能有些细微差别)。
apt-get install libssl-dev libssh-dev libidn11-dev libpcre3-dev \
libgtk2.0-dev libmysqlclient-dev libpq-dev libsvn-dev \
firebird-dev libncp-dev
这条命令会开启除Oracle,SAP R/3 and the apple filing protocol之外的所有的可选模块的特性。剩余的这几个模块需要到他们的官方网站上下载安装。
如果需要在其他的linux发行版和BSD操作系统上安装的话,使用系统的安装工具搜索跟上面名称相似的安装包进行安装。在所有其他情况下,你需要下载所有的源码包然后自己编译安装。
在命令行执行如下命令:
hydra
你将会看到一个对关键参数的简短的说明。
执行
hydra -h
查看所有的命令行选项。
注意,安装完成后工具并没有包含密码字典。需要自己生成。如果你想获取一份所有服务的默认用户密码表,可以使用 “dpl4hydra.sh” 生成一个。
对于Linux用户,使用 ./xhydra
可以打开一个GTK图形界面。
对于使用命令行的用户,语法如下:
使用新的 “://” 语法格式,可以攻击一个目标或者一个网络,
hydra [some command line options] PROTOCOL://TARGET:PORT/MODULE-OPTIONS
当然也可以使用旧的语法格式,并且如果你想从文件中获取攻击目标,那就必须使用旧的语法。
hydra [some command line options] [-s PORT] TARGET PROTOCOL [MODULE-OPTIONS]
通过命令行参数,你可以指定尝试哪些用户,哪些密码,是否使用SSL,使用多少并行任务进行攻击,等等。
第一步 - 选择目标
你有三种方式指定攻击的目标:
第二步 - 选择协议
尽量避免使用telnet协议,因为使用该协议尝试登陆探测到的结果不可靠。
使用一个端口扫描器来发现目标主机上有哪些开放的协议。
第三步 - 检查该模块是否有可选的参数
hydra -U PROTOCOL
例如:
hydra -U smtp
第四步 - 目标端口
这一步操作是可选的!如果没有指定端口,将会使用该协议默认的端口
如果你使用 “-S” 选项指定使用SSL连接,对应的会使用协议默认的SSL端口。
如果你使用 “://” 标记法,当目标地址是IPv6或者是一个CIDR (“192.168.0.0/24”) 时,地址部分必须使用 “[” “]” 括起来:
hydra [some command line options] ftp://[192.168.0.0/24]/
hydra [some command line options] -6 smtps://[2001:db8::1]/NTLM
注意,hydra默认攻击只支持IPv4!
如果你想攻击一个IPv6地址,你必须在命令行添加 “-6” 选项。此时所有的攻击变成只支持IPv6
如果你想通过文件来指定攻击目标,这时你将不能使用 “://” 格式,这时只能使用旧的格式来指定协议和其他的选项:
hydra [some command line options] -M targets.txt ftp
你也可以在文件中给每一个目标提供端口,例如:
foo.bar.com
target.com:21
unusual.port.com:2121
default.used.here.com
127.0.0.1
127.0.0.1:2121
注意,如果你想攻击IPv6目标,你必须提供 “-6” 选项,并且在文件中必须将地址使用 “[” “]”括起来:
foo.bar.com
target.com:21
[fe80::1%eth0]
[2001::1]
[2002::2]:8080
[2a01:24a:133:0:00:123:ff:1a]
你有很多种方式来指定尝试的登录名和密码,使用 “-l” 选项指定单个登录名,使用 “-p” 选项指定单个密码。使用 “-L” 选项指定一个文件来指定多个登录名,使用 “-P” 选项指定一个文件来指定多个密码。例如:
hydra -l admin -p password ftp://localhost/
hydra -L default_logins.txt -p test ftp://localhost/
hydra -l admin -P common_passwords.txt ftp://localhost/
hydra -L logins.txt -P passwords.txt ftp://localhost/
此外,你可以通过指定 “-e” 选项尝试基础的密码,”-e” 选项有三个参数:
如果你想使用这个选项,尝试使用组合的方式指定,比如可以使用 “-e sn” 指定使用登录名作为密码和尝试空密码。
除了使用 -p/-P 外,还有一种指定登录名密码的方式,使用 “登录名:密码” 的格式放到文件中指定,例如:
admin:password
test:test
foo:bar
这是一种公共的默认的账号列表格式,这种格式也是一开始提到的 “dpl4hydra.sh” 生成的默认账号文件的格式。
你可以使用 “-C” 选项指定该格式的文件,当使用这种账号模式时,就不能再使用 “-l/-L/-p/-P” 选项(不过可以使用 “-e nsr” 选项)。
例子:
hydra -C default_accounts.txt ftp://localhost/
最后,还有一种Brute Force模式(暴力模式),使用 “-x” 选项指定(此选项不能和 “-p/-P/-C” 选项一起使用):
-x minimum_length:maximum_length:charset
上面的 charset
位置,使用 a
表示小写字母,A
表示大写字母,1
表示数字,and for anything else you supply it is their real representation.
例子:
-x 1:1:a
生成一个字符的并且小写字母的密码。也就是说该参数会尝试从a到z共26个密码。-x 1:3:a
生成长度为1到3个字符并且全部小写字母的密码-x 2:5:/
生成长度为2到5个字符并且只包含斜杠的密码-x 5:8:A1
生成长度为5到8个字符并且有大写字母和数字的密码例子:
hydra -l ftp -x 3:3:a ftp://localhost/
通过第三个命令行参数(目标主机 服务名称 选项)或者使用 “-m” 选项,你可以给模块加一个选项。很多模块可以加,有一些必须加。
查看特定模块的选项,执行:
hydra -U
例如:
./hydra -U http-post-form
特定的选项可以通过 “-m” 参数指定,作为第三个命令行参数或者直接写在 “service://target/option” 格式中。
例子:(这些都是等价的)
./hydra -l test -p test -m PLAIN 127.0.0.1 imap
./hydra -l test -p test 127.0.0.1 imap PLAIN
./hydra -l test -p test imap://127.0.0.1/PLAIN
当hydra终止后,可能是因为Control-C,进程被杀死,或者崩溃,它会留下一个 “hydra.restore” 文件,这个文件包含了所有的恢复会话所需的必要信息。这个会话文件每隔5分钟写一次。
注意:hydra.restore文件不能复制到不同的平台下(例如:在不同的字符编码的平台间复制,或者不同的操作系统)。
环境变量 “HYDRA_PROXY_HTTP” 定义了Web代理(这种只能用于http服务)。格式如下:
HYDRA_PROXY_HTTP="http://123.45.67.89:8080/"
HYDRA_PROXY_HTTP="http://login:[email protected]:8080/"
HYDRA_PROXY_HTTP="proxylist.txt"
最后一个示例是一个文本文件包含多达64个代理(格式定义与其他示例相同)。
对于所有其他的服务,使用 “HYDRA_PROXY” 环境变量去扫描/破解。例如:
HYDRA_PROXY=[connect|socks4|socks5]://[login:password@]proxy_addr:proxy_port
例子:
HYDRA_PROXY=connect://proxy.anonymizer.com:8000
HYDRA_PROXY=socks4://auth:[email protected]:1080
HYDRA_PROXY=socksproxylist.txt
去除密码字典中重复的密码! 这将会节省很多时间 :-)
cat words.txt | sort | uniq > dictionary.txt
如果你知道目标密码的策略(只允许用户使用最少6个字符,包含至少一个字母和一个数字,等等。你可以使用hydra自带的 “pw-inspector” 工具来减少密码列表:
cat dictionary.txt | pw-inspector -m 6 -c 2 -n > passlist.txt
破解结果会和其它信息一起输出到标准输出。通过指定 “-o” 命令行参数,可以将破解结果写入一个文件。使用 “-b” 选项指定输出的格式。目前支持如下几个格式:
text
- 普通文本。jsonv1
- 1.x版本使用的JSON数据格式(见下)。json
- 最后一个版本使用的JSON数据格式,当前最后一个版本就是1.x。如果使用JSON输出,当hydra启动报错时,结果文件中可能会有非JSON格式的数据,可能会导致解析报错,需要特殊处理。
这里有一个JSON输出的数据格式示例。注意某些字段信息的标记说明:
errormessages
- 该字段是一个数组,包含有hydra运行结束后的错误输出。输出的内容很随意,没有任何格式。success
- 表明hydra是否没有出现任何错误成功执行完成。(注意 不是表示有没有发现弱口令)。根据是否完成取值true或false。 quantityfound
- 发现的用户名密码对的数量。jsonoutputversion
- Schema版本, 1.00, 1.01, 1.11, 2.00, 2.03, 等等。1.00 版本例子:
{
"errormessages": [
"[ERROR] Error Message of Something",
"[ERROR] Another Message",
"These are very free form"
],
"generator": {
"built": "2018-03-01 14:44:22",
"commandline": "hydra -b jsonv1 -o results.json ... ...",
"jsonoutputversion": "1.00",
"server": "127.0.0.1",
"service": "http-post-form",
"software": "Hydra",
"version": "v8.5"
},
"quantityfound": 2,
"results": [
{
"host": "127.0.0.1",
"login": "[email protected]",
"password": "bill",
"port": 9999,
"service": "http-post-form"
},
{
"host": "127.0.0.1",
"login": "[email protected]",
"password": "joe",
"port": 9999,
"service": "http-post-form"
}
],
"success": false
}
使用并行特性,密码破解速度会非常快,但是,它取决于协议,不同协议速度不同。通常最快的是POP3和FTP。
尝试改变 “-t” 选项的参数去加快速度,参数值越大,速度越快(当然如果过快可能会使服务宕掉,或者会触发服务的登录保护机制)