| # | Mode |
|---|---|
| 0 | Straight |
| 1 | Combination |
| 3 | Brute-force |
| 6 | Hybrid Wordlist + Mask |
| 7 | Hybrid Mask + Wordlist |
โหมดการโจมตีนี้เรียกอีกอย่างว่า "การโจมตีพจนานุกรม" ไม่มีอะไรจะพูด เพียงแต่ว่าเมื่อได้รับพจนานุกรม 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 ฮันติงร็อค คิวตี้ปารีส คิวตี้ร็อค เรนโบว์ปารีส rainbowrock
คำใน dict1.txt อยู่ทางซ้าย และคำใน dict2.txt อยู่ทางขวา รวมเป็น 3×2=6
พารามิเตอร์ที่เกี่ยวข้องกับโหมดนี้คือ:
-j, --rule-left กฎหลัง -k, --rule-right
-j จะดำเนินการทางด้านซ้าย และกฎหลัง -k จะดำเนินการทางด้านขวา เช่น การเพิ่มพารามิเตอร์ -j '$- ' จากนั้นพจนานุกรมที่ลองใช้จริงคือ:
การล่าสัตว์-ปารีส หินล่า คิตตี้-ปารีส คิตตี้ร็อก ฝนโบว์ปารีส rain-bowrock
เพิ่มพารามิเตอร์ -j '^!', พจนานุกรมจริงที่ฉันลองคือ:
! การล่าสัตว์Paris ! ฮันติงร็อค ! คิตตี้ปารีส ! คิตตี้ร็อค ! เรนโบว์ปารีส ! rainbowrock
เพิ่มพารามิเตอร์ -k '^>' จากนั้นพจนานุกรมจริงที่ลองคือ:
hunting>paris ล่า>หิน คิตตี้ ปารีส คิตตี้ ร็อค ฝน>โบวปารีส rain>bowrock
กฎนี้คืออะไร? การใช้ "$" และ "^" คล้ายกับนิพจน์ทั่วไป ดังนั้นจึงเป็นนิพจน์ทั่วไปหรือไม่? อันที่จริง ไม่ กฎของ hashcat ถูกนำไปใช้ด้วยตัวเอง ซึ่งเป็นเนื้อหาชิ้นใหญ่อีกชิ้นหนึ่ง สำหรับรายละเอียด โปรดดูที่ Rule-based Attack
เพื่อลองชุดอักขระที่กำหนด ชุดค่าผสมต่างๆ ตามวิกิอย่างเป็นทางการของ hashcat วิธีการนี้ล้าสมัยและถูกแทนที่ด้วยการโจมตีด้วยหน้ากากในทุกด้าน ดังนั้นจึงไม่มีการวิจัย
นี่เป็นวิธีการโจมตีที่ค่อนข้างใหม่ ตัวอย่างมีดังนี้:
hashcat -a 3 -m 0 md5.hash ? ล? ล? ล? ล? l
แม้ว่าตามตาราง "โหมดการโจมตี" -A 3 สอดคล้องกับ Brute-force แต่ในความเป็นจริง -A 3 ใช้การโจมตีแบบหน้ากาก การโจมตีด้วยหน้ากากถือได้ว่าเป็น Brute-force ขั้นสูง พารามิเตอร์
-m ใช้เพื่อระบุประเภทฟังก์ชันแฮช และค่า md5 จะถูกเก็บไว้ในไฟล์ md5.hash กุญแจสำคัญคือสตริงสุดท้าย "?l?l?l?l?l?l?l" สตริงดังกล่าวเรียกว่าหน้ากาก
หน้ากากคือสตริงที่ประกอบด้วยตัวยึดตำแหน่งหลายตัว "?l" เป็นตัวแทน โดยที่ "?" เป็นคำสำคัญที่ใช้เพื่อแก้ไข "l" ที่ตามมา "?l" รวมกันเพื่อแสดงถึงชุดอักขระ นอกเหนือจาก "?l" แล้ว ยังสามารถมี "?u", "?d", "?h", "?h", "?s", "?a" และ "?b" ซึ่งแสดงชุดอักขระดังแสดงในตารางด้านล่าง
| ? | ชุดอักขระ |
|---|---|
| l | abcdefghijklmnopqrstuvwxyz |
| u | abcdefghijklmnopqrstuvwxyz |
| d | 0123456789 |
| H | 0123456789abcdef |
| H | 0123456789abcdef |
| s | ! "#$%&'()*+,-./:;<=>?@[\]^_`~{|} |
| a | ? ล? คุณ? ง? s |
| b | 0 – 0xff |
ด้วยวิธีนี้ เราจะเข้าใจว่า "?l? l?l" จริงๆ แล้วเทียบเท่ากับพจนานุกรมรหัสผ่าน:
aaaaa อาอาบ ... zzzzz
ในทำนองเดียวกัน "?l?u?d" เทียบเท่ากับพจนานุกรมรหัสผ่าน:
aA0 aA1 ... บา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 aab ... aa3 ... 333
-N นอกเหนือจากสตริงที่แสดงถึงชุดอักขระแล้ว ยังสามารถเป็นไฟล์ที่ลงท้ายด้วย .hcchr และไฟล์จะจัดเก็บชุดอักขระ hashcat มาพร้อมกับไฟล์ .hcchr จำนวนมากในชุดอักขระ/ไดเร็กทอรีของแพ็คเกจการติดตั้ง
ชุดของอักขระที่แสดงโดยตัวยึดตำแหน่ง "??" คือ "?" เอง นอกจากนี้ เมื่อใช้อักขระที่เหลือเป็นตัวแทน อักขระเหล่านี้จะแสดงถึงตัวอักขระเอง ตัวอย่างเช่น "?lwerner?d" เทียบเท่ากับพจนานุกรมรหัสผ่าน:
awerner0 อาเวอร์เนอร์1 ... 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 976,000 ซึ่งเป็นระดับ 100 ล้าน ซึ่งน้อยกว่าวิธีก่อนหน้า 4 ลำดับ
ย้อนกลับไป แม้ว่าเราจะไม่ทราบการกระจายรหัสผ่าน แต่ก็สามารถจำลองเอฟเฟกต์ของการแคร็กแบบรุนแรงแบบดั้งเดิมได้อย่างง่ายดายโดยใช้หน้ากาก
ปัญหาตอนนี้คือ mask ได้รับการแก้ไขแล้ว มีตัวแทนกี่ตัวที่เขียนตายแล้ว เราควรทำอย่างไรหากเราไม่ทราบความยาวของรหัสผ่าน ไม่เป็นไรถ้ารหัสผ่านยาวเกินไป ถ้ารหัสผ่านของคนอื่นมีเพียง 3 หลัก และตัวแทนของเรามี 4 ตัว และเราไม่สามารถแก้มันได้ มันจะไม่สูญเสียอย่างมากหรือ? จำเป็นต้องเริ่มจาก 1 และเขียนหน้ากากทุกความยาวหรือไม่? นั่นลำบากแค่ไหน
มีวิธีแก้ปัญหาสองวิธี วิธีแรกคือใช้ไฟล์ mask เขียน mask หลายรายการในไฟล์เดียว จากนั้นระบุไฟล์นี้ในบรรทัดคำสั่ง โปรดทราบว่าไฟล์หน้ากากจะต้องลงท้ายด้วย .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 บีซี:5360af35bde9ebd8f01f492dc059593c ca:5435c69ed3bcc5b2e4d580e393e373d3 หมายเลขรุ่น: d0d7fdb6977b26929fb68c6083c0b439 abc:900150983cd24fb0d6963f7d28e17f72 abc:900150983cd24fb0d6963f7d28e17f72 bac:79ec16df80b57696a03bb364410061f3 bca:b64eab8ce39e013604e243089c687e4f cba:3944b025c9ca7eec3154b44666ae04a0 cab:16ecfd64586ec6c1ab212762c2c38a90
ก่อน ":" คือสตริงดั้งเดิมที่จะคำนวณค่าแฮช และหลัง ":" คือค่า hasn ที่คำนวณได้ บันทึกเนื้อหาข้างต้นในไฟล์ md5.hash จากนั้นเรียกใช้คำสั่งต่อไปนี้:
hashcat -m 0 -a 3 --แสดง --ชื่อผู้ใช้ md5.hash abc
การเพิ่มพารามิเตอร์ –ชื่อผู้ใช้เป็นเพราะค่าแฮชแต่ละค่าของเรามีสตริงดั้งเดิมอยู่ข้างหน้า หากเราไม่เพิ่มพารามิเตอร์นี้ hashcat จะแสดงว่าไม่พบค่าแฮชที่ถูกต้อง เมื่อเพิ่มพารามิเตอร์นี้ hashcat จะคิดว่าสตริงก่อนค่าแฮชเป็นชื่อผู้ใช้ของคู่ค่าแฮช เพื่อให้สามารถโหลดค่าแฮชได้อย่างราบรื่น
ผลลัพธ์ของการรันคือการแก้ไขแฮชเพียงแฮชเดียว:
900150983cd24fb0d6963f7d28e17f72:abc
ตอนนี้เพิ่มพารามิเตอร์ –increment แล้วรันอีกครั้ง:
hashcat -m 0 -a 3 --show --increment --username md5.hash abc
คราวนี้ มีการแก้ไขแฮชอีกสองแฮช:
0cc175b9c0f1b6a831c399e269772661:a 187ef4436122d1cc2f40dc2b92f0eba0:ab
มองเห็นได้ –increment มีบทบาท แต่ในขณะเดียวกัน เราก็รู้ด้วยว่าด้วยพารามิเตอร์นี้ hashcat จะลองเฉพาะ A, ab และ abc ตามลำดับเท่านั้น และจะไม่จัดเรียงและรวมตัวยึดตำแหน่งตามลำดับและลองใช้ความเป็นไปได้ต่างๆ
การโจมตีแบบไฮบริดนั้นคล้ายกับการโจมตีแบบผสมผสาน การโจมตีแบบผสมผสานคือการผสมผสานพจนานุกรมสองตัว ในขณะที่การโจมตีแบบไฮบริดคือการผสมผสานพจนานุกรมและหน้ากาก ทั้งสองมีความคล้ายคลึงกัน
สมมติว่าเรามีพจนานุกรม example.dict อยู่แล้ว ซึ่งมีเนื้อหาดังนี้
สวัสดีครับ werner
จากนั้นคำสั่ง:
hashcat -m 0 -a 6 md5.hash example.dict ? ง? d
เทียบเท่ากับการใช้พจนานุกรม:
สวัสดี00 สวัสดี01 ... สวัสดีค่ะ99 เวอร์เนอร์00 เวอร์เนอร์01 ... werener99
จากนั้นคำสั่ง:
hashcat -m 0 -a 7 md5.hash ? ง? dexample.dict
เทียบเท่ากับการใช้พจนานุกรม:
00สวัสดี 01หวัดดี ... 99หวัดดี 00เวอร์เนอร์ 01เวอร์เนอร์ ... 99เวเรเนอร์