项目作者: giteshnxtlvl

项目描述 :
Wordlist & password generator
高级语言: Go
项目地址: git://github.com/giteshnxtlvl/cook.git
创建时间: 2020-11-10T14:42:07Z
项目社区:https://github.com/giteshnxtlvl/cook

开源协议:Other

下载


COOK

An overpower wordlist generator, splitter, merger, finder, saver, create words permutation and combinations, apply different encoding/decoding and everything you need.

Frustration killer! & Customizable!

Index

Installation

Use Go or download latest builds

  1. go install -v github.com/glitchedgitz/cook/v2/cmd/cook@latest

Configuration

From version v2.2 cook save cook-ingredients at $home/.config/cook/cook-ingredients

To change create a path variable name COOK=[YOUR PATH]

Basic

Without basics, everything is complex.

Ranges

Param Approach

Name them anything and use them to generate the pattern.
This will be more useful when you apply encoding column-wise using methods.

  1. cook -start intigriti,bugcrowd -sep _,- -end users.rar,secret.zip / start sep end

  1. Note: you must include parameter in the pattern, otherwise it will not print anything.

COOK’s Ingredients

Cook depends on cook-ingredients, which are .yaml files collections of wordsets, functions, ports, wordlists from assetnotes, seclist, fuzzdb, 15+ etc.

Categories

Category Description
lists Array of values to directly use when called out
files Array of urls
ports Ranges of numbers
raw-files Array of local files
functions Functions are used to generate patterns

Save wordlists/lists/chars everything in my.yaml

Functions

  1. cook -dob date[17,Sep,1994] elliot _,-, dob

Customize my.yaml

Edit my.yaml manually or use these commands.

▸ Add/Update

If keyword doesn’t exist it will create it. Otherwise it will update it and add the new value in the same variable.

  1. # Syntax
  2. cook add [keyword]=[value1, value2, ..., valueN] in [category]
  3. # Command
  4. cook add unique_name=word1,word2,word3 in lists

▸ Delete

  1. cook delete [keyword]

Local File / Fetch URL

use : after param name.

  1. cook -f: live.txt f
  1. cook -f: https://example.com/wordlist.txt f

Access Wordlists from databases

Cook has fetched multiple repositories and can directly use wordlist from these repos…

assetnotes, seclist, fuzzdb, etc.

Methods

Using methods you can encode, decode, reverse, split, sort, extract and can do much more…

Methods can be applied on final output or column-wise

  • -m/-method to apply methods on the final output
  • -mc/-methodcol to apply column-wise.
  • param.methodname apply to any parameter-wise, will example this param thing later.

Multiple Encoding

  • Overlapping Encodings:
    • Use dot .
    • md5.b64e.urle apply multiple methods one by one.
    • Output Logic:
      • Generated Pattern > md5 hashing > base 64 encoding > URL Encoding.
  • Different Encodings:
    • Use comma ,
    • md5,sha1,sha256 apply different encoding to the same generated pattern.
    • Output Logic:
      • Generated Pattern > md5 hashing
      • Generated Pattern > sha1 hashing
      • Generated Pattern > sha256 hashing

Break naming conventions 💫

Special focus on these 2 methods, these will be great help everytime you use any wordlist.

Smart Break -m smart

  1. cook adminNew,admin_new -m smart
  1. Output:
  2. admin
  3. New
  4. admin
  5. new

Smart Join -m smartjoin[<case>:<char>]

It breaks and join back with the supplied character.

  1. cook adminNew,admin-old -m smartjoin[:_]
  1. Output:
  2. admin_New
  3. admin_old

Apply Cases over separated

Here we applied camlecase

  1. cook suppose_this_is_long_text -m smartjoin[c:_]
  1. Output:
  2. suppose_This_Is_Long_Text

All methods cook help methods

  1. sort - Sort them
  2. sortu - Sort them with unique values only
  3. reverse - Reverse string
  4. leet - a->4, b->8, e->3 ...
  5. leet[0] or leet[1]
  6. smart - Separate words with naming convensions
  7. redirectUri, redirect_uri, redirect-uri -> [redirect, uri]
  8. smartjoin - This will split the words from naming convensions &
  9. param.smartjoin[c,_] (case, join)
  10. redirect-uri, redirectUri, redirect_uri -> redirect_Uri
  11. u upper - Uppercase
  12. l lower - Lowercase
  13. t title - Titlecase

String Operations

  1. split - split[char]
  2. splitindex - splitindex[char:index]
  3. replace - Replace All replace[this:tothis]

JSON

  1. json - Extract JSON field
  2. json[key] or json[key:subkey:sub-subkey]

Url Operations

  1. fb filebase - Extract filename from path or url
  2. s scheme - Extract http, https, gohper, ws, etc. from URL
  3. user - Extract username from url
  4. pass - Extract password from url
  5. h host - Extract host from url
  6. p port - Extract port from url
  7. ph path - Extract path from url
  8. f fragment - Extract fragment from url
  9. q query - Extract whole query from url
  10. k keys - Extract keys from url
  11. v values - Extract values from url
  12. d domain - Extract domain from url
  13. tld - Extract tld from url
  14. alldir - Extract all dirrectories from url's path
  15. sub subdomain - Extract subdomain from url
  16. allsubs - Extract subdomain from url

