
outil pour générer des listes de mots ou étendre une liste existante à l'aide de mutations.
gorilla est l'outil ultime de listes de mots, regroupant de nombreuses fonctionnalités étonnantes telles que :
Avec Cargo de Rust installé, exécutez cargo install --git https://github.com/d4rckh/gorilla --branch main
Vous devriez maintenant pouvoir exécuter gorilla --help
cargo build --release
# the binary will be located in target/release folder
L'argument --from-pattern/-p est utilisé pour demander à gorilla de générer des mots de passe basés sur un motif.
Par exemple, la commande suivante affichera chaque mot contenant 5 lettres minuscules.
gorilla --from-pattern "{a-z}{a-z}{a-z}{a-z}{a-z}"
D'autres exemples de motifs sont administrator{0-9} (administrator0 -> administrator9) ; hello_world{a-z}{0-9} (hello_worlda0 -> hello_worldz9).
Si vous souhaitez enregistrer la sortie dans un fichier, vous pouvez utiliser l'argument --output-file/-o.

Gorilla prend désormais également en charge les jeux de caractères. Ils sont définis dans src/char_sets.rs. Voici quelques exemples de motifs qui les utilisent : {l} => a b c d ... z ; {u} => A B C D ... Z ; {d} => 1 2 3 4 ... 9 ; {s} => (espace) ! " # $ ... ~. Vous pouvez en combiner plusieurs, ainsi {luds} donnerait un jeu de caractères contenant tous les autres jeux de caractères décrits (#45).
Si vous utilisez une plage et que chaque extrémité comporte 1 caractère, vous effectuez une plage de caractères. Par exemple :
{a-z} ajoutera chaque caractère de l'alphabet, un à la fois : a, b, c, d, e, f, g,...., x, y et z ;{a-c} ajoutera uniquement a, b et c, un à la fois ;{0-9} ajoutera uniquement 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, un à la fois.
Si vous utilisez une plage et que l'une des extrémités comporte plus d'un caractère, chaque extrémité sera analysée comme un nombre non signé de 32 bits et donnera à la place une plage numérique. Par exemple :{2020-2026} ajoutera 2020, 2021, 2022, 2023, 2024, 2025 et 2026, un à la fois.{1-100} ajoutera les nombres de 1 à 100 (inclus), un à la fois.Expérimental : si l'intérieur de vos accolades contient une virgule, la chaîne sera divisée par celle-ci et chaque partie sera ajoutée, une à la fois. Par exemple, {Jan,Feb,Mar} ajoutera Jan, Feb et Mar, un à la fois.
Vous pouvez éventuellement lancer plusieurs threads de génération de motifs à l'aide du paramètre --pattern-threads. Je recommande de le définir sur le nombre maximal de threads disponibles sur votre ordinateur.
Grâce aux arguments de la ligne de commande, vous pouvez effectuer toutes les mutations prises en charge, mais vous êtes limité à un seul ensemble de mutations. Un ensemble de mutations est un ensemble de mutations appliquées à un mot. Via la CLI, les mutations sont fournies via l'argument --mutation/-m.
gorilla --from-pattern "administrator" --mutation "prepend:_"

En général, vous souhaiterez utiliser l'argument --from-file/-i plutôt que --from-pattern dans ce cas pour spécifier une liste de mots au lieu d'un seul mot, mais par souci de simplicité, j'utiliserai cela.
La commande ci-dessus prend 1 mot en entrée et affiche 1 mot : _administrator. Vous pouvez ajouter plusieurs mutations en utilisant le même paramètre.
gorilla --from-pattern "administrator" \
-m "prepend:_" \
-m "append:{0-9}"
Cette fois encore, elle prend 1 seul mot, mais en affichera 10 différents. L'ajout de la syntaxe {0-9} à prepend et append générera plusieurs mots. La commande ci-dessus génère les mots suivants.
_administrator0
_administrator1
_administrator2
[.. snip ..]
_administrator8
_administrator9
Si nous fournissions une liste de mots via le fichier -i, nous obtiendrions le nombre de mots de cette liste multiplié par 10.
Jusqu'à présent, nous n'avons appliqué qu'un seul ensemble de mutations. En général, vous souhaiterez en combiner plusieurs. Cela se fait via les fichiers YAML. Vous en spécifiez un avec l'argument --mutations-file/-f. Un exemple se trouve dans le fichier sets/simple.yml de ce dépôt et ressemble à ceci :
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

