
Ein Wordlist-Framework, um Ihre Kinks mit Ihren Wortlisten zu erfüllen. Für Sicherheitsforscher, Bug Bounty und Hacker.
Ein übermächtiger Wordlist-Generator, -Splitter, -Merger, -Finder, -Saver, der Wörter-Permutationen und -Kombinationen erstellt, verschiedene Kodierungen/Dekodierungen anwendet und alles, was du brauchst.
Frustrationstöter! & Anpassbar!
* und **Nutze Go oder lade die neuesten Builds herunter
go install -v github.com/glitchedgitz/cook/v2/cmd/cook@latest
Ab Version v2.2 speichert cook cook-ingredients unter $home/.config/cook/cook-ingredients
Um das zu ändern, erstelle eine Pfad-Variable mit dem Namen
COOK=[DEIN_PFAD]
Ohne Grundlagen ist alles komplex.

Gib ihnen beliebige Namen und verwende sie, um das Muster zu erzeugen. Das wird noch nützlicher, wenn du Kodierungen spaltenweise mit Methoden anwendest.
cook -start intigriti,bugcrowd -sep _,- -end users.rar,secret.zip / start sep end
Hinweis: Du musst den Parameter im Muster angeben, sonst wird nichts ausgegeben.
Cook hängt von cook-ingredients ab, das sind .yaml-Dateien mit Sammlungen von Wörtern, Funktionen, Ports, Wordlists von assetnotes, seclist, fuzzdb, 15+ etc.
my.yaml speichern
cook -dob date[17,Sep,1994] elliot _,-, dob
my.yaml anpassenBearbeite my.yaml manuell oder verwende diese Befehle.
Wenn das keyword nicht existiert, wird es erstellt. Andernfalls wird es aktualisiert und der neue Wert in derselben Variable hinzugefügt.
# Syntax
cook add [keyword]=[wert1, wert2, ..., wertN] in [kategorie]
# Befehl
cook add unique_name=wort1,wort2,wort3 in lists
cook delete [keyword]
Verwende : nach dem Parameternamen.
cook -f: live.txt f
cook -f: https://example.com/wordlist.txt f
Cook hat mehrere Repositories abgerufen und kann Wordlists aus diesen Repos direkt verwenden...
assetnotes, seclist, fuzzdb, etc.
Mit Methoden kannst du kodieren, dekodieren, umkehren, teilen, sortieren, extrahieren und vieles mehr...
Methoden können auf die endgültige Ausgabe oder spaltenweise angewendet werden
-m/-method um Methoden auf die endgültige Ausgabe anzuwenden-mc/-methodcol um spaltenweise anzuwenden.param.methodenname auf einen beliebigen Parameter anwenden – dieses Parameter-Ding wird später erklärt.
.md5.b64e.urle wendet mehrere Methoden nacheinander an.Generiertes Muster > md5-Hash > Base64-Kodierung > URL-Kodierung.,md5,sha1,sha256 wendet unterschiedliche Kodierungen auf dasselbe generierte Muster an.Generiertes Muster > md5-HashGeneriertes Muster > sha1-HashGeneriertes Muster >
Besonderes Augenmerk auf diese beiden Methoden – sie werden jedes Mal eine große Hilfe sein, wenn du eine Wordlist verwendest.
-m smart▶ cook adminNew,admin_new -m smart
Ausgabe:
admin
New
admin
new
-m smartjoin[<case>:<char>]Es trennt und fügt mit dem angegebenen Zeichen wieder zusammen.
▶ cook adminNew,admin-old -m smartjoin[:_]
Ausgabe:
admin_New
admin_old
Groß-/Kleinschreibung auf getrennte Teile anwenden
Hier haben wir CamelCase angewendet.
▶ cook suppose_this_is_long_text -m smartjoin[c:_]
Ausgabe:
suppose_This_Is_Long_Text
cook help methodssort - Sortieren
sortu - Sortieren mit nur eindeutigen Werten
reverse - Zeichenkette umkehren
leet - a->4, b->8, e->3 ...
leet[0] or leet[1]
smart - Wörter nach Namenskonventionen trennen
redirectUri, redirect_uri, redirect-uri -> [redirect, uri]
smartjoin - Trennt Wörter nach Namenskonventionen &
param.smartjoin[c,_] (Groß-/Kleinschreibung, Trennzeichen)
redirect-uri, redirectUri, redirect_uri -> redirect_Uri
u upper - Großbuchstaben
l lower - Kleinbuchstaben
t title - Titel (erster Buchstabe groß)
split - split[zeichen]
splitindex - splitindex[zeichen:index]
replace - Alle ersetzen replace[dies:durchdas]
json - JSON-Feld extrahieren
json[schlüssel] or json[schlüssel:unterschlüssel:unter-unterschlüssel]
fb filebase - Dateinamen aus Pfad oder URL extrahieren
s scheme - http, https, gopher, ws, etc. aus URL extrahieren
user - Benutzernamen aus URL extrahieren
pass - Passwort aus URL extrahieren
h host - Host aus URL extrahieren
p port - Port aus URL extrahieren
ph path - Pfad aus URL extrahieren
f fragment - Fragment aus URL extrahieren
q query - gesamte Query aus URL extrahieren
k keys - Schlüssel aus URL extrahieren
v values - Werte aus URL extrahieren
d domain - Domain aus URL extrahieren
tld - TLD aus URL extrahieren
alldir - Alle Verzeichnisse aus dem URL-Pfad extrahieren
sub subdomain - Subdomain aus URL extrahieren
allsubs - Subdomain aus URL extrahieren
b64e b64encode - Base64-Kodierung
b64d b64decode - Base64-Dekodierung
charcode - Zeichencode-Kodierung
- charcode[0]
abc
- charcode[1] mit Semikolon
abc
hexe hexencode - Hex-String-Kodierung
hexd hexdecode - Hex-String-Dekodierung
jsone jsonescape - JSON-Escape
jsonu jsonunescape - JSON-Unescape
urle urlencode - URL-Kodierung reservierter Zeichen
utf16 - UTF-16-Kodierung (Little Endian)
utf16be - UTF-16-Kodierung (Big Endian)
urld urldecode - URL-Dekodierung
urleall urlencodeall - URL-Kodierung aller Zeichen
xmle xmlescape - XML-Escape
xmlu xmlunescape - XML-Unescape
unicodee unicodeencodeall - Unicode-Escape-String-Kodierung (alle Zeichen)
unicoded unicodedecode - Unicode-Escape-String-Dekodierung
md5 - MD5-Prüfsumme
sha1 - SHA1-Prüfsumme
sha224 - SHA224-Prüfsumme
sha256 - SHA256-Prüfsumme
sha384 - SHA384-Prüfsumme
sha512 - SHA512-Prüfsumme
Einige allgemeine Anwendungsfälle zum Verständnis von Cook.
Verwende das Flag -append:
cook -l: live.txt -p: payloads.txt l / p -append 2
# Mehrere Spalten
cook col1 col2 col3 col4 col5 -append 2,5
Hinweis: Manchmal ist es verwirrend, den Index einer Spalte zu finden, dann benutze -col
Wenn du die Daten für jede Permutation bereits ab einem bestimmten Punkt ausgeben möchtest, verwende das Flag -min
Hinweis: Manchmal ist es verwirrend, den Index einer Spalte zu finden, dann benutze -col
Erzeuge ein Muster und kombiniere es mit anderen Tools über PIPE.
cook [Generiertes Muster] | [Beliebiges Tool mit Pipe-Eingabe]
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 [generierte Ausgabe] | x8 -u https://target.com
cook example.com seclists-tlds.txt | dnsx -v
Zu übermächtig? Aber jeden Tag stößt du auf seltsame BB-Dinge, wie eine große JSON-Datei vom Ziel? Vielleicht möchtest du etwas extrahieren, zusammenführen, zusammenfassen oder sonst etwas. Du kannst Cook clever für deinen Anwendungsfall einsetzen.
Als BBH stoßen wir oft auf JSON-Dateien. Vielleicht liest du einen Blog und möchtest eine Wordlist in deiner Sammlung speichern.
Angenommen, du liest diesen Blog über IIS-Shortname-Schwachstellen: https://blog.assetnote.io/2020/09/18/finding-hidden-files-folders-iis-bigquery/.
Assetnote hat eine GROSSE ZIP-DATEI geteilt. Jetzt brauchst du etwas, das diese Datei speichern kann, und du kannst sie abrufen, wenn du sie brauchst.
Speichere sie so... das speichert die Datei in my.yaml
cook add shub_zip_files=[URL] in files
Oder speichere manuell in my.yaml,
shub_zip_files: [https://storage.googleapis.com/zipfilesbq/zipfiles.json]
Hinweis: Cook hat sie bereits in den Standard-Wordlists gespeichert, du kannst
cook shub_zip_filesverwenden, um darauf zuzugreifen
▸ Die Datei enthält Daten wie diese, aber das ist nicht direkt nützlich.
{"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"}
...
Angenommen, du musst:
▸ JSON-Feld path extrahieren
▸ filebase aus path extrahieren
▸ dann nach Namenskonventionen aufteilen
▸ Mit Cook können wir nicht nur extrahieren, sondern auch Filebase aus dem Pfad extrahieren, eindeutig sortieren und dann mit smartjoin verschiedene Permutationen erstellen.
cook -z shub_zip_files z.json[path].fb.sortu.smartjoin[c:_]
Und so wurde Cook auch geboren – beim Fuzzing von IIS-Shortnames, und später habe ich weitere Funktionen hinzugefügt.
* und *** für horizontale Wiederholung.** für vertikale Wiederholung.*10-1 oder *1-10 aus.
Du kannst Cook als Bibliothek in deinen Go-Projekten verwenden.
package main
import (
"fmt"
"github.com/glitchedgitz/cook/v2/pkg/cook"
)
func main() {
// Neue Cook-Instanz erstellen
cookInst := cook.New(&cook.COOK{
Pattern: []string{"a,b,c", "1,2,3"},
PrintResult: false, // Nicht auf stdout ausgeben
})
// Muster generieren
cookInst.Generate()
fmt.Println("Generierte Muster:", cookInst.Final)
}
Um mehrere Muster zu generieren, ohne jedes Mal Ressourcen neu zu initialisieren:
package main
import (
"fmt"
"github.com/glitchedgitz/cook/v2/pkg/cook"
)
func main() {
// Einen Generator erstellen, der gemeinsame Ressourcen einmal initialisiert
generator := cook.NewGenerator()
// Mehrere Muster effizient generieren
list1 := generator.Generate([]string{"a,b,c", "1,2,3"})
list2 := generator.Generate([]string{"admin", "password-2023"})
fmt.Println("Muster 1:", list1)
fmt.Println("Muster 2:", list2)
}
Der Generator unterstützt auch gleichzeitige Muster-Generierung:
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))
// Muster gleichzeitig generieren
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()
// Ergebnisse verwenden
for i, r := range results {
fmt.Printf("Muster %d erzeugte %d Ergebnisse\n", i, len(r))
}
}
Durchsuche die cook-ingredients mit der Bibliothek:
package main
import (
"fmt"
"github.com/glitchedgitz/cook/v2/pkg/cook"
)
func main() {
cookInst := cook.NewWithoutConfig()
results := cookInst.Search("api")
fmt.Printf("Durchsuchte API-Muster: %v\n", results)
}
cook datei1 =/= datei2, stelle sicher, dass Zeichen direkt mit allen Terminals funktionieren.| Kategorie | Beschreibung |
|---|
lists | Array von Werten, die direkt verwendet werden können |
files | Array von URLs |
ports | Zahlenbereiche |
raw-files | Array lokaler Dateien |
functions | Funktionen werden verwendet, um Muster zu erzeugen |
sha256-Hash| Spalten | Durch Leerzeichen getrennt |
| Werte | Durch Komma getrennt |
| Parameter | Du kannst jedem Parameter einen beliebigen Namen geben; verwende - vor etwas, um es zum Parameter zu machen -param wert |
| Rohe Zeichenketten | Verwende vor und nach der Zeichenkette, um Cooks Parsing zu stoppen. Nützlich, wenn du ein Schlüsselwort als Wort benötigst. |
| Pipe-Eingabe | Nimm Pipe-Eingabe mit - als Wert eines beliebigen Parameters entgegen. |
| Datei-Eingabe | Verwende : nach dem Parameternamen, um Datei-Eingabe zu nehmen. cook -f: live.txt f |
| Funktionen | Können nur über Parameter aufgerufen werden. |
| Methoden | Können auf Parametern oder auf der endgültigen Ausgabe verwendet werden. |
| Flag | Nutzung |
|---|
| -peek | Vorschau der Ausgabe mit -peek 50 für die ersten 50 Zeilen |
| -a, -append | An vorherige Zeilen anhängen, statt Permutationen |
| -c, -col | Spaltennummern und deren Werte anzeigen |
| -conf, -config | Konfigurationsinformationen |
| -mc, -methodcol | Methoden spaltenweise anwenden -mc 0:md5,b64e; 1:reverse Für alle Spalten getrennt -mc md5,b64e |
| -m, -method | Methoden auf die endgültige Ausgabe anwenden |
| -h, -help | Hilfe |
| -min | Minimale Anzahl von Spalten zum Ausgeben |