
Tool zum Generieren von Wortlisten oder zum Erweitern einer vorhandenen Liste mittels Mutationen.
gorilla ist das ultimative Wordlist-Tool, das eine Menge erstaunlicher Werkzeuge bietet, wie:
Wenn Rusts Cargo installiert ist, führe cargo install --git https://github.com/d4rckh/gorilla --branch main aus
Danach solltest du gorilla --help ausführen können.
cargo build --release
# the binary will be located in target/release folder
Das Argument --from-pattern/-p wird verwendet, um gorilla mitzuteilen, Passwörter basierend auf einem Muster zu berechnen.
Zum Beispiel gibt der folgende Befehl jedes einzelne Wort aus, das 5 Kleinbuchstaben enthält.
gorilla --from-pattern "{a-z}{a-z}{a-z}{a-z}{a-z}"
Weitere Beispiele für Muster sind administrator{0-9} (administrator0 -> administrator9); hello_world{a-z}{0-9} (hello_worlda0 -> hello_worldz9).
Wenn du die Ausgabe in einer Datei speichern möchtest, kannst du das Argument --output-file/-o verwenden.

Gorilla unterstützt jetzt auch Zeichensätze. Diese sind in src/char_sets.rs definiert. Hier sind einige Beispiele für Muster, die sie verwenden: {l} => a b c d ... z; {u} => A B C D ... Z; {d} => 1 2 3 4 ... 9; {s} => (Leerzeichen) ! " # $ ... ~. Du kannst mehrere davon kombinieren, sodass {luds} einen Zeichensatz ergibt, der alle anderen beschriebenen Zeichensätze enthält (#45).
Wenn du einen Bereich verwendest und jedes Ende 1 Zeichen hat, führst du einen Zeichenbereich aus. Zum Beispiel:
{a-z} führt dazu, dass jedes Zeichen des Alphabets einzeln hinzugefügt wird: a, b, c, d, e, f, g,...., x, y und z;{a-c} führt dazu, dass nur a, b und c einzeln hinzugefügt werden;{0-9} führt dazu, dass nur 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 jeweils einzeln hinzugefügt werden.
Wenn du einen Bereich verwendest und eines der Enden mehr als 1 Zeichen hat, wird jedes Ende als vorzeichenlose 32-Bit-Zahl geparst und stattdessen ein Zahlenbereich erzeugt. Zum Beispiel:{2020-2026} führt dazu, dass 2020, 2021, 2022, 2023, 2024, 2025 und 2026 einzeln hinzugefügt werden.{1-100} führt dazu, dass die Zahlen von 1 bis 100 (einschließlich) einzeln hinzugefügt werden.Experimentell: Wenn das Innere deiner Klammern ein Komma enthält, wird die Zeichenkette daran aufgeteilt und jeder Teil einzeln hinzugefügt. Zum Beispiel führt {Jan,Feb,Mar} dazu, dass Jan, Feb und Mar einzeln hinzugefügt werden.
Optional kannst du mehrere Muster-Threads über den Parameter --pattern-threads starten. Ich empfehle, diesen auf die maximale Anzahl an Threads zu setzen, die auf deinem Computer verfügbar sind.
Über die Befehlszeilenargumente kannst du jede unterstützte Mutation ausführen, bist jedoch auf nur einen Satz von Mutationen beschränkt. Ein Mutationssatz ist eine Menge von Mutationen, die auf ein Wort angewendet werden. Über die CLI werden Mutationen über das Argument --mutation/-m bereitgestellt.
gorilla --from-pattern "administrator" --mutation "prepend:_"

Normalerweise möchtest du in diesem Fall das Argument --from-file/-i anstelle von --from-pattern verwenden, um eine Wortliste statt eines einzelnen Worts anzugeben, aber der Einfachheit halber werde ich das verwenden.
Der obige Befehl nimmt 1 Wort entgegen und gibt 1 Wort aus: _administrator. Du kannst mit demselben Parameter mehrere Mutationen hinzufügen.
gorilla --from-pattern "administrator" \
-m "prepend:_" \
-m "append:{0-9}"
Dies nimmt erneut ein einzelnes Wort, gibt aber 10 verschiedene aus. Das Hinzufügen der {0-9}-Syntax zu prepend & append führt dazu, dass mehrere Wörter erzeugt werden. Der obige Befehl erzeugt die folgenden Wörter.
_administrator0
_administrator1
_administrator2
[.. snip ..]
_administrator8
_administrator9
Wenn wir über die -i-Datei eine Wortliste bereitstellen würden, bekämen wir die Anzahl der Wörter aus dieser Wortliste mal 10 zurück.
Bisher haben wir nur einen einzigen Mutationssatz angewendet. Normalerweise möchtest du mehrere davon kombinieren. Dies geschieht über die YAML-Dateien. Du gibst eine mithilfe des Arguments --mutations-file/-f an. Ein Beispiel befindet sich in der Datei sets/simple.yml in diesem Repository und sieht wie folgt aus:
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

