
ミューテーションを使用してワードリストを生成、または既存のワードリストを拡張するツール。
gorilla は、以下のような素晴らしいユーティリティを多数備えた、究極のワードリストツールです。
Rust の Cargo がインストールされていれば、cargo install --git https://github.com/d4rckh/gorilla --branch main を実行してください。
これで gorilla --help を実行できるようになるはずです。
cargo build --release
# バイナリは target/release フォルダ内に配置されます
--from-pattern/-p 引数は、パターンに基づいてパスワードを計算するよう gorilla に指示するために使用します。
例えば、次のコマンドは5文字の小文字を含むすべての単語を出力します。
gorilla --from-pattern "{a-z}{a-z}{a-z}{a-z}{a-z}"
パターンの他の例としては、administrator{0-9} (administrator0 -> administrator9)、hello_world{a-z}{0-9} (hello_worlda0 -> hello_worldz9) などがあります。
出力をファイルに保存したい場合は、--output-file/-o 引数を使用できます。

Gorilla は現在、文字セットにも対応しています。これらは src/char_sets.rs で定義されています。これらを使用するパターンの例をいくつか示します: {l} => a b c d ... z; {u} => A B C D ... Z; {d} => 1 2 3 4 ... 9; {s} => (空白) ! " # $ ... ~。これらは複数組み合わせることができるので、{luds} は、説明した他のすべての文字セットを含む文字セットになります (#45)。
範囲を使用し、両端が1文字の場合、それは文字範囲になります。例えば:
{a-z} は、アルファベットの各文字を一度に1つずつ追加します: a、b、c、d、e、f、g、....、x、y、z{a-c} は、一度に1つずつ a、b、c のみを追加します{0-9} は、一度に1つずつ 0、1、2、3、4、5、6、7、8、9 のみを追加します
範囲を使用し、どちらかの端が複数文字の場合、各端は符号なし32ビット数値として解析され、代わりに数値範囲になります。例えば:{2020-2026} は、一度に1つずつ 2020、2021、2022、2023、2024、2025、2026 を追加します{1-100} は、一度に1つずつ 1 から 100 (両端を含む) までの数値を追加します実験的: 括弧の中にカンマが含まれている場合、文字列はカンマで分割され、各部分が一度に1つずつ追加されます。例えば {Jan,Feb,Mar} は、Jan、Feb、Mar を一度に1つずつ追加します。
オプションで、--pattern-threads パラメータを使用して複数のパターンスレッドを生成できます。コンピュータで利用可能な最大スレッド数に設定することをお勧めします。
コマンドライン引数を使用すると、サポートされている任意のミューテーションを実行できますが、ミューテーションセットは1つだけに制限されます。ミューテーションセットとは、単語に適用されるミューテーションのセットです。CLI では、ミューテーションは --mutation/-m 引数を介して指定されます。
gorilla --from-pattern "administrator" --mutation "prepend:_"

通常は、この場合、単一の単語ではなくワードリストを指定するために --from-pattern の代わりに --from-file/-i 引数を使用したいところですが、物事を単純にするために、それを使用します。
上記のコマンドは1つの単語を受け取り、1つの単語 _administrator を出力します。同じパラメータを使用して複数のミューテーションを追加できます。
gorilla --from-pattern "administrator" \
-m "prepend:_" \
-m "append:{0-9}"
これも単一の単語を受け取りますが、10個の異なる単語を出力します。{0-9} 構文を prepend & append に追加すると、複数の単語が生成されます。上記のコマンドは次の単語を生成します。
_administrator0
_administrator1
_administrator2
[.. 中略 ..]
_administrator8
_administrator9
-i ファイルを介してワードリストを提供した場合、そのワードリストにあった単語数×10の単語が返されます。
これまでは、1つのミューテーションセットのみを適用しました。通常は、これらの複数を組み合わせたいでしょう。これは yaml ファイルを介して行われます。--mutations-file/-f 引数を使用して指定します。例はこのリポジトリの sets/simple.yml ファイルにあり、次のようになります:
name: simple
mutation_sets:
- [ nothing ] # => word
- [ reverse ] # => drow
- [ remove_last_letter ] # => wor
- [ remove_first_letter ] # => ord
- [ uppercase_all ] # => WORD
- [ "append:{0-9}" ] # => word1, word2, word3
- [ "2 append:{0-9}" ] # => word11, word22, word33
- [ "replace:o:0", "replace:a:4", "replace:e:3" ] # => w0rd, h3ll0

