一个功能强大的词列表生成器、分割器、合并器、查找器、保存器,可创建单词排列与组合,应用不同的编码/解码,以及您所需的一切。
挫败感终结者!并且可定制!
使用 Go 或下载 最新构建
go install -v github.com/glitchedgitz/cook/v2/cmd/cook@latest
从版本 v2.2 开始,cook 将 cook-ingredients 保存在 $home/.config/cook/cook-ingredients
要更改,请创建一个路径变量
COOK=[您的路径]
没有基础,一切都很复杂。

为它们命名任意名称,并使用它们生成模式。 当您使用 方法 按列应用编码时,这将更加有用。
cook -start intigriti,bugcrowd -sep _,- -end users.rar,secret.zip / start sep end
注意:您必须在模式中包含参数,否则不会打印任何内容。
Cook 依赖于 cook-ingredients,这些是 .yaml 文件的集合,包含单词集、函数、端口、来自 assetnotes、seclist、fuzzdb 等的词列表,总共有 15+ 等。
my.yaml
cook -dob date[17,Sep,1994] elliot _,-, dob
my.yaml手动编辑 my.yaml 或使用以下命令。
如果 keyword 不存在,则会创建它;否则会更新它并将新值添加到同一个变量中。
# 语法
cook add [关键字]=[值1, 值2, ..., 值N] in [类别]
# 命令
cook add unique_name=word1,word2,word3 in lists
cook delete [关键字]
在参数名称后使用 :。
cook -f: live.txt f
cook -f: https://example.com/wordlist.txt f
Cook 已经获取了多个仓库,可以直接使用这些仓库中的词列表...
使用方法,您可以编码、解码、反转、分割、排序、提取,还可以做更多事情...
方法可以应用于最终输出或按列应用
-m/-method:将方法应用于最终输出-mc/-methodcol:按列应用。param.methodname:对任意参数应用,稍后会举例说明参数相关的内容。
.md5.b64e.urle 逐个应用多个方法。生成的模式 > md5 哈希 > base64 编码 > URL 编码,md5,sha1,sha256 对同一生成模式应用不同的编码。生成的模式 > md5 哈希生成的模式 > sha1 哈希生成的模式 > sha256 哈希
特别关注这两个方法,它们在您使用任何词列表时都会非常有用。
-m smart▶ cook adminNew,admin_new -m smart
输出:
admin
New
admin
new
-m smartjoin[<大小写>:<字符>]它先分割,然后用提供的字符重新合并。
▶ cook adminNew,admin-old -m smartjoin[:_]
输出:
admin_New
admin_old
对分割后的部分应用大小写
这里我们应用了驼峰式
▶ cook suppose_this_is_long_text -m smartjoin[c:_]
输出:
suppose_This_Is_Long_Text
cook help methodssort - 排序
sortu - 排序并只保留唯一值
reverse - 反转字符串
leet - a->4, b->8, e->3 ...
leet[0] 或 leet[1]
smart - 按命名惯例分割单词
redirectUri, redirect_uri, redirect-uri -> [redirect, uri]
smartjoin - 按命名惯例分割单词并
param.smartjoin[c,_] (大小写, 连接符)
redirect-uri, redirectUri, redirect_uri -> redirect_Uri
u upper - 大写
l lower - 小写
t title - 首字母大写
split - split[字符]
splitindex - splitindex[字符:索引]
replace - 全部替换 replace[原字符串:新字符串]
json - 提取 JSON 字段
json[键] 或 json[键:子键:子子键]
fb filebase - 从路径或 URL 中提取文件名
s scheme - 从 URL 中提取 http, https, gohper, ws 等
user - 从 URL 中提取用户名
pass - 从 URL 中提取密码
h host - 从 URL 中提取主机名
p port - 从 URL 中提取端口号
ph path - 从 URL 中提取路径
f fragment - 从 URL 中提取片段
q query - 从 URL 中提取整个查询字符串
k keys - 从 URL 中提取键
v values - 从 URL 中提取值
d domain - 从 URL 中提取域名
tld - 从 URL 中提取顶级域名
alldir - 从 URL 路径中提取所有目录
sub subdomain - 从 URL 中提取子域名
allsubs - 从 URL 中提取所有子域名
b64e b64encode - Base64 编码
b64d b64decode - Base64 解码
charcode - 给出字符编码
- charcode[0]
abc
- charcode[1] 带分号
abc
hexe hexencode - 十六进制字符串编码
hexd hexdecode - 十六进制字符串解码
jsone jsonescape - JSON 转义
jsonu jsonunescape - JSON 反转义
urle urlencode - URL 对保留字符编码
utf16 - UTF-16 编码器 (小端序)
utf16be - UTF-16 编码器 (大端序)
urld urldecode - URL 解码
urleall urlencodeall - URL 对所有字符编码
xmle xmlescape - XML 转义
xmlu xmlunescape - XML 反转义
unicodee unicodeencodeall - Unicode 转义字符串编码(所有字符)
unicoded unicodedecode - Unicode 转义字符串解码
md5 - MD5 散列
sha1 - SHA1 校验和
sha224 - SHA224 校验和
sha256 - SHA256 校验和
sha384 - SHA384 校验和
sha512 - SHA512 校验和
一些通用用例帮助理解 cook。
使用 -append 标志:
cook -l: live.txt -p: payloads.txt l / p -append 2
# 多列
cook col1 col2 col3 col4 col5 -append 2,5
注意:有时很难找到列的索引,此时请使用 -col
如果您想从每个排列开始打印数据,请使用 -min 标志
注意:有时很难找到列的索引,此时请使用 -col
生成模式并通过 PIPE 与其他工具结合。
cook [生成的模式] | [支持管道输入的任何工具]
cook usernames_list : passwords_list -m b64e | ffuf -u https://target.com -w - -H "Authorization: Basic FUZZ"
cook https://target.com/**100 | ffuf -u FUZZ -w -
cook [生成的输出] | x8 -u https://target.com
cook example.com seclists-tlds.txt | dnsx -v
功能太强大了?但每天您都会遇到奇怪的 BB 任务,比如目标的一个大 JSON 文件?也许您想提取、合并、合并或做其他操作。您可以根据自己的用例智能地使用 cook。
作为 BBH,我们经常遇到 JSON 文件。也许您可能读过如何查找词列表并将其保存到您的收藏中。
假设您阅读了这篇关于 IIS 短名称漏洞的博客文章: https://blog.assetnote.io/2020/09/18/finding-hidden-files-folders-iis-bigquery/
这里 Assetnote 分享了 大 ZIP 文件,现在您需要某种方式保存这个文件,并在需要时能快速访问。
像这样保存它...,这将在 my.yaml 中保存文件
cook add shub_zip_files=[URL] in files
或者手动保存到 my.yaml,
shub_zip_files: [https://storage.googleapis.com/zipfilesbq/zipfiles.json]
注意:cook 已经将其保存在默认词列表中,您可以使用
cook shub_zip_files访问它
▸ 文件数据如下,但这并不是直接有用的。
{"repo_name":"cocowool/RoseCMS","ref":"refs/heads/1","path":"user_guide/_downloads/ELDocs.tmbundle.zip","mode":"33261","id":"f7a11b364ca918379b48ad525798148e7470b6b1"}
{"repo_name":"xuguanfeng/practise","ref":"refs/heads/1","path":"node_modules/selenium-webdriver/node_modules/adm-zip/test/assets/fast.zip","mode":"33188","id":"f4ed17b98c9d7bcd21efc4523ce75fbe2b071d0a"}
{"repo_name":"xuguanfeng/practise","ref":"refs/heads/1","path":"node_modules/selenium-webdriver/node_modules/adm-zip/test/assets/store.zip","mode":"33188","id":"e2add30dc0e3129dc89e20a71abe7314052d0002"}
{"repo_name":"xuguanfeng/practise","ref":"refs/heads/1","path":"node_modules/selenium-webdriver/node_modules/adm-zip/test/assets/ultra.zip","mode":"33188","id":"86a8ec776107c075ce2c7f803472aa97dc25cbf7"}
{"repo_name":"xuguanfeng/practise","ref":"refs/heads/1","path":"node_modules/selenium-webdriver/node_modules/adm-zip/test/assets/normal.zip","mode":"33188","id":"b4602c94ee000ee54c71c9302b9db956b3fd9f0e"}
{"repo_name":"xuguanfeng/practise","ref":"refs/heads/1","path":"node_modules/selenium-webdriver/node_modules/adm-zip/test/assets/fastest.zip","mode":"33188","id":"f4ed17b98c9d7bcd21efc4523ce75fbe2b071d0a"}
{"repo_name":"xuguanfeng/practise","ref":"refs/heads/1","path":"node_modules/selenium-webdriver/node_modules/adm-zip/test/assets/maximum.zip","mode":"33188","id":"86a8ec776107c075ce2c7f803472aa97dc25cbf7"}
...
假设您需要:
▸ 提取 JSON 字段 path
▸ 从 path 中提取 filebase
▸ 然后基于 命名惯例 进行分割
▸ 使用 cook,我们不仅可以提取它,还可以从路径中提取文件基名并排序去重,然后使用 smartjoin 创建不同的排列方式。
cook -z shub_zip_files z.json[path].fb.sortu.smartjoin[c:_]
这也是 cook 的诞生过程,最初是为了模糊测试 IIS 短名称,后来我添加了其他功能。
* 和 *** 进行水平重复。** 进行垂直重复。*10-1 或 *1-10。
您可以在 Go 项目中将 Cook 作为库使用。
package main
import (
"fmt"
"github.com/glitchedgitz/cook/v2/pkg/cook"
)
func main() {
// 创建一个新的 cook 实例
cookInst := cook.New(&cook.COOK{
Pattern: []string{"a,b,c", "1,2,3"},
PrintResult: false, // 不打印到标准输出
})
// 生成模式
cookInst.Generate()
fmt.Println("生成的模式:", cookInst.Final)
}
无需每次都重新初始化资源即可生成多个模式:
package main
import (
"fmt"
"github.com/glitchedgitz/cook/v2/pkg/cook"
)
func main() {
// 创建一个生成器,一次初始化共享资源
generator := cook.NewGenerator()
// 高效地生成多个模式
list1 := generator.Generate([]string{"a,b,c", "1,2,3"})
list2 := generator.Generate([]string{"admin", "password-2023"})
fmt.Println("模式 1:", list1)
fmt.Println("模式 2:", list2)
}
生成器也支持并发模式生成:
package main
import (
"fmt"
"sync"
"github.com/glitchedgitz/cook/v2/pkg/cook"
)
func main() {
generator := cook.NewGenerator()
patterns := [][]string{
{"user-1-5", "pass-1-3"},
{"admin", "Admin-2023-2025"},
}
var wg sync.WaitGroup
results := make([][]string, len(patterns))
// 并发生成模式
for i, pattern := range patterns {
wg.Add(1)
go func(idx int, p []string) {
defer wg.Done()
results[idx] = generator.Generate(p)
}(i, pattern)
}
wg.Wait()
// 使用结果
for i, r := range results {
fmt.Printf("模式 %d 生成了 %d 个结果\n", i, len(r))
}
}
使用库搜索 cook-ingredients:
package main
import (
"fmt"
"github.com/glitchedgitz/cook/v2/pkg/cook"
)
func main() {
cookInst := cook.NewWithoutConfig()
results := cookInst.Search("api")
fmt.Printf("搜索到的 API 模式: %v\n", results)
}
cook file1 =/= file2 这样工作,确保字符能够直接在所有终端中使用| 类别 | 描述 |
|---|
lists | 直接使用的值数组 |
files | URL 数组 |
ports | 数字范围 |
raw-files | 本地文件数组 |
functions | 函数 用于生成模式 |
| 列 | 由空格分隔 |
| 值 | 由逗号分隔 |
| 参数 | 您可以给参数任意名称,在任何内容前使用 - 使其成为参数 -参数 值 |
| 原始字符串 | 在字符串前后使用 ` 来阻止 cook 的解析。当您需要将任何关键字用作单词时很有用。 |
| 管道输入 | 使用 - 作为任何参数的值来接收管道输入。 |
| 文件输入 | 在参数名称后使用 : 来接受文件输入。cook -f: live.txt f |
| 函数 | 只能通过参数调用。 |
| 方法 | 可以在参数上或最终输出上使用 |
| 标志 | 用法 |
|---|
| -peek | 使用 -peek 50 查看前 50 行的输出 |
| -a, -append | 追加到前面的行,而不是排列 |
| -c, -col | 打印列号及其值 |
| -conf, -config | 配置信息 |
| -mc, -methodcol | 按列应用方法 -mc 0:md5,b64e; 1:reverse 对所有列应用 -mc md5,b64e |
| -m, -method | 将方法应用于最终输出 |
| -h, -help | 帮助 |
| -min | 要打印的最小列数 |