hydra(九头蛇)是著名黑客组织thc的一款开源的暴力破解密码工具,可以说是在市面上公开的工具中功能最强大的破解工具之一。
kali是默认安装了hydra的,hydra几乎支持所有协议的在线破解。hydra在网络安全渗透过程中是一款必备的测试工具。
hydra支持的服务有:POP3,SMB,RDP,SSH,FTP,POP3,Te.NET,MYSQ... ...
hydra支持的服务
一般都是预装在kali中的,这里就不介绍安装方法了。
还是通过-h参数查看帮助文档:
hydra -h
我只使用过一些常用参数,有些没用过的也只能将帮助文档里的英文进行翻译。所以英文词汇量足够的,可以直接看帮助文档,直接跳过这里的参数讲解,看后面的实操演示。
-R:继续上一次中止/崩溃的任务。
-I:(这个是i的大写)忽略已经修复的文件。
-S:指定爆破密码时采用SSL连接。
-s:指定端口,适用于攻击目标端口非默认的情况。例如:http服务使用非80端口。
-l:(这个是L的小写)指定要爆破账户名,适合在知道用户名爆破密码时使用。
-L:指定账户名的字典文件。
-p:(小写)指定单个密码,适合在知道密码爆破用户名时使用。
-P:(大写)指定账户密码的字典文件。
-x:这个参数主要是在没有合适的密码字典文件时,让hydra通过传入的参数暴力破解密码用的,用的比较少。
-y:在暴力破解时禁止使用指定的符号。
-r:在暴力破解时不适用随机生成字符串的方式。
-e:可传项nsr,n:空密码试探,s:使用指定用户和密码相同,r:账户密码反转(比如账户root,密码toor)。
-u:账户名循环使用,需要和-x一起使用才有效果。
-C:当用户名与密码存储到一个文件时使用此参数,注意,文件(字典)存储的格式必须为“用户名:密码”的格式。
-M:指定多个攻击目标,此参数为存储攻击目标的文件的路径(建议为绝对路径)。注意:列表文件存储格式必须为“地址:端口”
-o:将找到用户密码对写入文件中而不是输出到控制台。
-b:指定-o参数输出文档的格式。
-f:只要爆破成功一个账户就停止该主机的爆破,需要和-M一起使用。
-F:只要爆破成功一个账户就停止爆破,需要和-M一起使用。
-t:指定爆破时的任务数量(可以理解为线程数),默认为16
-T:指定爆破时的任务数量,默认64,需要和-M一起使用。
-w:每次请求等待响应的时间。
-W:每个线程两次请求之间的等待间隔。
-c:每次线程尝试登录的等待时间。
-4:使用IPv4的地址。
-6:使用IPv6的地址。
-v:详情模式。
-V:显示每次请求的账户名和密码。
-d:debug调试模式。
-O:使用SSL的v2活着v3。
-K:不做失败的重复请求,适用于-M批量扫描。
-q:不打印连接错误的信息。
-U:显示服务端的详细信息。
-m:需要和-U一起适用,用于指定模块的特定选项
先检查一下目标主机的账户,并设置一个密码,没有密码也不是不可以,但是就显得后面破解的动作没有意义了。
这里是要利用共享文件夹的smb协议访问,所以也检查一下是否进行了共享:
net share
为了看到渗透的效果,这里提前将目标的远程桌面打开:
打开远程连接
检查一下远程连接打开后对应端口是否打开:
netstat -nao
除了3389是远程桌面用的端口,还有445、139都是smb协议会用到的端口。
目标主机的ip地址是192.168.218.131,公网中找目标主机的话,可以用扫描工具随机找,这里就直接在目标主机上查看就行:
ipconfig
用攻击机扫描一下目标主机开放的端口:
目标主机的端口开发状态
看到这几个端口被开放了,就表示攻击目标已经准备好了。
接下来就是要准备一些字典文件了,可以从Kali中找现成的来用:
Kali中自带的密码字典
但是我准备的机器密码是自己随意设置的,应该不会出现在Kali中的密码字典中,这里就手动添加一下。
之后就可以用hydra尝试破解密码了,命令如下:
hydra -l chen -P passwords_john.txt smb://192.168.218.130
破解结果
这里准备的目标机器管理员账户是chen,一般品牌机可以使用一些默认的管理员账户,例如administrator、admin。
前面利用的是smb协议,利用rdp协议也是一样的,只要将命令中的协议换一下:
hydra -l chen -P passwords_john.txt rdp://192.168.218.130
执行之后没有获取到密码:
执行结果
从返回的结果中可以看到出现了一些错误。主要是freerdp模块无法和目标主机建立连接导致的,这个无法连接不是账户名密码不对,就是单纯的无法连接,连密码都还没校验。
遇到这种情况要耐心分析原因,不要轻易判定字典中没有正确的密码,可以尝试根据报错信息找找对应的帖子,或者换一个爆破工具。我这里选择躺平,因为无法在Kali使用xfreerdp命令连接上Windows的远程桌面,不清楚是freerdp工具有问题,还是目标Windows有什么策略限制了。
准备一个Linux的目标机器,检查一下ssh的端口是否打开:
目标主机的端口开发状态
直接只用这个命令:
hydra -l root -P pass.lst ssh://192.168.218.129
执行后得到结果:
执行结果
现在应该比较少了,但是平时最好都加个参数-e nsr,会尝试空密码、账户密码相同、账户密码反转,这些都是很低级的失误,但是开发有时候就喜欢犯低级错误。
先查看一下有没有ftp相关的端口被打开:
目标主机的端口开发状态
这里我们选择攻击2121端口,命令如下:
hydra -L user.txt -P pass.txt ftp://192.168.218.129 -s 2121 -e nsr -vV
需要准备用户名字典和密码字典,按照比较常用的账户密码就行,太多了就比较浪费时间。
执行结果
找一个不需要验证码的登录接口,使用hydra进行爆破,命令如下:
hydra -l admin -P passwords_john.txt -f 192.168.218.129 http-post-form "/dvwa/login.php:username=^USER^&password=^PASS^&Login=Login:Login fAIled"
稍微解释一下,参数-f的作用是找到一个有效账户后停止爆破。参数http-post-form表示请求方式和传参类型,现在应该不会有get请求进行登录的,如果真遇到这类奇葩了,可以使用http-get作为参数。
后面一长串字符串第一个英文冒号前面是请求的地址,两个冒号之间的是post的body数据,username和password这两个参数名可以通过页面上提交请求看F12中的network记录,也可以直接看页面的源码中对参数的定义。至于^USER^和^PASS^是固定写法,就是从前面命令中传入的用户名和密码。最后第二个冒号之后的内容表示有这个字符串就是登录失败。
执行结果
这里要提一下,命令中第二个冒号之后跟的默认是失败的依据,但是也可以通过S指定成功的依据,例如
hydra -l admin -P passwords_john.txt -f 192.168.218.129 http-post-form "/dvwa/login.php:username=^USER^&password=^PASS^&Login=Login:S=index.php"
执行结果
还是先检查有没有将MySQL的端口打开:
目标主机的端口开发状态
直接使用如下命令:
hydra -l root -P pass.txt mysql://192.168.218.129 -e nsr -vV
执行结果
可以通过命令xhydra打开hydra的图形化控制台:
hydra的图形化控制台
如果对hydra的参数有一定了解,基本都能将控制台上的选项和参数对应起来。
这里就不对图形化控制台进行演示了,效果其实和命令行是完全一致的。
hydra的功能非常强大,而且相对以前的版本,现在的hydra稳定性已经有了较明显的提升。但是要想用hydra做好爆破工作,还是要多熟悉各个参数的作用,要积累各种爆破场景的经验。
提醒一下,密码爆破的核心其实是字典,hydra这类工具只是起到检验字典内容的作用。