渗透测试工具——密码攻击工具
密码存储的基本方法
明文存储:将用户密钥以普通文本的方式保存在数据库字段中,对用户来说很方便,但这种方法的安全性最低,因为所有的密钥保存为普通文本(明文),如果数据库受到黑客攻击(被"脱库"),黑客将很容易获得用户的密钥。
加密存储:一般常用的是对称加密方法,该方法使用系统密钥对所有用户密钥进行加密。这种方法的关键在于系统密钥的安全性,如果系统密钥泄露,所有用户的密钥将变得不安全。
Hash存储:利用单向散列(杂凑)函数对用户密钥进行运算得到Hash值(指纹)并存储在数据库中。与第二种方法相比,这种方法的好处是不需要存储和保护系统密钥,且攻击者无法通过Hash值逆向计算出用户密钥的明文。
因此,目前最常用的密码存储方法为Hash存储。
Hash函数H(x)的特性
常用的Hash函数(算法)
密码攻击的概念
在已经获取目标密钥Hash值或加密后的密文的情况下,利用某种方式还原出目标密钥的明文过程。
密码攻击的一般方法
- 暴力攻击(Brute Force Attack)
- 字典攻击(Dictionary Attack)
- 彩虹表攻击(Rainbow Table Attack)
用于抵抗字典及彩虹表攻击的方法之一是哈希加盐法(HASH+SALT)。
hashcat -a0 -m 0 e10adc3949ba59abbe56e057f20f883e /usr/share/john/password.lst
Hashcat简介
在Kali中启动Hashcat
Hashcat常用参数命令功能
- -a:指定破解模式
- -m:指定Hash类型(默认MD5)
- -0:将输出结果储存到指定的文件
- --force:忽略警告信息
- --show:仅显示已经破解的Hash及其对应的明文
- --increment:启用增量破解模式,可以利用此模式让Hashcat在指定的密码长度范围内执行破解过程
- --increment-min:密码最小长度,配合increment模式一起使用
- --increment-max:密码最大长度,同上
- --outfile-format:指定破解结果的输出格式id,默认是3
- --username:忽略hash文件中的指定的用户名,在破解Linux系统用户密码hash可能会用到
- --remove:删除已被破解成功的hash
- -r:使用自定义破解规则
Hashcat的破解模式(用-a参数指定)命令功能
- -a 0:Straight(字典破解)
- -a 1:Combination(组合破解)
- -a 3:Brute-force(掩码暴力破解)
- -a 6:Hybrid Wordlist + Mask(字典 +掩码破解)
- -a 7:Hybrid Mask + Wordlist(掩码+字典破解)
Hashcat的Hash类型(用-m参数指定)命令类型
- -m 900:MD4
- -m 0:MD5
- -m 100:SHA1
- -m 1300:SHA2-224
- -m 1400:SHA2-256
- -m 10800:SHA2-384
- -m 1700:SHA2-512
- -m 10:MD5($ pass.$salt)
- -m 20:MD5($salt.$pass)
- -m 3800:MD5($salt.$pass.$salt)
- -m 3000:LM
- -m 1000:NTLM
Hashcat的掩码字符集命令功能
- 小写字母(abcdefghijklmnopqrstuvwxyz)
- 大写字母(ABCDEFGHIJKLMNOPQRSTUVWXYZ)
- 十进制数字(0123456789)
- 十六进制数字,字母小写(0123456789abcdef)
- 十六进制数字,字母大写(0123456789ABCDEF)
- 特殊字符(!"#$%&'()*+.-./:;?@[]^_’{|}~)
- 相当于?I?u?d?s,即键盘上所有可见的字符
- 0x00 - 0xff
Hashcat掩码运用实例
- 八位数字密码
- 八位未知密码
- 前四位为大写字母,后四位为数字
- 前三个字符未知,中间为admin,后三位未知
- 6-8位数字密码(--increment --increment-min 6 --increment-max)
- 6-8位数字+小写字母密码(--increment --increment-min 6 --increment-max)
Hashcat使用实例——字典破解(-a 0) 使用单个字典对一个经过MD5算法运算过后的Hash值进行破解。
Hashcat使用实例掩码暴力破解(-a 3) 步骤1:利用漏洞ms17 010攻击靶机并进入meterpreter模块。详细教程在渗透测试工具——Metasploit_.SYS.的博客-CSDN博客。
hashdump
hashcat -a 3 -m 1000 75f1d23f3a2527c6bfaada3e93b32a8b ?d?d?d
步骤2:在meterpreter提示符中输入以下命令获取系统账号密码的Hash值。
步骤7:连续输入两次exit退出meterpreter和msf,在终端下输入以下命令,利用Hashcat对获取的Hash值进行暴力破解。
其中,-m 1000表示Hash类型为NTLM,掩码?d?d?d表示破解的对象为3位十进制数字。
提示:使用Hashcat进行密码攻击的关键,Hydra的使用,Kali中的Hydra。
hydra -l admin -P /usr/share/john/password.lst ftp://192.168.147.132
Hydra常用功能选项(参数)说明
- -h:显示帮助信息
- -I:指定单个用户名,适合在知道用户名的情况下爆破密码时使用
- -L:指定多个用户名,参数值为存储用户名的文件(字典)的路径(建议为绝对路径)
- -p:指定单个密码,适合在知道密码的情况下爆破用户名时使用
- -P:指定多个密码,参数值为存储密码的文件(字典)的路径(建议为绝对路径)
- -C:当用户名和密码存储到一个文件时使用此参数。注意:文件(字典)存储的格式必须为"用户名:密码"的格式
- -M:指定多个攻击目标,此参数为存储攻击目标的文件路径(建议为绝对路径)。注意:列表文件存储格式必须为"地址:端口"
- -S:指定端口,适用于攻击目标端口非默认的情况,例如http服务使用非80端口
- -t:指定爆破时的任务数量(可以理解为线程数),默认为16
- v/-V:显示爆破的详细信息
- -o:将破解成功的结果输出到文件中
Hydra支持破解的协议类型
利用Hydra进行密码攻击的一般步骤
- 选择目标:输入目标地址,可选:单独IP、CIDR、文档中的列表
- 选择协议:输入需要爆破的协议,如ftp://等,需要开始之前探测服务
- 检查参数:假如爆破需要加入额外的参数则添加即可
Hydra使用实例——爆破FTP服务器登录密码(已知用户名)
hydra -L /usr/share/wordlists/rockyou.txt.gz -P /usr/share/john/password.lst ftp://192.168.147.132
hydra -L /root/password.txt -P /root/password.txt rdp://192.168.147.132
Hydra使用实例——爆破FTP服务器的用户名和密码
Hydra使用实例——爆破远程桌面服务的用户名和密码
图形化的Hydra——Hydra-gtk
Crunch的使用,Kali中的Crunch
crunch < max-len> [] [options]
crunch 6 6 123 -o /root/number.txt
Crunch命令格式
命令参数说明参数功能
- min-len(必选):字符串的最小长度
- max-len(必选):字符串的最大长度
- charset string(可选):字符集设置,默认是小写字符集
- options(可选):选项参数
Crunch常用选项参数
选项功能
- -b:指定文件输出的大小,避免字典文件过大
- -C:指定文件输出的行数,即包含密码的个数
- -d:限制相同元素出现的次数
- -e:定义停止字符,即到该字符串就停止生成
- -i:改变输出格式,即aaa,aab -> aaa,baa
- -o:将密码保存到指定文件
- -p:指定元素以组合的方式进行
- -q:读取密码文件,即读取pass.txt
- -s:指定起始字符串
- -t:指定密码输出的格式(%代表数字,^代表特殊符号,@代表小写字符,,代表大写字符)
- -f:调用库文件/usr/share/crunch/charset.Ist
Crunch使用实例
生成长度为6、以123元素为组合的字典集,并输出到/root/number.txt
crunch 4 4 -t %^@, -o /root/pass.txt
crunch 4 4 -f /usr/share/crunch/charset.lst mixalpha-numeric -o /root/w.txt -s 3a2b
生成长度为4的字典集,第一位为数字,第二位为特殊字符,第三位是小写字符,第四位是大写字符,并输出到/root/pass.txt
以charset.Ist密码库的mixalpha-numeric模块为字符集,以3a2b为开始字符,生成长度为4的字典集,输出到/root/w.txt