
あなたのワードリストであなたのこだわりを満たすためのワードリストフレームワーク。セキュリティ研究者、バグバウンティハンター、ハッカーのために。
強力なワードリスト生成ツール。分割、結合、検索、保存、単語の順列・組み合わせ作成、様々なエンコード/デコードの適用など、必要なすべての機能を備えています。
フラストレーション解消ツール! カスタマイズ可能!
* と **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 に依存しています。これは、assetnotes、seclist、fuzzdb などからのワードセット、関数、ポート、ワードリストの .yaml ファイルのコレクションです。
my.yaml に保存
cook -dob date[17,Sep,1994] elliot _,-, dob
my.yaml のカスタマイズmy.yaml を手動で編集するか、以下のコマンドを使用してください。
キーワードが存在しない場合は作成されます。存在する場合は更新され、同じ変数に新しい値が追加されます。
# 構文
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 は複数のリポジトリからデータを取得しており、これらのリポジトリのワードリストを直接使用できます。
assetnotes、seclist、fuzzdb など。
メソッドを使用すると、エンコード、デコード、反転、分割、ソート、抽出など、さまざまな操作が可能です。
メソッドは最終出力または列ごとに適用できます。
-m/-method 最終出力にメソッドを適用-mc/-methodcol 列ごとに適用param.methodname 任意のパラメータに適用(このパラメータの詳細は後述)
. を使用md5.b64e.urle は複数のメソッドを順に適用します。生成パターン > md5 ハッシュ > base64 エンコード > URL エンコード, を使用md5,sha1,sha256 は同じ生成パターンに異なるエンコードを適用します。生成パターン > md5 ハッシュ生成パターン > sha1 ハッシュ生成パターン > sha256 ハッシュ
以下の2つのメソッドに特に注目してください。ワードリストを使用するたびに非常に役立ちます。
-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からTLDを抽出
alldir - URLのパスからすべてのディレクトリを抽出
sub subdomain - URLからサブドメインを抽出
allsubs - URLからサブドメインを抽出
b64e b64encode - Base64 エンコード
b64d b64decode - Base64 デコード
charcode - 文字コードエンコード
- charcode[0]
abc
- charcode[1] (セミコロンあり)
abc
hexe hexencode - 16進数文字列エンコード
hexd hexdecode - 16進数文字列デコード
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 を使用してください。
パターンを生成し、パイプで他のツールと組み合わせます。
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
強力すぎる? しかし、毎日奇妙なバグ報奨金のものに出くわします。例えば、ターゲットからの大きなJSONファイル? 抽出、結合、マージなど、必要なことを行いたいかもしれません。Cook を自分のユースケースに合わせてスマートに使用できます。
バグハンターとして、JSONファイルによく遭遇します。ワードリストを読んでコレクションに保存したいと思うかもしれません。
IIS Shortname 脆弱性に関するこのブログを読んだとします。 https://blog.assetnote.io/2020/09/18/finding-hidden-files-folders-iis-bigquery/。
ここで Assetnote は BIG ZIP FILE を共有しています。このファイルを保存し、必要なときに呼び出せるようにしたい場合、次のように保存します。これにより 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 Shortnames をファジングしているときに生まれ、後で他の機能を追加しました。
* と *** は水平方向の繰り返しに使用します。** は垂直方向の繰り返しに使用します。*10-1 または *1-10 も試してみてください。
Cook を Go プロジェクトのライブラリとして使用できます。
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 | 関数 はパターン生成に使用されます |
| 列 | スペースで区切る |
| 値 | カンマで区切る |
| パラメータ | 任意の名前を付けられます。何かの前に - を使用してパラメータにします -param value |
| 生の文字列 | 文字列の前後に ` を使用して、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 | 出力する最小列数 |