index
overview¶
repo: https://github.com/chainreactors/words
该库作为spray和zombie的基础能力的一部分, 是 hashcat 的 rule/mask 生成器的 go 重构(并不完全一致)。
基于掩码的字典生成 (2024.05.21 update)¶
为了实现这个功能, 编写了一门名为 mask 的模板语言. 代码位于: mask.
使用案例
spray -u http://example.com -w '/{?l#3}/{?ud#3}
含义为, /全部三位小写字母/全部三位大写字母+数字组成的字典.
所有的 mask 生成器都需要通过{}包裹, 并且括号内的第一个字符必须为?, $其中之一.
#后的数字表示重复次数, 可留空, 例如{?lu} , 表示"全部小写字母+全部大写字母"组成的字典.
?表示普通的笛卡尔积. 例如{?l#3}表示生成三位小写字母的所有可能组合$表示贪婪模式, 例如{$l#3}表示 3 位小写字母的所有可能组合+2 位小写字母的所有可能组合+1 位小写字母的所有可能组合
掩码的定义参考了 hashcat, 但是并不完全相同. 目前可用的关键字如下表:
"l": Lowercase, // 26个小写字母
"u": Uppercase, // 26个大写字母
"w": Letter, // 52大写+小写字母
"d": Digit, // 数字0-9
"h": LowercaseHex, // 小写hex字符, 0-9 + a-f
"H": UppercaseHex, // 大写hex字符, 0-9 + A-F
"x": Hex, // 大写+小写hex字符, 0-9 + a-f + A-F
"p": Punctuation, // 特殊字符 !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~
"P": Printable, // 可见的ascii字符
"s": Whitespace, // 空字符 \t\n\r\x0b\x0c
支持通过数字表示命令行输入的字典序号, 例如
spray -u http://example.com -w '/{?0u#2}/{?01}' -d word0.txt -d word1.txt
其中{?0u#2}表示 word0.txt 的所有内容+所有大写字母笛卡尔积两次, {?01} 表示 word0.txt + word1.txt 的所有内容.
分隔符与转义符¶
|为分隔符, \ 为转义符. 可以通过这两个在原有的掩码类型上新增字段.
{?d|\l|\d#2} 表示为0-9加上l和d, 一共12个字符组成的字典的所有两位长度的字典组合.
关键字¶
关键字配置文件: https://github.com/chainreactors/templates/blob/master/zombie/keywords.yaml
{?u|@year|@month} 表示所有的大写字母与所有的年份和月份组成的字典.
关键字目前还在不断完善中, 欢迎提供需求.
基于规则的字典生成¶
实现 rule-base 的字典生成器同样编写了一门模板语言, 代码在 rule
规则语法请参考 hashcat_rule_base
目前除了 M(Memorize)的规则已经全部实现. 并且去掉了 hashcat 的一些限制, 比如最多支持 5 个规则, 字符串长度不能大于 10 等.
目前实现的规则如下表, 来自 hashcat 文档

目前支持的过滤规则如下表:

rule 理论上应该要与 hashcat 的 rule-base 结果完全一致, 但如果与 hashcat 的结果不一致, 请提交 issue.
这里有一些 hashcat 自带的规则示例, 但 hashcat 一般用来生成密码字典, 因此对于目录爆破的规则还需要重新积累.