Chaque fichier de mutations doit avoir une valeur name et une valeur mutation_sets comme indiqué dans l'exemple. Les ensembles de mutations ci-dessus généreront, à partir d'un seul mot, 27 autres mots.
administrator
administrator
rotartsinimda
administrato
dministrator
ADMINISTRATOR
administrator0
[.. snip ..]
administrator9
administrator00
[.. snip ..]
administrator99
4dministr4t0r
Si vous souhaitez vérifier que votre fichier de mutations ne contient pas d'erreurs avant de l'utiliser, vous pouvez utiliser la syntaxe suivante pour l'analyser et afficher le résumé.
gorilla --mutations-file muts.yml
(Pour l'instant) vous ne pouvez extraire les mots que d'une page spécifique. Les balises style et script sont automatiquement supprimées.
Vous pouvez spécifier une page à l'aide de l'argument --from-website/-w. Par exemple
gorilla --from-website https://example.org/

La commande ci-dessus affichera chaque mot de ce site web. Vous pouvez ajouter d'autres arguments présentés précédemment, comme --mutations-file/-f, --mutation/-m et bien sûr --output-file/-o pour les enregistrer (au lieu de les afficher).
Vous pouvez appliquer un ensemble de mutations à des mots spécifiques qui satisfont certaines conditions. Cela n'a de sens que dans les fichiers YAML.
Le fichier de mutations suivant supprimera les mots qui ne contiennent pas la chaîne admin. Contrairement aux mutations précédentes, celle-ci peut supprimer des mots.
name: filtering_words
mutation_sets:
- [ "if_contains:admin" ]
Un autre exemple est le suivant, qui ajoutera un underscore uniquement aux mots de plus de 5 caractères.
name: conditional_mutation
mutation_sets:
- [ "if_length:>5", "append:_" ],
- [ "! if_length:>5" ]
Remarquez que nous avons dû ajouter un autre ensemble de mutations commençant par la version négative de la première mutation conditionnelle, car sinon les mots de moins de 6 caractères seraient supprimés.
gorilla prend en charge de nombreuses autres mutations et, comme l'outil est encore en développement, il serait très pénible d'en maintenir une liste ici. Si vous êtes curieux de connaître les autres mutations, vous pouvez consulter l'enum Action du fichier src/mutation.rs.
Les formats sont définis dans des ensembles de formatage via des fichiers YAML et sont fournis à gorilla via l'argument --from-formatting/-q. Actuellement, un seul ensemble de formatage a été créé, situé dans sets/formatting/basic_usernames.yml. Il ressemble (approximativement) à ceci.
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}" ]
Les champs requis sont name, fields et formatting_sets. La valeur fields correspond au profil de l'utilisateur et contient des informations utilisées ensuite dans les formatting_sets.
Si vous exécutez l'ensemble, vous serez invité à saisir chaque champ et les noms d'utilisateur seront générés.

note : ne rendez pas les mutations dans les ensembles de formatage trop complexes, elles s'exécuteront toutes sur un seul thread ! Combinez le fichier de formatage avec un fichier de mutations pour exécuter des mutations en parallèle. N'utilisez pas de motifs combinatoires dans les ensembles de mutations des ensembles de formatage.
astuce : vous pouvez utiliser les autres arguments normalement, comme
--mutations-file/-fpour générer de nouveaux mots via des mutations ou--output-file/-opour enregistrer les mots.
Chaque ensemble de formatage est un tableau de chaînes qui sont ensuite concaténées. Ainsi, ["{f_name}", "{l_name}"] équivaut à ["{f_name}{l_name}"]. Au lieu d'une chaîne, vous pouvez fournir un tableau, ce qui vous permet d'appliquer des mutations que vous avez déjà utilisées pour étendre des listes de mots.
- [ "{f_name}_", [ "{l_name}", [ reverse ] ] ]
Si f_name est joe et l_name est doe, le formatage résultant générera joe_eod. Les mutations utiles dans les ensembles de formatage sont remove_last_letter, remove_first_letter et 1st_letter.
Si vous souhaitez appliquer un ensemble de formatage à de nombreux profils utilisateur, vous pouvez utiliser l'argument --with-csv/-c pour fournir un fichier CSV. Pour l'ensemble de formatage basic_usernames, le CSV doit être formaté comme ceci :
f_name,l_name
joe,doe
james,smith
robert,smith

>NUMBER/<NUMBER/=NUMBER)