| # | Mode |
|---|---|
| 0 | ευθεία |
| 1 | συνδυασμός |
| 3 | Brute-force |
| 6 | Υβριδική λίστα λέξεων + μάσκα |
| 7 | Υβριδική μάσκα + λίστα λέξεων |
Αυτή η λειτουργία επίθεσης είναι επίσης γνωστή ως "επίθεση λεξικού". Δεν υπάρχει τίποτα να πούμε, δεδομένου ενός λεξικού, το hashcat θα διαβάσει το περιεχόμενο του λεξικού γραμμή προς γραμμή, θα υπολογίσει την τιμή κατακερματισμού κάθε γραμμής και θα τη συγκρίνει με την τιμή κατακερματισμού στόχου.
Παράδειγμα:
hashcat -a 0 -m 400 example400.hash example.dict
Η Baidu μου είπε ότι ο συνδυασμός είναι ουσιαστικό, που σημαίνει: "συνδυασμός, ένωση, συνδυασμός κωδικών πρόσβασης, φόρμα". Αυτή η λειτουργία επίθεσης είναι στην πραγματικότητα πολύ απλή, δηλαδή συνδυάζοντας το περιεχόμενο δύο λεξικών κωδικών πρόσβασης. Η χρήση αυτής της λειτουργίας επίθεσης απαιτεί τον καθορισμό δύο λεξικών κωδικών πρόσβασης. Ας υποθέσουμε ότι έχουμε δύο λεξικά κωδικών πρόσβασης dict1.txt και dict2.txt, τα περιεχόμενα των οποίων είναι:
κυνήγι Κίτι Ουράνιο τόξο
και
Παρίσι rock
Τότε η εντολή:
hashcat -m 0 -a 1 hash.txt dict1.txt dict2.txt
Το λεξικό που στην πραγματικότητα δοκιμάστηκε είναι:
huntingparis Χάντινγκροκ kittyparis Γατάροκ ουράνιο τόξο Παρίσι Οι λέξεις στο rainbowrock
dict1.txt είναι στα αριστερά και οι λέξεις στο dict2.txt είναι στα δεξιά, συνολικά 3×2=6.
Οι παράμετροι που σχετίζονται με αυτό το μοτίβο είναι:
-j, --κανόνας-αριστερά Ο κανόνας μετά το -k, --rule-right
-j ενεργεί στα αριστερά και ο κανόνας μετά το -k ενεργεί στα δεξιά, όπως η προσθήκη της παραμέτρου -j '$- ', τότε το πραγματικό λεξικό που δοκιμάστηκε είναι:
hunting-paris κυνηγετικό βράχο kitty-paris kitty-rock βροχή-τόξοΠαρίσι rain-bowrock
Προσθήκη παραμέτρων -j '^!', Το πραγματικό λεξικό που δοκιμάστηκε είναι:
! κυνηγιοΠαρίσι ! Χάντινγκροκ ! kittyparis ! Κίττιροκ ! ουράνιο τόξο Παρίσι ! rainbowrock
Προσθέστε την παράμετρο -k '^>', τότε το πραγματικό λεξικό που δοκιμάστηκε είναι:
κυνήγι>Παρίσι κυνήγι>βράχος kitty>Παρίσι kitty>Βράχος βροχή>τόξοΠαρίσι rain>bowrock
Ποιος είναι ο κανόνας; Οι χρήσεις των "$" και "^" είναι παρόμοιες με τις κανονικές εκφράσεις, άρα είναι κανονικές; Στην πραγματικότητα, όχι, οι κανόνες του hashcat εφαρμόζονται μόνοι σας, κάτι που είναι ένα άλλο μεγάλο κομμάτι περιεχομένου Για λεπτομέρειες, ανατρέξτε στην επίθεση που βασίζεται σε κανόνες
. Δοκιμάστε διάφορους συνδυασμούς ενός δεδομένου συνόλου χαρακτήρων. Σύμφωνα με το επίσημο wiki του hashcat, αυτή η μέθοδος είναι ξεπερασμένη και έχει αντικατασταθεί πλήρως από το Mask-Attack, επομένως δεν υπάρχει έρευνα
Αυτή είναι μια σχετικά νέα μέθοδος επίθεσης, το παράδειγμα έχει ως εξής:
hashcat -a 3 -m 0 md5.hash ; Λ; Λ; Λ; Λ; l
Αν και σύμφωνα με τον πίνακα "Λειτουργίες επίθεσης", το -A 3 αντιστοιχεί σε ωμή βία, στην πραγματικότητα, το -A 3 χρησιμοποιεί επίθεση μάσκας. Η επίθεση μάσκας μπορεί να θεωρηθεί ως προηγμένη ωμή δύναμη. Η παράμετρος
-m χρησιμοποιείται για τον καθορισμό του τύπου συνάρτησης κατακερματισμού και η τιμή md5 αποθηκεύεται στο αρχείο md5.hash. Το κλειδί είναι η τελευταία συμβολοσειρά "? l? l? l? l? l? l? l", η οποία ονομάζεται μάσκα.
Μια μάσκα είναι μια συμβολοσειρά που αποτελείται από πολλά κράτη θέσης. Το "?l" είναι ένα κράτημα θέσης, όπου το "?" είναι μια λέξη-κλειδί, η οποία χρησιμοποιείται για την τροποποίηση του επόμενου "l" μαζί αντιπροσωπεύει ένα σύνολο χαρακτήρων "?u", "?d", "?h", "?h", "?s", "?a" και "?b", που αντιπροσωπεύουν το σύνολο χαρακτήρων όπως φαίνεται στον παρακάτω πίνακα.
| ? | Charset |
|---|---|
| l | abcdefghijklmnopqrstuvwxyz |
| u | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
| d | 0123456789 |
| h | 0123456789abcdef |
| h | 0123456789ABCDEF |
| s | ! "#$%&'()*+,-./:;<=>?@[\]^_`~{|} |
| a | ; Λ; Εσύ; Δ; s |
| b | 0 – 0xff |
Με αυτόν τον τρόπο, καταλαβαίνουμε, "?l ?l" είναι στην πραγματικότητα ισοδύναμο με το λεξικό κωδικών πρόσβασης:
aaaaa ΑΑΑΑΒ ... zzzzz
Με τον ίδιο τρόπο, το "?l?u?d" ισοδυναμεί με λεξικό κωδικού πρόσβασης:
aA0 ΑΑ1 ... ΒΑ0 ... zZ9
Το σύνολο χαρακτήρων στον παραπάνω πίνακα είναι ενσωματωμένο στο hashcat Μπορούμε επίσης να καθορίσουμε το σύνολο χαρακτήρων μόνοι μας:
--custom-charset1=σύνολο χαρακτήρων 1 --custom-charset2=σύνολο χαρακτήρων 2 --custom-charset3=σύνολο χαρακτήρων 3 --custom-charset4=Σύνολο χαρακτήρων 4
Παράμετρος –custom-charsetN μπορεί να συντομογραφηθεί ως -N, για παράδειγμα, το –custom-charset1 μπορεί να συντομογραφηθεί ως -1. Το σύνολο χαρακτήρων που καθορίζεται με -N καθορίζεται στη μάσκα με τη μορφή κράτησης θέσης "?N", όπως:
-1 abc123 ? 1? 1? 1
ισοδυναμεί με λεξικό κωδικού πρόσβασης:
aaa ΑΑΒ ... ΑΑ3 ... Εκτός από τη συμβολοσειρά που αντιπροσωπεύει το σύνολο χαρακτήρων, το 333
-N μπορεί επίσης να είναι ένα αρχείο που τελειώνει σε .hcchr και το σύνολο χαρακτήρων είναι αποθηκευμένο στο αρχείο. Το hashcat συνοδεύεται από πολλά αρχεία .hcchr, που βρίσκονται στον κατάλογο charsets/του πακέτου εγκατάστασης.
Το σύνολο χαρακτήρων που αντιπροσωπεύεται από το κράτημα θέσης "??" είναι το ίδιο το "?". Επιπλέον, όταν οι υπόλοιποι χαρακτήρες χρησιμοποιούνται ως κράτες θέσης, αντιπροσωπεύουν τον ίδιο τον χαρακτήρα. Για παράδειγμα, το "?lwerner?d" ισοδυναμεί με το λεξικό κωδικού πρόσβασης:
awerner0 awerner1 ... zwerner9
Με τις παραπάνω γνώσεις, είναι εύκολο να κατανοήσετε τη μάσκα. Μια μάσκα αποτελείται από διάφορα κράτη θέσης, καθένα από τα οποία είναι μια συλλογή χαρακτήρων και μια μάσκα είναι ένας συνδυασμός μεμονωμένων συλλογών χαρακτήρων κράτησης θέσης. Ο αριθμός των κράτησης θέσης είναι ίσος με το μήκος του κωδικού πρόσβασης. Ποια είναι τα οφέλη ενός τέτοιου σχεδιασμού σε σύγκριση με το απλό δίνοντας ένα σύνολο χαρακτήρων και το μήκος του κωδικού πρόσβασης;
Ας υποθέσουμε ότι γνωρίζουμε ότι ο κωδικός πρόσβασης κάποιου έχει συνολικά 7 ψηφία, το πρώτο ψηφίο είναι κεφαλαίο γράμμα, τα επόμενα 3 ψηφία είναι πεζά γράμματα και τα τελευταία 3 ψηφία είναι αριθμοί. Εάν πρόκειται για παραδοσιακό βίαιο πυρόλυμα, απαιτούνται σύνολα χαρακτήρων A-Z, A-Z και 0-9, συνολικά 62 χαρακτήρες, και απαιτούνται προσπάθειες έως και 62^7=3 521 614 606 208 φορές, που είναι επίπεδο τρισεκατομμυρίων. Όταν χρησιμοποιείτε μάσκα για να περιγράψετε αυτόν τον κωδικό πρόσβασης, είναι "\u\l\l\l\d\d\d", ο οποίος είναι εύκολος στον υπολογισμό Υπάρχουν συνολικά (26^4)×(10^3)=456 976000 δυνατότητες, που είναι δισεκατομμύρια επίπεδο, 4 τάξεις μεγέθους μικρότερο από την προηγούμενη μέθοδο.
Για να κάνουμε ένα βήμα πίσω, ακόμα κι αν δεν γνωρίζουμε την κατανομή των κωδικών πρόσβασης, είναι εύκολο να προσομοιώσουμε το αποτέλεσμα της παραδοσιακής βίαιης διάσπασης χρησιμοποιώντας τη μάσκα.
Το πρόβλημα τώρα είναι ότι η μάσκα είναι σταθερή, πόσα κράτη θέσης είναι γραμμένα νεκρά και τι πρέπει να κάνουμε αν δεν γνωρίζουμε το μήκος του κωδικού πρόσβασης; Δεν πειράζει αν ο κωδικός πρόσβασης είναι πολύ μεγάλος Εάν ο κωδικός πρόσβασης κάποιου άλλου έχει μόνο 3 ψηφία και έχουμε 4 κράτες θέσης και δεν μπορούμε να το λύσουμε, δεν θα ήταν μεγάλη απώλεια; Πρέπει να ξεκινήσουμε από το 1 και να γράψουμε όλες τις μάσκες κάθε μήκους; Πόσο ενοχλητικό είναι αυτό.
Υπάρχουν δύο λύσεις Η μία είναι να χρησιμοποιήσετε ένα αρχείο μάσκας, να γράψετε πολλές μάσκες σε ένα αρχείο και, στη συνέχεια, να καθορίσετε αυτό το αρχείο στη γραμμή εντολών. Σημειώστε ότι το αρχείο μάσκας πρέπει να τελειώνει με .hcmask.
Για παράδειγμα, το περιεχόμενο του test.hcmask είναι:
; Λ ? Λ; Λ ? Λ; Λ; Λ ? Λ; Λ; Λ; l
χρησιμοποιήστε το αρχείο με την ακόλουθη εντολή:
hashcat -m 0 -a 3 --show md5.hash test.hcmask
Μια άλλη λύση είναι να προσθέσετε την παράμετρο –increment, η οποία λέει στο hashcat, σύμφωνα με τη μάσκα που δώσαμε, ξεκινήστε με μια προσπάθεια κράτησης θέσης και δοκιμάστε δύο, τρία μέχρι το μήκος που δώσαμε. Για παράδειγμα, γράφουμε αυτό το κράτημα θέσης "abc" και στη συνέχεια υπολογίζουμε την τιμή md5 της ακόλουθης συμβολοσειράς:
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
Πριν από το ":" είναι η αρχική συμβολοσειρά για τον υπολογισμό της τιμής κατακερματισμού και μετά το ":" είναι η υπολογιζόμενη τιμή hasn. Αποθηκεύστε το παραπάνω περιεχόμενο στο αρχείο md5.hash και, στη συνέχεια, εκτελέστε την ακόλουθη εντολή:
hashcat -m 0 -a 3 --show --username md5.hash abc
Προσθήκη παραμέτρου –username είναι επειδή κάθε τιμή κατακερματισμού μας έχει μια αρχική συμβολοσειρά πριν από αυτήν την παράμετρο, το hashcat θα δείξει ότι η σωστή τιμή κατακερματισμού δεν έχει βρεθεί Με την προσθήκη αυτής της παραμέτρου, το hashcat θα πιστεύει ότι η συμβολοσειρά πριν από την τιμή κατακερματισμού είναι το όνομα χρήστη του ζεύγους τιμών κατακερματισμού, έτσι ώστε η τιμή κατακερματισμού να μπορεί να φορτωθεί ομαλά.
Το αποτέλεσμα της εκτέλεσης είναι ότι λύθηκε μόνο ένας κατακερματισμός:
900150983cd24fb0d6963f7d28e17f72:abc
Τώρα προσθέστε την παράμετρο –increment και εκτελέστε ξανά:
hashcat -m 0 -a 3 --show --increment --username md5.hash abc
Αυτή τη φορά, επιλύθηκαν δύο ακόμη κατακερματισμοί:
0cc175b9c0f1b6a831c399e269772661:a 187ef4436122d1cc2f40dc2b92f0eba0:ab
ορατό, παίζει ρόλο η –αύξηση. Αλλά ταυτόχρονα, γνωρίζουμε επίσης ότι με αυτήν την παράμετρο, το hashcat θα δοκιμάσει μόνο τα A, ab και abc με τη σειρά και δεν θα τακτοποιήσει και θα συνδυάσει τα κράτη θέσης χωρίς σειρά για να δοκιμάσει διάφορες δυνατότητες.
Η υβριδική επίθεση είναι παρόμοια με την επίθεση συνδυασμού συνδυάζει δύο λεξικά, ενώ η υβριδική επίθεση συνδυάζει ένα λεξικό και μια μάσκα.
Ας υποθέσουμε ότι έχουμε ήδη ένα λεξικό example.dict, το οποίο έχει ως εξής:
Γεια σας werner
τότε η εντολή:
hashcat -m 0 -a 6 md5.hash example.dict ; Δ; d
ισοδυναμεί με απλή χρήση του λεξικού:
hello00 Γεια σας01 ... Γεια σας99 werner00 werner01 ... werener99
τότε εντολή:
hashcat -m 0 -a 7 md5.hash ; Δ; dexample.dict
ισοδυναμεί με απλή χρήση λεξικού:
00Γεια σας 01Γεια σας ... 99Γεια σας 00Βέρνερ 01Βέρνερ ... 99werener