Skip to content

index

overview

repo: https://github.com/chainreactors/words

该库作为sprayzombie的基础能力的一部分, 是 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加上ld, 一共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 文档

image-20230129164920846

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

image-20230129165206761

rule 理论上应该要与 hashcat 的 rule-base 结果完全一致, 但如果与 hashcat 的结果不一致, 请提交 issue.

这里有一些 hashcat 自带的规则示例, 但 hashcat 一般用来生成密码字典, 因此对于目录爆破的规则还需要重新积累.