Jede Mutationsdatei muss einen name- und einen mutation_sets-Wert haben, wie im Beispiel gezeigt. Die obigen Mutationssätze erzeugen aus einem einzelnen Wort 27 weitere Wörter.
administrator
administrator
rotartsinimda
administrato
dministrator
ADMINISTRATOR
administrator0
[.. snip ..]
administrator9
administrator00
[.. snip ..]
administrator99
4dministr4t0r
Wenn du deine Mutationsdatei vor der Verwendung auf Fehler überprüfen möchtest, kannst du die folgende Syntax verwenden, um die Zusammenfassung zu parsen und auszugeben.
gorilla --mutations-file muts.yml
(Derzeit) kannst du nur eine bestimmte Seite nach Wörtern scrappen. Style- und Script-Tags werden automatisch entfernt.
Du kannst eine Seite über das Argument --from-website/-w angeben. Zum Beispiel
gorilla --from-website https://example.org/

Der obige Befehl gibt jedes Wort von dieser Website aus. Du kannst die zuvor gezeigten anderen Argumente wie --mutations-file/-f, --mutation/-m und natürlich --output-file/-o hinzufügen, um sie zu speichern (anstatt sie auszugeben).
Du kannst einen Mutationssatz auf bestimmte Wörter anwenden, die bestimmte Bedingungen/eine bestimmte Bedingung erfüllen. Das ergibt nur in YAML-Dateien Sinn.
Die folgende Mutationsdatei entfernt Wörter, die die Zeichenkette admin nicht enthalten. Anders als die bisherigen Mutationen kann diese Wörter entfernen.
name: filtering_words
mutation_sets:
- [ "if_contains:admin" ]
Ein weiteres Beispiel ist das folgende, das nur Wörtern, die länger als 5 Zeichen sind, einen Unterstrich hinzufügt.
name: conditional_mutation
mutation_sets:
- [ "if_length:>5", "append:_" ],
- [ "! if_length:>5" ]
Beachte, dass wir einen weiteren Mutationssatz hinzufügen mussten, der mit der negierten Version der ersten if-Mutation beginnt, da andernfalls die Wörter, die kürzer als 6 Zeichen sind, entfernt würden.
gorilla unterstützt viele weitere Mutationen, und da sich das Tool in einer frühen Entwicklung befindet, wäre es sehr mühsam, hier eine Liste davon zu pflegen. Wenn du neugierig auf die anderen Mutationen bist, kannst du dir die Action-Enumeration aus der Datei src/mutation.rs ansehen.
Formate werden in Formatierungssätzen über YAML-Dateien definiert und über das Argument --from-formatting/-q an gorilla übergeben. Derzeit gibt es nur einen erstellten Formatierungssatz; er befindet sich unter sets/formatting/basic_usernames.yml. Und er sieht (ähnlich) wie folgt aus.
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}" ]
Die erforderlichen Felder sind name, fields und formatting_sets. Der fields-Wert ist das Profil des Benutzers und enthält Informationen, die später in den formatting_sets verwendet werden.
Wenn du den Satz ausführst, wirst du für jedes Feld zur Eingabe aufgefordert und die Benutzernamen werden erzeugt.

Hinweis: Mach die Mutationen in Formatierungssätzen nicht zu komplex, sie laufen alle single-threaded! Kombiniere die Formatierungsdatei mit einer Mutationsdatei, um parallele Mutationen auszuführen. Verwende keine kombinatorischen Muster in den Mutationssätzen von Formatierungssätzen.
Tipp: Du kannst die anderen Argumente ganz normal verwenden, wie
--mutations-file/-f, um über Mutationen neue Wörter zu erzeugen, oder--output-file/-o, um die Wörter zu speichern.
Jeder Formatierungssatz ist ein Array von Zeichenketten, die später angehängt werden. Also ist ["{f_name}", "{l_name}"] äquivalent zu ["{f_name}{l_name}"]. Anstelle einer Zeichenkette kannst du ein Array angeben; das erlaubt dir, Mutationen anzuwenden, die du zuvor zur Erweiterung von Wortlisten verwendet hast.
- [ "{f_name}_", [ "{l_name}", [ reverse ] ] ]
Wenn f_name joe und l_name doe ist, erzeugt die resultierende Formatierung joe_eod. Mutationen, die in Formatierungssätzen nützlich sind, sind remove_last_letter, remove_first_letter und 1st_letter.
Wenn du einen Formatierungssatz auf viele Benutzerprofile anwenden möchtest, kannst du das Argument --with-csv/-c verwenden, um eine CSV-Datei bereitzustellen. Für den Formatierungssatz basic_usernames sollte die CSV wie folgt formatiert sein:
f_name,l_name
joe,doe
james,smith
robert,smith

>NUMBER/<NUMBER/=NUMBER)