各ミューテーションファイルには、例に示すように name と mutation_sets の値が必要です。上記のミューテーションセットは、単一の単語から他の27個の単語を生成します。
administrator
administrator
rotartsinimda
administrato
dministrator
ADMINISTRATOR
administrator0
[.. 中略 ..]
administrator9
administrator00
[.. 中略 ..]
administrator99
4dministr4t0r
使用前にミューテーションファイルにエラーがないか確認したい場合は、次の構文を使用してサマリーを解析および出力できます。
gorilla --mutations-file muts.yml
(今のところ) 特定のページの単語のみをスクレイピングできます。スタイルタグとスクリプトタグは自動的に削除されます。
ページは --from-website/-w 引数を使用して指定できます。例えば
gorilla --from-website https://example.org/

上記のコマンドは、その Web サイトのすべての単語を出力します。前に示した他の引数、例えば --mutations-file/-f、--mutation/-m、そしてもちろん (出力する代わりに) 保存するための --output-file/-o を追加できます。
特定の条件を満たす特定の単語にミューテーションセットを適用できます。これは yaml ファイルでのみ意味を持ちます。
次のミューテーションファイルは、admin という文字列を含まない単語を削除します。以前のミューテーションとは異なり、これは単語を削除できます。
name: filtering_words
mutation_sets:
- [ "if_contains:admin" ]
もう1つの例は次のとおりで、5文字より長い単語にのみアンダースコアを追加します。
name: conditional_mutation
mutation_sets:
- [ "if_length:>5", "append:_" ],
- [ "! if_length:>5" ]
最初の if ミューテーションの否定バージョンで始まる別のミューテーションセットを追加する必要があったことに注意してください。そうしないと、6文字未満の単語が削除されてしまうためです。
gorilla は他の多くのミューテーションをサポートしていますが、このツールは開発初期段階にあるため、ここでそれらのリストを維持することは非常に困難です。他のミューテーションに興味がある場合は、src/mutation.rs ファイルの Action 列挙型を確認できます。
フォーマットは yaml ファイルを介してフォーマットセットで定義され、--from-formatting/-q 引数を介して gorilla に供給されます。現在、作成されているフォーマットセットは1つだけで、sets/formatting/basic_usernames.yml にあります。そして、それは次のようになります (似たようなもの)。
name: basic_usernames
fields:
- [ f_name ]
- [ l_name ]
formatting_sets:
- [ "{f_name}_{l_name}" ]
- [ "{l_name}{f_name}" ]
- [ ["{f_name}", [1st_letter]], "_{l_name}" ]
- [ ["{f_name}", [1st_letter]], "{l_name}" ]
必要なフィールドは name、fields、formatting_sets です。fields の値はユーザーのプロフィールであり、後で formatting_sets で使用される情報が含まれます。
セットを実行すると、各フィールドの入力を求められ、ユーザー名が生成されます。

注: フォーマットセット内のミューテーションを複雑にしすぎないでください。これらはすべてシングルスレッドで実行されます! 並列ミューテーションを実行するには、フォーマットファイルをミューテーションファイルと組み合わせてください。フォーマットセットのミューテーションセット内で組み合わせパターンを使用しないでください。
ヒント: 他の引数を通常どおり使用できます。例えば、
--mutations-file/-fでミューテーションによる新しい単語を生成したり、--output-file/-oで単語を保存したりできます。
各フォーマットセットは、後で追加される文字列の配列です。したがって、["{f_name}", "{l_name}"] は ["{f_name}{l_name}"] と同等です。文字列の代わりに配列を指定すると、以前にワードリストを拡張するために使用したミューテーションを適用できます。
- [ "{f_name}_", [ "{l_name}", [ reverse ] ] ]
f_name が joe で l_name が doe の場合、結果のフォーマットは joe_eod を生成します。フォーマットセットで役立つミューテーションは、remove_last_letter、remove_first_letter、1st_letter です。
フォーマットセットを多くのユーザープロフィールに適用したい場合は、--with-csv/-c 引数を使用して CSV ファイルを提供できます。basic_usernames フォーマットセットの場合、CSV は次のようにフォーマットする必要があります:
f_name,l_name
joe,doe
james,smith
robert,smith

>NUMBER/<NUMBER/=NUMBER)