如何生成字典
工具Crunch
安装:(kali)
sudo apt install crunch
gzip -d /usr/share/wordlists/rockyou.txt.gz(rockyou.txt是kali自带的密码底库)
使用:
1. 基本语法
1 | crunch <min-len> <max-len> [charset] [options] |
min-len: 生成密码的最小长度。max-len: 生成密码的最大长度。charset: 可选,用于生成密码的字符集。options: 可选,用于控制输出格式、文件分割、起始位置等。
2. 特殊字符集
如果不指定 charset,Crunch 将使用默认字符集(小写字母+大写字母+数字+符号)。你也可以使用 -f参数调用内置的字符集文件(如 /usr/share/crunch/charset.lst)。
| 简写 | 含义 | 简写 | 含义 |
|---|---|---|---|
numeric |
0123456789 | ualpha |
ABCDEFGHIJKLMNOPQRSTUVWXYZ |
lalpha |
abcdefghijklmnopqrstuvwxyz | symbols |
常见特殊符号 |
3. 模式占位符 (-t)
使用 -t参数可以指定密码的固定格式,其中占位符代表不同类型的字符。
| 占位符 | 代表类型 |
|---|---|
@ |
小写字母 (a-z) |
, |
大写字母 (A-Z) |
% |
数字 (0-9) |
^ |
特殊符号 |
注意:若要在模式中包含 @, ,, %, ^这些字符本身,需使用 -l参数将其指定为字面量。
常用参数详解
-
-o <file>: 将生成的字典输出到指定文件。 -
-b <size>[type]: 按文件大小分割字典。type可选kb,mb,gb或kib,mib,gib。 -
-c <number>: 按行数分割字典,每个文件包含指定数量的密码。 -
-d <num><symbol>: 限制同一字符连续出现的次数。@代表小写字母,%代表数字,^代表符号。例如-d 2@表示小写字母最多连续出现2次 (aab合法,aaa不合法)。 -
-s <string>: 从指定的字符串开始生成,便于断点续传。 -
-e <string>: 生成到指定的字符串时停止。 -
-f <path> <charset-name>: 调用字符集文件中的预设字符集。 -
-p <charset|word1 word2...>: 生成字符的全排列(不重复)。此模式下,min-len和max-len参数失效,但必须填写。 -
-q <file>: 读取文件中的每行内容作为元素,进行全排列组合。 -
-r: 从上次中断的地方恢复生成(需配合-o和相同的命令使用)。 -
-z <type>: 生成字典后直接压缩。type可选gzip,bzip2,lzma,7z。 -
-u: 不显示进度百分比。 -
-i: 改变输出顺序,从列优先变为行优先(如aaa, baa, caa...)。
实战示例
1. 基础用法
- 生成 1-3 位纯数字字典
1 | crunch 1 3 0123456789 -o num1-3.txt |
- 生成 1-4 位小写字母字典 (使用默认字符集)
1 | crunch 1 4 -o lower1-4.txt |
- 字符集中包含空格
使用引号或反斜杠转义
1 | #方式一:使用引号 |
2. 使用内置字符集
- 生成 4 位数字字典
1 | crunch 4 4 -f /usr/share/crunch/charset.lst numeric -o num4.txt |
- 生成 2 位大写字母字典
1 | crunch 2 2 -f /usr/share/crunch/charset.lst ualpha -o upper2.txt |
3. 按模式生成 (-t)
- 生成 6 位纯数字密码
1 | crunch 6 6 0123456789 -t ###### -o num6.txt |
- 生成
admin开头的 8 位密码
1 | crunch 8 8 -t admin%%%% -o admin.txt |
- 生成手机号格式密码 (如 135****2929)
1 | crunch 11 11 -t 135%%%%2929 -o phone.txt |
- 生成
小写字母 + 数字格式的 4 位密码
1 | crunch 4 4 -t @%%% -o lower_digit.txt |
- 生成
小写+大写+数字+符号格式的 8 位密码
1 | crunch 8 8 -t @,%%^^## -o complex8.txt |
4. 限制连续字符 (-d)
- 生成 6 位数字,但相同数字最多连续出现 2 次
1 | crunch 6 6 0123456789 -d 2% -o num6_limit2.txt |
5. 按大小或行数分割文件 (-b, -c)
- 每个文件最大 10MB
1 | crunch 4 5 -b 10mb -o START |
- 每个文件最多 5000 行
1 | crunch 1 5 -c 5000 -o START |
6. 压缩输出 (-z)
- 生成字典并用 bzip2 压缩
1 | crunch 4 4 -t @,%^ -o dict.txt -z bzip2 |
7. 排列组合 (-p, -q)
- 对 “abc” 进行全排列
1 | crunch 1 1 -p abc -o abc_perm.txt |
# 输出: abc acb bac bca cab cba
- 对多个单词进行全排列
1 | crunch 1 1 -p dog cat bird -o animals_perm.txt |
# 输出: birdcatdog birddogcat catbirddog catdogbird dogbirdcat dogcatbird
- 从文件读取内容进行排列
假设words.txt内容为hello world kali。
1 | crunch 1 1 -q words.txt -o words_perm.txt |
8. 断点续传 (-s, -r)
- 从
99990开始生成 6 位数字字典
1 | crunch 6 6 0123456789 -s 99990 -o num6.txt |
- 如果中途中断,使用
-r恢复
1 | crunch 6 6 0123456789 -r -o num6.txt |
9. 高级模式与 -l
- 在模式中使用字面量
@
想生成p@ss12!这种密码,需要将@转义。
1 | crunch 7 7 -t p@ss,%^ -l a@aaaaa -o pass.txt |
# -l a@aaaaa 表示第一个字符 'a' 和 '@' 都是字面量,其余 'a' 代表小写字母。
注意事项
-
字典大小爆炸
生成的字典文件大小会随长度和字符集呈指数级增长。例如,使用62个字符(a-z, A-Z, 0-9)生成8位密码,总条目为 62⁸ ≈ 2.18万亿。操作前务必用
-b或-c参数预估并限制大小。 -
-p参数的特殊性使用
-p进行全排列时,min-len和max-len参数虽不影响结果,但语法上必须填写。建议将-o参数放在-p之前,以防被误解析。 -
特殊字符的转义
在 Bash 中,
&,*,空格,\`,(,),|,',",;,<,>,$等字符有特殊含义。如果它们出现在-t的模式中,需要用``转义或用引号“”`包裹整个模式。 -
磁盘空间检查
开始前,请使用
df -h命令检查目标磁盘分区是否有足够的剩余空间,避免因空间不足导致生成失败。
说些什么吧!