
Фреймворк для работы со списками слов, чтобы удовлетворить ваши причуды с вашими списками слов. Для исследователей безопасности, программ bug bounty и хакеров.
Мощный генератор списков слов, разделитель, объединитель, искатель, сохранитель, создание перестановок и комбинаций слов, применение различных кодировок/декодировок и всё, что вам нужно.
Убийца разочарований! И настраиваемый!
* и **Используйте Go или скачайте последние сборки
go install -v github.com/glitchedgitz/cook/v2/cmd/cook@latest
Начиная с версии v2.2 cook сохраняет cook-ingredients в $home/.config/cook/cook-ingredients
Чтобы изменить, создайте переменную пути с именем
COOK=[YOUR PATH]
Без основ всё сложно.

Дайте им любое имя и используйте для создания шаблона. Это будет полезнее при применении кодирования по столбцам с помощью методов.
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 [keyword]=[value1, value2, ..., valueN] in [category]
# Команда
cook add unique_name=word1,word2,word3 in lists
cook delete [keyword]
Используйте : после имени параметра.
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
Особое внимание этим двум методам; они будут очень полезны каждый раз, когда вы используете какой-либо список слов.
-m smart▶ cook adminNew,admin_new -m smart
Вывод:
admin
New
admin
new
-m smartjoin[<case>:<char>]Оно разделяет и соединяет обратно с указанным символом.
▶ cook adminNew,admin-old -m smartjoin[:_]
Вывод:
admin_New
admin_old
Применение регистров к разделённым словам
Здесь мы применили CamelCase
▶ 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] or 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[ключ] or json[ключ:подключ:под-подключ]
fb filebase - Извлечь имя файла из пути или URL
s scheme - Извлечь http, https, gohper, ws и т.д. из URL
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 - Извлечь TLD из URL
alldir - Извлечь все каталоги из пути URL
sub subdomain - Извлечь поддомен из URL
allsubs - Извлечь поддомены из URL
b64e b64encode - Кодировать в Base64
b64d b64decode - Декодировать из Base64
charcode - Дать кодировку charcode
- charcode[0]
abc
- charcode[1] с точкой с запятой
abc
hexe hexencode - Кодировать в hex-строку
hexd hexdecode - Декодировать из hex-строки
jsone jsonescape - Экранировать JSON
jsonu jsonunescape - Снять экранирование JSON
urle urlencode - URL-кодировать зарезервированные символы
utf16 - Кодировщик UTF-16 (Little Endian)
utf16be - Кодировщик UTF-16 (Big Endian)
urld urldecode - URL-декодировать
urleall urlencodeall - URL-кодировать все символы
xmle xmlescape - Экранировать XML
xmlu xmlunescape - Снять экранирование XML
unicodee unicodeencodeall - Кодировать строку в Unicode-escape (все символы)
unicoded unicodedecode - Декодировать из Unicode-escape
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 [Сгенерированный шаблон] | [Любой инструмент с вводом через pipe]
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 Shortname 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
▸ Извлечь filebase из path
▸ Затем разделить его на основе соглашений об именах
▸ С cook мы можем не только извлечь, но и извлечь filebase из path, отсортировать уникальные, затем использовать 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, // Не выводить в stdout
})
// Генерация шаблона
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 | Функции используются для генерации шаблонов |
Сгенерированный шаблон > хеширование sha256| Столбцы | Разделяются пробелом |
| Значения | Разделяются запятой |
| Параметры | Вы можете дать параметру любое имя; используйте - перед чем угодно, чтобы сделать его параметром -param значение |
| Сырые строки | Используйте ` до и после строки, чтобы остановить парсинг cook. Полезно, когда нужно использовать какое-либо ключевое слово как слово. |
| Ввод через pipe | Используйте - как значение любого параметра для ввода через pipe. |
| Файловый ввод | Используйте : после имени параметра для файлового ввода. 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 | Минимальное количество столбцов для вывода |