| # | Mode |
|---|---|
| 0 | droit |
| 1 | combinaison |
| 3 | Brute-force |
| 6 | Hybrid Wordlist + Mask |
| 7 | Hybrid Mask + Wordlist |
Ce mode d'attaque est également connu sous le nom de" Dictionary Attack ". Il n'y a rien à dire, c'est juste que, étant donné un dictionnaire, hashcat lira le contenu du dictionnaire ligne par ligne, calculera la valeur de hachage de chaque ligne et la comparera à la valeur de hachage cible.
Exemple:
hashcat -a 0 -m 400 example400.hash example.dict
Baidu m'a dit que combinaison est un nom, signifiant: «combinaison; consortium; combinaison de mot de passe; salopette et sous-vêtements». Ce mode d'attaque est en fait très simple, il consiste à combiner le contenu de deux dictionnaires de mots de passe. L'utilisation de ce mode d'attaque nécessite la spécification de deux dictionnaires de mots de passe. Supposons que nous ayons deux dictionnaires de mots de passe dict1.txt et dict2.txt dont le contenu est:
chasse Chaton Arc-en-ciel
et
paris rock
alors la commande:
hashcat -m 0 -a 1 hash.txt dict1.txt dict2.txt
Le dictionnaire réellement essayé est:
huntingparis huntingrock kittyparis kittyrock rainbowparis rainbowrock
Les mots dans dict1.txt sont à gauche et les mots dans dict2.txt sont à droite, un total de 3×2=6.
Les paramètres associés à ce mode sont:
-j, - -rule-left -k, - -rule-right
-La règle après j agit sur le côté gauche, la règle après-k agit sur le côté droit, comme ajouter le paramètre-j' $-', alors le dictionnaire réellement essayé est:
chasse-paris Rocher de chasse kitty-paris kitty-rock rain-bowparis rain-bowrock
Ajouter le paramètre-j'^!', Alors le dictionnaire réellement essayé est:
! chasseparis ! huntingrock ! kittyparis ! kittyrock ! rainbowparis ! rainbowrock
ajoute le paramètre-k '^ >', alors le dictionnaire réel essayé est:
chasse > paris Chasse > rock kitty > paris kitty > rock pluie > bowparis rain > bowrock
Quelle est cette règle? "$" et "^" sont utilisés de manière similaire à celles des expressions régulières, alors sont-elles régulières? En fait, non, les règles de hashcat sont mises en œuvre par elles-mêmes, ce qui est une autre grande partie de contenu. Pour plus de détails, voir Attaque basée sur des règles
Essayez diverses combinaisons d'un ensemble de caractères donné. Selon le wiki officiel de hashcat, cette méthode est obsolète et a été entièrement remplacée par Mask-Attack, aucune recherche n'est donc menée,
Il s'agit d'une méthode d'attaque relativement nouvelle. L'exemple est le suivant:
hashcat -a 3 -m 0 md5.hash ? Moi? Moi? Moi? Moi? l
Bien que selon le tableau "Attack Modes", -a 3 corresponde à la force Brute, en réalité, -a 3 utilise l'attaque masquée. Mask Attack peut être considéré comme une force Brute avancée. Le paramètre
-m est utilisé pour spécifier le type de fonction hachage et la valeur md5 est stockée dans le fichier md5.hash. La clé est la dernière chaîne «? l? l? l? l? l? l». Une telle chaîne est appelée masque.
Un masque est une chaîne de caractères composée de plusieurs signes de place. "? l" est un espace remplacement, où "?" est un mot-clé, utilisé pour modifier le "l" suivant. "? l" ensemble représente un ensemble de caractères. En plus de "? l", il peut également y avoir "? u", "? d", "? h", "? h", "? s", "? a" et "? b" représentent l'ensemble de caractères comme indiqué dans le tableau suivant.
| ? | Charset |
|---|---|
| l | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
| u | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
| d | 0123456789 |
| h | 0123456789abcdef |
| h | 0123456789abcdef |
| s | ! "#$% & ' () * +, -. /:; < = >? @ [\] ^_` ~ {|} |
| a | ? Moi? Vous? d? s |
| b | 0 – 0xff |
Ainsi, nous comprenons que "? l? l? l? l? l" est en fait équivalent à un dictionnaire cryptographique:
aaaaa aaaab ... zzzzz
De la même manière, "? l? u? d" est équivalent à un dictionnaire cryptographique:
aA0 aA1 ... bA0 ... zZ9
L'ensemble de caractères dans le tableau ci-dessus est intégré à hashcat, nous pouvons également spécifier l'ensemble de caractères nous-mêmes:
- -custom-charset1= ensemble de caractères 1 - -custom-charset2= ensemble de caractères 2 - -custom-charset3= ensemble de caractères 3 - -custom-charset4= ensemble de caractères 4
Paramètre – custom-charsetN peut être abrégé en-n, par exemple – custom-charset1 peut être abrégé en-1. L'ensemble de caractères spécifié avec-n est spécifié sous la forme d'un signe de place "? N" dans le masque, par exemple:
-1 abc123 ? 1? 1? 1
est équivalent à un dictionnaire de mot de passe:
aaa ... aa3 ... 333
-N En plus de la chaîne représentant l'ensemble de caractères, il peut également être un fichier terminé par. hcchr, qui stocke l'ensemble de caractères. hashcat est livré avec de nombreux fichiers. hcchr, dans le répertoire charsets/du paquet d'installation.
L'ensemble de caractères représenté par le signe de place "??" est "?" lui-même. De plus, lorsque les autres caractères sont utilisés comme signes de place, ils représentent les caractères eux-mêmes. Par exemple, "? lwerner? d" est équivalent au dictionnaire de mot de passe:
awerner0 awerner1 ... zwerner9
Avec les connaissances ci-dessus, il est facile de comprendre le masque. Un masque se compose de plusieurs signes de place, chaque signe de place est un ensemble de caractères et un masque est une combinaison de chaque ensemble de caractères de signe de place. Le nombre de remplaçants est égal à la longueur du mot de passe. Quels sont les avantages d'une telle conception par rapport à simplement donner un ensemble de caractères et une longueur de mot de passe?
Supposons que nous connaissons le mot de passe de quelqu'un avec un total de 7 chiffres. Le premier chiffre est une lettre majuscule, les 3 chiffres suivants sont des lettres minuscules et les 3 derniers chiffres sont des chiffres. S'il s'agit d'un piratage brute force traditionnel, il nécessite des ensembles de caractères A-Z, A-Z et 0-9, avec un total de 62 caractères, et il faut essayer jusqu'à 62^7=3 521 614 606 208 fois, ce qui est au niveau d'un trillion. Utiliser un masque pour décrire ce mot de passe est "\u\l\l\l\d\d\d", qui est facile à calculer. Il y a un total de (26^4) × (10^3) =456 976 000 possibilités, ce qui est 100 millions de niveaux, soit 4 ordres de grandeur de moins que la méthode précédente.
Pour prendre un pas en arrière, même si nous ne connaissons pas la distribution des mots de passe, il est facile de simuler l'effet du brute force traditionnel en utilisant le masque.
La question maintenant est que le masque est fixe, combien d'espace de place y sont écrits morts, et que faire si nous ne connaissons pas la longueur du mot de passe. Ce n'est pas grave si le mot de passe est trop long. Si le mot de passe de quelqu'un n'a que 3 chiffres et que nous avons 4 espèces de place, et que nous ne pouvons pas le résoudre, ne serait-ce pas une perte? Devrions-nous commencer par 1 et écrire tous les masques de chaque longueur? Quelle gêne.
Il existe deux solutions. L'une consiste à utiliser le fichier masque, à écrire plusieurs masques dans un fichier, puis à spécifier ce fichier sur la ligne de commande. Notez que le fichier mask doit se terminer par. hcmask.
Par exemple, le contenu de test.hcmask est:
? l ? Moi? l ? Moi? Moi? l ? Moi? Moi? Moi? l
Utilisez ensuite le fichier avec la commande suivante:
hashcat -m 0 -a 3 - -show md5.hash test.hcmask
Une autre solution consiste à ajouter le paramètre – increment, ce paramètre indique à hashcat de suivre le masque que nous avons donné, d'essayer à partir d'un signe-place, puis d'essayer deux, trois jusqu'à la longueur que nous avons donnée. Par exemple, nous écrivons l'espace "abc" pour ceci, puis calculons la valeur md5 de la chaîne suivante:
A:0cc175b9c0f1b6a831c399e269772661 b:92eb5ffee6ae2fec3ad71c777531578f c:4a8a08f09d37b73795649038408b5f33 ab:187ef4436122d1cc2f40dc2b92f0eba0 ac:e2075474294983e013ee4dd2201c7a73 ba:07159c47ee1b19ae4fb9c40d480856c4 bc: 5360af35bde9ebd8f01f492dc059593c ca:5435c69ed3bcc5b2e4d580e393e373d3 cb:d0d7fdb6977b26929fb68c6083c0b439 abc: 900150983cd24fb0d6963f7d28e17f72 abc: 900150983cd24fb0d6963f7d28e17f72 bac:79ec16df80b57696a03bb364410061f3 bca:b64eab8ce39e013604e243089c687e4f cba: 3944b025c9ca7eec3154b44666ae04a0 cab:16ecfd64586ec6c1ab212762c2c38a90
":" est précédée par la chaîne d'origine pour laquelle la valeur hash doit être calculée, et ":" est suivie par la valeur hasn calculée. Enregistrez le contenu ci-dessus dans le fichier md5.hash, puis exécutez la commande suivante:
hashcat -m 0 -a 3 - -show - -username md5.hash abc
Ajouter le paramètre – username est parce qu'il y a une chaîne d'origine avant chacune de nos valeurs de hachage. Si ce paramètre n'est pas ajouté, hashcat affichera que la valeur de hachage correcte n'a pas été trouvée. Si ce paramètre est ajouté, hashcat pensera que la chaîne avant la valeur de hachage est le nom d'utilisateur pour lequel la valeur de hachage correspond, afin que la valeur de hachage puisse être chargée avec succès.
Le résultat de l'exécution est qu'un seul hash a été résolu:
900150983cd24fb0d6963f7d28e17f72:abc
Maintenant, ajoutez le paramètre – increment et exécutez à nouveau:
hashcat -m 0 -a 3 - -show - -increment - -username md5.hash abc
Cette fois, deux hash supplémentaires ont été résolus:
0cc175b9c0f1b6a831c399e269772661:a 187ef4436122d1cc2f40dc2b92f0eba0:ab
On voit que – increment joue un rôle. Mais en même temps, nous savons également qu'avec ce paramètre, hashcat n'essaiera que a, ab et abc dans l'ordre, et ne disposera pas et ne combinera pas les points de place dans un ordre hors ordre, essayant diverses possibilités.
L'attaque hybride est similaire à l'attaque combinateur. L'attaque combinateur combine deux dictionnaires, tandis que l'attaque hybride combine un dictionnaire et un masque. Les deux sont similaires.
Supposons que nous ayons déjà un dictionnaire example.dict qui se lit comme suit:
Bonjour werner
Puis la commande:
hashcat -m 0 -a 6 md5.hash example.dict ? d? d
équivaut à utiliser simplement un dictionnaire:
Bonjour Bonjour 01 ... Bonjour 99 werner00 werner01 ... werener99
Puis la commande:
hashcat -m 0 -a 7 md5.hash ? d? dexample.dict
Équivalent à utiliser simplement un dictionnaire:
00Bonjour 01 Bonjour ... 99Bonjour 00werner 01werner ... 99werener