Encode/Decode

  1. b64e b64encode - Base64 encode
  2. b64d b64decode - Base64 decode
  3. charcode - Give charcode encoding
  4. - charcode[0]
  5. abc
  6. - charcode[1] with semicolon
  7. abc
  8. hexe hexencode - Hex string encode
  9. hexd hexdecode - Hex string decode
  10. jsone jsonescape - JSON escape
  11. jsonu jsonunescape - JSON unescape
  12. urle urlencode - URL encode reserved characters
  13. utf16 - UTF-16 encoder (Little Endian)
  14. utf16be - UTF-16 encoder (Big Endian)
  15. urld urldecode - URL decode
  16. urleall urlencodeall - URL encode all characters
  17. xmle xmlescape - XML escape
  18. xmlu xmlunescape - XML unescape
  19. unicodee unicodeencodeall - Unicode escape string encode (all characters)
  20. unicoded unicodedecode - Unicode escape string decode

HASHES

  1. md5 - MD5 sum
  2. sha1 - SHA1 checksum
  3. sha224 - SHA224 checksum
  4. sha256 - SHA256 checksum
  5. sha384 - SHA384 checksum
  6. sha512 - SHA512 checksum

Some Usecases Examples

Some general usecases to grasp understanding of cook.

▸ Sites using custom suffix/preffix?

▸ Join wordlists line-by-line

Use -append flag:

  1. cook -l: live.txt -p: payloads.txt l / p -append 2

  1. # Multiple columns
  2. cook col1 col2 col3 col4 col5 -append 2,5

Note: Sometime is confusing to find index of column, then use -col

▸ Print at every step

If you want to start printing data for each permuation, then use -min flag

Note: Sometime is confusing to find index of column, then use -col

Combine with tools

Generate pattern and combine with other tools using PIPE.

  1. cook [Generated Pattern] | [Any tool with pipe input]

▸ Basic Auth Fuzzing with FFUF

  1. cook usernames_list : passwords_list -m b64e | ffuf -u https://target.com -w - -H "Authorization: Basic FUZZ"

▸ Null Payload Fuzzing with FFUF

  1. cook https://target.com/**100 | ffuf -u FUZZ -w -

▸ Hidden Parameters with x8

  1. cook [generated output] | x8 -u https://target.com

▸ Live Top level domains with dnsx or httprobe

  1. cook example.com seclists-tlds.txt | dnsx -v

ULTIMATE USAGE

Too overpower? But everyday you came accross weird BB stuff, like a big json file from target? May be you want to extract, join, merge or whatever. You can use cook smartly as per your usecase.

Real life usage example:

As BBH, we came arross JSON file often. YOu may be you read find wordlist to save in your collection.

Let’s say you read this blog about IIS Shortname Vulnerabilities
https://blog.assetnote.io/2020/09/18/finding-hidden-files-folders-iis-bigquery/.

Here Assetnote shared BIG ZIP FILE, Now you need something that can save this file and you can recall it when you need.

Save it like this…, this will save file in my.yaml

  1. cook add shub_zip_files=[URL] in files

Or manually save in my.yaml,

  1. shub_zip_files : [https://storage.googleapis.com/zipfilesbq/zipfiles.json]

Note: cook already saved it in default wordlists, you can use cook shub_zip_files to access it

▸ File contains data like this, but this isn’t directly useful.

  1. {"repo_name":"cocowool/RoseCMS","ref":"refs/heads/1","path":"user_guide/_downloads/ELDocs.tmbundle.zip","mode":"33261","id":"f7a11b364ca918379b48ad525798148e7470b6b1"}
  2. {"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"}
  3. {"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"}
  4. {"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"}
  5. {"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"}
  6. {"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"}
  7. {"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"}
  8. ...

Let say you need to:
▸ Extract json field path
▸ extract filebase from path
▸ then spliting it based on naming conventions

Single line solution

▸ With cook not just we can extract it, we can extract filebase from path and sort unique, then use smartjoin to create diff permuataions.

  1. cook -z shub_zip_files z.json[path].fb.sortu.smartjoin[c:_]

And this is also how cook was born, while fuzzing IIS Shortnames and later on I added other features.

Repeat Operator * and **

  • Use * for horizontal repeating.
  • Use ** for vertical repeating.
  • And try this *10-1 or this *1-10.

Parsing Rules

Columns Separated by space
Values Separated by comma
Params You can give param any name, use - before anything to make it param -param value
Raw Strings Use ` before and after the string to stop cook’s parsing. Useful when you need to use any keyword as a word.
Pipe Input Take pipe input using - as value of any param.
File Input Use : after param name to take file input. cook -f: live.txt f
Functions Can be called using params only.
Methods Can be used on params or on final output

Flags

Flag Usage
-peek Peek the output using -peek 50 for first 50 lines
-a, -append Append to the previous lines, instead of permutations
-c, -col Print column numbers and there values
-conf, -config Config Information
-mc, -methodcol Apply methods column wise -mc 0:md5,b64e; 1:reverse
To all cols separate -mc md5,b64e
-m, -method Apply methods to final output
-h, -help Help
-min Minimum no of columns to print

Use as library

  1. COOK := New(&COOK{
  2. Pattern: "1-10 .example.com",
  3. })
  4. COOK.Generate()
  5. fmt.Printf("Generated list: %v", COOK.Final)

Search the cook-ingredients using library

  1. COOK := NewWithoutConfig()
  2. results := COOK.Search("api")
  3. fmt.Printf("Searched: %v", results)

Share your recipies and ingredients in cook-ingredients

  • Share your yaml file with community

Contribute

  • Use concurrency and make it faster
  • Autocomplete for shells
  • Make append work something like this cook file1 =/= file2, make sure chars directly work with all terminals.
  • Making raw string works like as it works in programming languages. Means better parser.
  • I don’t know, you might use your creativity and add some awesome features.
  • You can buy me a coffee