| # | Mode |
|---|---|
| 0 | thẳng |
| 1 | Combination |
| 3 | Brute-force |
| 6 | Hybrid Wordlist + Mask |
| 7 | Hybrid Mask + Wordlist |
Chế độ tấn công này còn được gọi là" Tấn công từ điển ". Không có gì để nói, chỉ là cho một từ điển, hashcat sẽ đọc nội dung trong từ điển từng dòng, tính toán giá trị băm của mỗi dòng và so sánh với giá trị băm mục tiêu.
Ví dụ:
hashcat -a 0 -m 400 example400.hash example.dict
Baidu nói với tôi rằng kết hợp là một danh từ, có nghĩa là: "kết hợp; liên minh; kết hợp mật khẩu; quần lót". Chế độ tấn công này thực ra rất đơn giản, đó là kết hợp nội dung của hai từ điển mật khẩu. Sử dụng chế độ tấn công này đòi hỏi phải chỉ định hai từ điển mật khẩu không nhiều, không ít. Giả sử chúng ta có hai từ điển mật khẩu dict1.txt và dict2.txt, nội dung của chúng là:
săn bắn kitty Cầu vồng
và
paris rock
sau đó lệnh:
hashcat -m 0 -a 1 hash.txt dict1.txt dict2.txt
Thực sự đã thử từ điển là:
huntingparis Đá săn bắn Mèo mèo Paris Mèo mèo đá cầu vồng Paris rainbowrock
Các từ trong dict1.txt ở bên trái và các từ trong dict2.txt ở bên phải, tổng cộng 3×2=6.
Các tham số liên quan đến chế độ này là:
-j, - -rule-left -k, - -rule-right
-Quy tắc sau j hoạt động ở bên trái và quy tắc sau-k hoạt động ở bên phải, chẳng hạn như thêm tham số-j' $-', thì từ điển thực tế được thử là:
hunting-paris Săn đá kitty-paris Mèo-đá Mưa-BowParis rain-bowrock
Thêm tham số-j'^!', Sau đó từ điển thực sự được thử là:
! săn bắnParis ! Đá săn ! mèo con paris ! mèo đá ! Cầu vồng Paris ! rainbowrock
thêm tham số-k '^ >', sau đó từ điển thực tế được thử là:
săn bắn > paris Săn đá > Mèo con mèo paris kitty > rock Mưa > bowparis rain > bowrock
Quy tắc này là gì? Việc sử dụng "$" và "^" tương tự như các biểu thức chính quy, vậy chúng có đều không? Trên thực tế, không phải vậy. Các quy tắc của hashcat được tự thực hiện. Đây là một phần lớn nội dung khác. Để biết chi tiết, hãy xem Tấn công dựa trên quy tắc
Thử các kết hợp khác nhau của một tập ký tự nhất định. Theo wiki chính thức của hashcat, phương pháp này đã lỗi thời và được thay thế hoàn toàn bằng Mask-Attack nên không có nghiên cứu nào được thực hiện,
Đây là một phương pháp tấn công tương đối mới, ví dụ như sau:
hashcat -a 3 -m 0 md5.hash ? Tôi? Tôi? Tôi? Tôi? l
Mặc dù theo bảng "Chế độ tấn công", -A 3 tương ứng với Brute-force, nhưng thực tế, -A 3 sử dụng Mask Attack. Mask Attack có thể được coi là lực thô bạo nâng cao. Tham số
-m được sử dụng để chỉ định loại hàm băm và giá trị md5 được lưu trữ trong tệp md5.hash. Chìa khóa là chuỗi cuối cùng "? l? l? l? l? l? l". Chuỗi như vậy được gọi là mặt nạ.
Mặt nạ là một chuỗi bao gồm một số dấu chỗ giữ chỗ. "? l" là dấu chỗ chỗ, trong đó "?" là từ khóa, được sử dụng để sửa đổi "l" tiếp theo. "? l" cộng lại biểu thị một tập hợp ký tự. Ngoài "? l", nó cũng có thể có "? u", "? d", "? h", "? h", "? s", "? a" và "? b" đại diện cho tập hợp ký tự như trong bảng dưới đây.
| ? | Bộ ký tự |
|---|---|
| l | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
| u | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
| d | 0123456789 |
| h | 0123456789abcdef |
| h | 0123456789abcdef |
| s | ! "#$% & ' () * +, -. /:; < = >? @ [\] ^_` ~ {|} |
| a | ? Tôi? Bạn? d? s |
| b | 0 – 0xff |
Bằng cách này, chúng ta hiểu rằng "? l? l? l? l? l? l" thực ra tương đương với từ điển mật mã:
aaaaa aaaab ... zzzzz
Theo cách tương tự, "? l? u? d" tương đương với từ điển mật mã:
aA0 aA1 ... bA0 ... zZ9
Bộ ký tự trong bảng trên được tích hợp trong hashcat, chúng ta cũng có thể tự chỉ định bộ ký tự:
- -custom-charset1= bộ ký tự 1 - -custom-charset2= bộ ký tự 2 - -custom-charset3= bộ ký tự 3 - -custom-charset4= bộ ký tự 4
tham số – custom-charsetN có thể được viết tắt là-n, ví dụ – custom-charset1 có thể được viết tắt là-1. Tập ký tự được chỉ định bằng-n được chỉ định dưới dạng chỗ giữ chỗ "? N" trong Mặt nạ, chẳng hạn như:
-1 abc123 ? 1? 1? 1
tương đương với từ điển mật mã:
aaa aab ... aa3 ... Ngoài chuỗi đại diện cho tập ký tự sau 333
-N, nó cũng có thể là một tệp kết thúc bằng. hcchr và tập ký tự được lưu trữ trong tệp. hashcat đi kèm với nhiều tệp. hcchr trong thư mục charsets/của gói cài đặt.
Tập hợp các ký tự được đại diện bởi chỗ giữ chỗ "??" là chính "?". Ngoài ra, khi các ký tự còn lại được sử dụng làm ký tự giữ chỗ, chúng đại diện cho chính các ký tự. Ví dụ, "? lwerner? d" tương đương với từ điển mật khẩu:
awerner0 awerner1 ... zwerner9
Với những kiến thức trên, bạn sẽ dễ dàng hiểu Mặt nạ. Mặt nạ bao gồm một số ký tự giữ chỗ, mỗi ký tự giữ chỗ là một tập ký tự và mặt nạ là sự kết hợp của từng tập ký tự giữ chỗ. Số lượng chỗ giữ chỗ bằng độ dài của mật khẩu. Thiết kế này có lợi ích gì so với việc chỉ đơn giản đưa ra bộ ký tự và độ dài mật khẩu?
Giả sử chúng ta biết mật khẩu của ai đó có 7 chữ số, chữ số đầu tiên là chữ hoa, 3 chữ số tiếp theo là chữ nhỏ và 3 chữ số cuối cùng là số. Nếu đó là bẻ khóa brute force truyền thống, nó yêu cầu các tập ký tự A-Z, A-Z và 0-9, tổng cộng 62 ký tự và cần thử tối đa 62^7=3 521 614 606 208 lần, đó là mức nghìn tỷ. Sử dụng mặt nạ để mô tả mật khẩu này là "\u\l\l\l\d\d\d", dễ tính toán, có tổng cộng (26^4) × (10^3) =456 976.000 khả năng, đó là tỷ cấp, giảm 4 bậc lớn so với phương pháp trước.
Lùi lại một bước, ngay cả khi chúng ta không biết sự phân bố của mật khẩu, chúng ta có thể dễ dàng mô phỏng hiệu ứng của việc bẻ khóa brute force truyền thống bằng cách sử dụng mặt nạ.
Câu hỏi bây giờ là mặt nạ được cố định, có bao nhiêu chỗ giữ chỗ được ghi chết và chúng ta phải làm gì nếu không biết độ dài của mật khẩu. Mật khẩu quá dài cũng không sao, nếu mật khẩu của người khác chỉ có 3 chữ số và chúng ta có 4 chỗ giữ chỗ và không thể giải được thì chẳng phải là một thiệt hại lớn sao? Có nên bắt đầu từ 1 và viết lại tất cả các mặt nạ có độ dài không? Thật là rắc rối.
Có hai giải pháp, một là sử dụng tệp mask, viết nhiều mask vào một tệp, sau đó chỉ định tệp này ở dòng lệnh. Lưu ý rằng tệp mask cần kết thúc bằng. hcmask.
Ví dụ, nội dung của test.hcmask là:
? l ? Tôi? l ? Tôi? Tôi? l ? Tôi? Tôi? Tôi? l
sau đó sử dụng tệp với lệnh sau:
hashcat -m 0 -a 3 - -show md5.hash test.hcmask
Một giải pháp khác là thêm tham số – increment, tham số này cho hashcat biết, nhấn mặt nạ mà chúng tôi đã đưa ra, bắt đầu với một chỗ giữ chỗ và thử hai, ba, cho đến khi chúng tôi đưa ra độ dài. Ví dụ, chúng ta viết chỗ giữ chỗ "abc" cho điều này, sau đó tính giá trị md5 của chuỗi sau:
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
Trước ":" là chuỗi gốc mà giá trị hash được tính toán và sau ":" là giá trị hasn được tính toán. Lưu nội dung trên trong tệp md5.hash, sau đó chạy lệnh sau:
hashcat -m 0 -a 3 - -show - -username md5.hash abc
Thêm tham số – username là do chúng tôi có chuỗi gốc trước mỗi giá trị băm. Nếu tham số này không được thêm vào, hashcat sẽ hiển thị rằng không tìm thấy giá trị băm chính xác. Thêm tham số này, hashcat sẽ nghĩ rằng chuỗi trước giá trị băm là tên người dùng của giá trị băm, để giá trị băm có thể được tải thành công.
Kết quả chạy là chỉ có một hash được giải quyết:
900150983cd24fb0d6963f7d28e17f72:abc
Bây giờ thêm tham số – increment và chạy lại:
hashcat -m 0 -a 3 - -show - -increment - -username md5.hash abc
Lần này, hai băm khác đã được giải quyết:
0cc175b9c0f1b6a831c399e269772661:a 187ef4436122d1cc2f40dc2b92f0eba0:ab
Có thể thấy, – increment đóng vai trò. Nhưng đồng thời, chúng ta cũng biết rằng với tham số này, hashcat sẽ chỉ thử a, ab và abc theo thứ tự, chứ không sắp xếp và kết hợp các dấu chỗ chỗ trống theo thứ tự và thử nhiều khả năng khác nhau.
Tấn công lai tương tự như Tấn công Combinator kết hợp hai từ điển, trong khi Tấn công lai kết hợp một từ điển và một mặt nạ. Cả hai đều giống nhau. Giả sử chúng ta đã có một từ điển example.dict với nội dung như sau:
Xin chào werner
Sau đó lệnh:
hashcat -m 0 -a 6 md5.hash example.dict ? d? d
tương đương với việc sử dụng từ điển đơn giản:
hello00 Xin chào 01 ... Xin chào 99 werner00 werner01 ... werener99
Sau đó lệnh:
hashcat -m 0 -a 7 md5.hash ? d? dexample.dict
Tương đương với việc chỉ sử dụng từ điển:
00hello Xin chào. ... Xin chào. 00werner 01werner ... 99werener