crunch 是一款功能强大的单词列表(词表)生成工具,它能够根据用户指定的条件和规则生成自定义词表。这些词表主要用于密码破解、渗透测试和安全评估等场景,帮助测试人员评估系统密码的强度。
与其他词表生成工具相比,crunch 的特点是高度灵活,支持通过字符集、模式、组合规则等方式生成高度定制化的词表。它可以将生成的结果输出到屏幕、文件或直接传递给其他工具(如密码破解工具),是渗透测试中生成针对性密码字典的重要工具。
二、工具常用参数说明
| 参数 | 中文说明 |
|---|---|
| <min> | 必需参数,指定生成单词的最小长度 |
| <max> | 必需参数,指定生成单词的最大长度 |
| -b <size>[k|m|g] | 指定输出文件的大小上限,单位可以是 k(KB)、m(MB)、g(GB),达到上限后自动分文件 |
| -c <number> | 指定每个输出文件中包含的单词数量 |
| -d <number> | 限制相同字符连续出现的最大次数,格式为 <数字> 或 <数字>:<字符> |
| -e <string> | 当生成到指定字符串时停止 |
| -f <path> | 使用预定义的字符集文件(默认路径为 /usr/share/crunch/charset.lst) |
| -i | 反转输出的单词顺序 |
| -o <file> | 将生成的词表保存到指定文件 |
| -p [charset] [charset] ... | 生成字符集的所有可能组合,不考虑长度限制(忽略 min 和 max) |
| -q <file> | 从指定文件中读取单词并生成所有可能的组合 |
| -r | 继续上次中断的词表生成过程 |
| -s <string> | 从指定字符串开始生成词表 |
| -t <pattern> | 按照指定模式生成词表,支持通配符(%=数字,@=小写字母,^=大写字母,,=特殊字符) |
| -u | 禁止打印进度信息 |
| -z <compression> | 对输出文件进行压缩,支持 gzip、bzip2、lzma、7z 等格式 |
三、使用教程
1. 基础使用方法
crunch 的基本语法为:
crunch <最小长度> <最大长度> [字符集] [选项]
如果不指定字符集,默认使用小写字母(abcdefghijklmnopqrstuvwxyz)。
2. 常用命令示例
(1)生成基础字母词表
crunch 3 5
功能:生成长度为 3 到 5 的所有小写字母组合(如 aaa、aab...zzzzz)
输出:直接显示在终端,按 Ctrl+C 可终止
(2)指定字符集生成数字词表
crunch 4 4 0123456789 -o numbers.txt
功能:生成所有 4 位数字组合(0000 到 9999),并保存到 numbers.txt 文件
适用场景:破解纯数字密码(如 PIN 码、简单密码)
(3)混合字符集生成复杂词表
crunch 6 6 abc123! -o mixed_words.txt
功能:生成长度为 6 的词表,字符来自 a、b、c、1、2、3、! 的组合
优势:包含字母、数字和特殊字符,模拟复杂密码规则
(4)使用预定义字符集
crunch 5 5 -f /usr/share/crunch/charset.lst mixalpha-numeric-all-space -o predefined.txt
功能:使用系统预定义的 "mixalpha-numeric-all-space" 字符集(包含大小写字母、数字、空格和特殊字符)生成 5 位长度的词表
说明:预定义字符集文件中包含多种常用字符组合,可通过查看该文件了解更多选项
(5)按模式生成词表
crunch 8 8 -t @@@%^^^ -o pattern_based.txt
模式说明:
@代表小写字母(如 a-z)%代表数字(0-9)^代表大写字母(A-Z)
功能:生成 8 位词表,格式为 "3个小写字母+1个数字+3个大写字母"(如 abc1ABC 符合格式)
适用场景:已知密码遵循特定格式(如前半为字母后半为数字)
(6)生成组合词表(无长度限制)
crunch 0 0 -p apple banana cherry -o combinations.txt
功能:生成 "apple"、"banana"、"cherry" 三个单词的所有可能组合(如 applebananacherry、bananaapplecherry 等)
说明 :-p 参数忽略 min 和 max,此时可设为 0 0
(7)限制字符重复次数
crunch 4 4 -d 2@ abcdef -o no_repeat.txt
功能:生成 4 位词表(字符来自 a-f),限制相同字符最多连续出现 2 次(如 aabc 合法,aaab 非法)
优势:减少无意义的重复字符组合,缩小词表体积
(8)分卷生成大词表
crunch 6 6 -b 10m -o output_ -z gzip
功能:生成 6 位词表,每个文件大小不超过 10MB,使用 gzip 压缩,文件名为 output_000.gz、output_001.gz 等
适用场景:生成超大词表时避免单个文件过大
(9)从指定字符串开始生成
crunch 3 3 -s abc -o continue_from_abc.txt
功能:从 "abc" 开始生成 3 位小写字母词表(跳过 aaa 到 abb 的组合)
优势:可继续上次未完成的词表生成任务
3. 使用注意事项
- 性能与资源:
- 词表大小随长度呈指数增长(如 6 位大小写字母+数字组合约有 91.6 亿种可能),生成前需评估存储空间和时间成本
- 避免生成过长(如超过 8 位)的全字符集词表,可能导致文件过大(GB 甚至 TB 级)
- 字符集选择:
- 根据目标密码策略选择字符集(如已知密码仅包含数字和小写字母,无需加入大写和特殊字符)
- 合理使用预定义字符集(charset.lst)可简化命令
- 组合策略:
- 结合目标信息(如生日、品牌名、常见密码前缀)使用
-t模式生成针对性词表,比全组合词表更高效 - 对于复杂密码,可先用 crunch 生成基础词表,再用其他工具(如 hashcat)添加规则扩展
- 结合目标信息(如生日、品牌名、常见密码前缀)使用
- 输出方式:
- 直接输出到破解工具(如
crunch 4 4 0123456789 | john --stdin hash.txt)可节省存储空间 - 大词表建议使用分卷(-b)和压缩(-z)选项
- 直接输出到破解工具(如