Cracking Password with Hashcat

Datafarm
5 min readNov 28, 2023

สวัสดีครับ วันนี้เราจะมาพูดกันถึงเรื่อง “Cracking Password” กันนน ซึ่งโดยปกติแล้วรหัสผ่านที่เราใช้เพื่อเข้าสู่ระบบใด ๆ จะเป็นตัวอักษรหรือข้อความที่สามารถอ่านเข้าใจได้ชัดเจน และถ้าระบบยังคงเก็บข้อมูลรหัสผ่านด้วยรูปแบบเดิมซึ่งอ่านและเข้าใจได้ง่าย ย่อมจะขาดความปลอดภัยอย่างแน่นอน ดังนั้นระบบจึงต้องมีการเข้ารหัสข้อมูลเพื่อเพิ่มความปลอดภัยให้มากขึ้น

ในโลกความเป็นจริง ไม่ได้มีเพียงแค่รหัสผ่าน (Password) เท่านั้นที่ถูกเข้ารหัส แต่ยังมีข้อมูลชนิดอื่น ๆ อีกหลายชนิดและหลายรูปแบบที่ถูกนำมาเข้ารหัสเพื่อเพิ่มความปลอดภัย แต่ในบทความนี้ขอนำเสนอและเน้นไปที่ “รหัสผ่าน” นะครับ

มาเริ่มต้นกันด้วยรูปแบบการเข้ารหัสข้อมูล

Encrypt vs Hashing

การทำ Encrypt หรือ Hashing นั้น มีจุดประสงค์ที่เหมือนกัน นั่นคือ เป็นการเข้ารหัสข้อมูลแต่จะมีความต่างกันบางส่วน ดังนี้

Encrypt: เป็นการเข้ารหัสโดยที่ข้อมูลต้นฉบับจะเรียกว่า “Plaintext” และเมื่อถูกเข้ารหัสจะเรียกว่า “Ciphertext” และข้อมูลที่ถูกการ “Encrypt” จะสามารถกระทำการย้อนกลับเพื่อให้ได้ข้อมูลเดิม หรือ “Decrypt” ได้

มี 2 รูปแบบคือ

1. Symmetric Encryption

2. Asymmetric Encryption

ref: https://www.researchgate.net/figure/Data-encryption-decryption-process_fig1_338386294

Hashing: เป็นการเข้ารหัสเหมือนกันแต่จะต่างตรงที่ “เป็นการแปลงข้อมูลทางเดียว (One-way Process)” หรือคือไม่สามารถดำเนินการย้อนกลับเพื่อให้ได้ข้อมูลแบบเดิม (Plaintext)ได้ การทำ Hashing มีหลายรูปแบบ เช่น MD5, SHA-512, Blowfish, NTLM เป็นต้น ซึ่งกระบวนการทำ Hashing จะถูกนำมาใช้ในการเข้ารหัสข้อมูลประเภท “รหัสผ่าน” และแม้จะไม่สามารถดำเนินการย้อนกลับ แต่ข้อมูลที่ถูกเข้ารหัสด้วยวิธีการ “Hashing” ด้วยอัลกอริทึ่มเดิม จะมีลักษณะข้อมูลเหมือนเดิมเสมอไม่ว่าจะดำเนินการกี่ครั้งก็ตาม เช่น ข้อมูลที่มีเนื้อหาเป็น “password” ถูกเข้ารหัสด้วย MD5 จะได้ผลลัพธ์เป็ “5f4dcc3b5aa765d61d8327deb882cf99” เสมอ

ref: https://securityboulevard.com/2021/09/everything-about-secure-hashing-algorithm-sha/

Identifying Hash

ก่อนที่เราจะเริ่มทำการถอดรหัส Hash นั้นควรจำที่จะต้องรู้อัลกอริทึ่มที่ทำ Hashing นั้นก่อน ซึ่งมีหลายรูปแบบ และมีความเฉพาะ เช่น Hash ที่มีความยาว 32 ตัว มักจะเป็นประเภท MD5 หรือ NTLM และการที่เราระบุประเภทของรูปแบบ Hash ก่อนดำเนินการโจมตีจะช่วยให้มีโอกาสที่จะแคร๊ก Hash ได้สำเร็จมากกว่านั่นเอง

ตัวอย่างเครื่องมือที่จะช่วยให้เราระบุประเภทของ Hash ได้แก่

Hashid

“hashid” เป็นเครื่องมือที่ช่วยในการระบุประเภทของ Hash สามารถใช้ใน “Kali Linux” ได้เลย

หรือสามารถดาวน์โหลดได้จาก https://github.com/psypanda/hashID

Hash-Identifier

“hash-identifier” เป็นอีกหนึ่งเครื่องมือที่ช่วยให้สามารถระบุประเภทของ Hash และใช้ใน “Kali Linux” ได้

หรือสามารถดาวน์โหลดได้จาก https://github.com/blackploit/hash-identifier

และยังมีเครื่องมือที่ช่วยในการระบุประเภท Hash ที่สะดวกในการใช้งานอีกมากมาย เช่น ตรวจสอบจากเว็บไซต์ https://www.tunnelsup.com/hash-analyzer/ หรือ https://hashes.com/en/tools/hash_identifier

ซึ่งจากผลลัพธ์ที่ได้ อาจจะไม่สามารถระบุอย่างแม่นยำว่าใช้กระบวนการชนิดใด แต่จะช่วยในการจำกัดขอบเขตประเภทของ “Hash” ได้

Password Cracking Tools

และก็มาถึงส่วนสำคัญ นั่นคือ การ “Cracking Password” ซึ่งมีเครื่องมือหลายชนิด ที่จะมาช่วยในการโจมตี เช่น John the Ripper, Hashcat เป็นต้น ซึ่งในบทความนี้ขอเน้นไปที่การใช้ “Hashcat

Hashcat เป็นเครื่องมือที่ใช้ในการ “Cracking Hash” ที่ได้รับความนิยมและถูกติดตั้งมาใน “Kali Linux” อยู่แล้ว หรือสามารถดาวน์โหลดได้จาก https://github.com/hashcat/hashcat

ref: https://tbhaxor.com/cracking-passwords-using-hashcat/

Hashcat Attack Type

Hashcat มีรูปแบในการโจมตีทั้งหมด 6 โหมด ซึ่งการใช้งานก็ขึ้นอยู่กับประเภทของ Hash และความซับซ้อนของรหัสผ่าน

1. Dictionary Attack หรือ Straight Mode

คือการโจมตีในรูปแบบเรียบง่ายและตรงไปตรงมา โดยใช้เทคนิคการเดารหัสผ่าน(Password) จากคลังคำศัพท์(Wordlist) ซึ่งแหล่งคำศัพท์ที่ได้รับความนิยมคือ “Seclist” สามารถดาวน์โหลดได้จาก https://github.com/danielmiessler/SecLists/tree/master และ “rockyou” สามารถดาวน์โหลดได้จาก https://github.com/praetorian-inc/Hob0Rules/blob/master/wordlists/rockyou.txt.gz

Syntax

kali $ hashcat -a 0 -m <hash type> <hash file> <wordlist>

-a คือ เลือกโหมดในการโจมตี (Straight คือ 0)

-m คือ เลือกประเภทของ Hash

example

จากรูป: ทำการเข้ารหัส “P@ssw0rd” ด้วยรูปแบบ md5 ได้ผลลัพธ์เป็น “161ebd7d45089b3446ee4e0d86dbcf92”

และทำการแคร๊กด้วยเครื่องมือ “Hashcat” ในโหมด Straight (-a 0) และรูปแบบ md5 (-m 0) จะได้ผลลัพธ์กลับมาเป็น “P@ssw0rd” ดังเดิม

2. Combination Attack หรือ Combination mode

เป็นการโจมตีที่มีรูปแบบคล้ายกับ Dictionary Attack แต่จะเป็นการรวมคลังคำศัพท์จาก 2 แหล่งมาสร้างเป็นคำศัพท์ชุดใหม่

Syntax

kali $ hashcat -a 1 -m <hash type> <hash file> <wordlist1> <wordlist2>

example

มีคลังคำศัพท์ 2 ชุดคือ

list1.txt

sun
moon
silver
golden
P@ssw0rd

list2.txt

hello
hi
secret
123456789

จากรูป: ทำการเข้ารหัส “P@ssw0rd123456789” ด้วยรูปแบบ md5 ได้ผลลัพท์เป็น “ac0ab808011156da556615370a68a0d7”

ดำเนินการถอดรหัสด้วยเครื่องมือ “Hashcat” ในโหมด Combination (-a 1) รูปแบบ md5 (-m 0) และใช้คลังคำศัพท์จาก list1.txt กับ list2.txt จะได้ผลลัพท์กลับมาเป็น “P@ssw0rd123456789” ดังเดิม

3. Brute-force หรือ Mask Attack

เป็นการโจมตีที่คล้ายกับการทำ Brute-force ที่จะทำการสุ่มรหัสไปเรื่อย ๆ แต่ต่างกันตรงที่ สามารถระบุประเภทของตัวหนังสือ (Character) ที่จะทำการ Brute-forceในแต่ละตำแหน่งได้ เช่น หากทราบว่ารหัสผ่านเป็น password123

เราสามารถกำหนดให้ทำการ Brute-force ตำแหน่งที่ 1–8 เป็นเฉพาะตัวหนังสือ a-z เท่านั้นและตำแหน่งที่ 9–11 เป็นตัวเลข ซึ่งการระบุประเภทของตัวหนังสือจะช่วยประหยัดเวลากว่าวิธีการโจมตีที่สุ่มทุกตำแหน่งโดยไม่กำหนดลักษณะของตัวหนังสือ

ซึ่งการโจมตีในโหมดนี้ควรจำเป็นที่จะต้องรู้รูปแบบของข้อมูลก่อนว่าตำแหน่งใดเป็นตัวหนังสือ ตัวพิเศษ หรือตัวเลข เพราะหากกำหนดไม่ถูกต้อง ก็จะไม่สามรถถอดรหัสได้เช่นกัน

วิธีการกำหนดรูปแบบ

?l = a — z
?u = A — Z
?d = 0–9
?h = 0–9abcdef
?H = 0–9ABCDEF
?s = อักขระพิเศษ
?a = ?l?u?d?s
?b = 0x00–0xff

Syntax

kali $ hashcat -a 3 -m <hash type> <hash file> ‘<word><charsets>’

example

จากรูป: ทำการเข้ารหัส “password@TEST123” ด้วยรูปแบบ md5 ได้ผลลัพธ์เป็น “d84d4360eaf415419d4db7ba0e46208d”

ดำเนินการถอดรหัสด้วยเครื่องมือ “Hashcat” ในโหมด Mask (-a 3) รูปแบบ md5 (-m 0) และใช้คำสั่ง

kali $ hashcat -a 3 -m 0 d84d4360eaf415419d4db7ba0e46208d ‘password?s?u?u?u?u?d?d?d’

จะได้ผลลัพธ์กลับมาเป็น “password@TEST123” ดังเดิม

4. Hybrid Mode

เป็นการรวมรูปแบบในการโจมตี เช่น ใช้ Straight Mode ร่วมกับ Mask Mode ในการโจมตี

Syntax

kali $ hashcat -a 6,7 -m <hash type> <hash file> <mode1> <mode2>

example

มีคลังคำศัพท์ list1.txt คือ

password
P@ssw0rd
p@ssword
P@ssword

จากรูป: ทำการเข้ารหัส “P@ssword123” ด้วยรูปแบบ md5 ได้ผลลัพท์เป็น “82080600934821faf0bc59cba79964bc”

ดำเนินการถอดรหัสด้วยเครื่องมือ “Hashcat” ในโหมด Mask (-a 6) รูปแบบ md5 (-m 0) และใช้คำสั่ง

hashcat -a 6 -m 0 82080600934821faf0bc59cba79964bc list1.txt ‘?d?d?d’

จะได้ผลลัพท์กลับมาเป็น “P@ssword123” ดังเดิม

และในส่วนของ mode 7 ก็มีวิธีการที่คล้ายกันดังนี้

จากรูป: ทำการเข้ารหัส “123P@ssword” ด้วยรูปแบบ md5 ได้ผลลัพธ์เป็น “4a311e712dad8244288ce67bd786e557”

ดำเนินการถอดรหัสด้วยเครื่องมือ “Hashcat” ในโหมด Mask (-a 7) รูปแบบ md5 (-m 0) และใช้คำสั่ง

hashcat -a 6 -m 0 4a311e712dad8244288ce67bd786e557 ‘?d?d?d’ list1.txt

จะได้ผลลัพท์กลับมาเป็น “123P@ssword” ดังเดิม

ซึ่ง “Hashcat” ไม่เพียงแค่ใช้กับรหัสผ่านที่ใช้ในสำหรับการเข้าสู่ระบบเท่านั้น ยังสามารถใช้ได้กับไฟล์อีกหลาย ๆ ประเภทที่ถูกตั้งรหัสผ่านหรือมีการเข้ารหัสไว้ เช่น ไฟล์ประเภท MS Office Document, Zip File, Keepass

ผู้เขียนขอยกตัวอย่างไฟล์ประเภท “Zip” ที่ถูกตั้งรหัสผ่านไว้ ทำให้ไม่สามารถ Extract ไฟล์เพื่อดูข้อมูลได้

จากรูป จะเห็นว่า เราไม่สามารถ Extract ไฟล์ “hashcat.7z” ได้เพราะถูกตั้งรหัสผ่านไว้

เทคนิคนี้ต้องใช้ร่วมกันระหว่างเครื่องมือ “Hashcat” กับ “JohnTheRipper”

ขั้นที่ 1 : เนื่องจากไฟล์ถูก Zip ด้วย 7z จึงใช้เครื่องมือ “7z2john” ในการเข้ารหัสไฟล์ “hashcat.7z” ซึ่งถูกตั้งรหัสผ่านไว้ ได้ผลลัพท์เป็น Hash “$7z$0$19$0$$8$9c7684c204c437fa0000000000000000$1098215690$112$106$7395978cad9ad8b18aef51ba2f9dcf909a1bff70d240b1c8e98dffabd352d69a1f37978e5df0179860d0fe4754721ae3cbbee1b558d93cd27e0b2959efe44a00305f982527d19584d62bcf8c23cf89e24fd19db844108e452a26d4a8343d504fc3063744d081db1492ea1cdef7a9b983” ดังภาพ

ขั้นที่ 2 : ดำเนินการถอดรหัสโดยใช้เครื่องมือ “Hashcat” ด้วยคำสั่ง

hashcat -m 11600 hash.txt /usr/share/wordlists/rockyou.txt — show

จากรูป ได้ผลลัพธ์เป็น “123456789a”

ขั้นที่ 3 : ทำการ Extract ไฟล์ด้วยรหัสผ่าน “123456789a”

สามารถเปิดไฟล์ได้สำเร็จ!!!

ซึ่งถ้าต้องการโจมตีไฟล์ประเภท

MS Office ต้องใช้ร่วมกับเครื่องมือ “Office2john”

Keepass ต้องใช้ร่วมกับเครื่องมือ “keepass2john”

PDF ต้องใช้ร่วมกับเครื่องมือ “pdf2john”

เป็นอย่างไรกันบ้างครับสำหรับบทความนี้ ซึ่งนี่ก็เป็นเพียงเนื้อหาเบื้องต้นสำหรับการโจมตีประเภท “Cracking Password” ผู้เขียนขอแอบแทรกเพิ่มเติม เนื่องจากในข้อสอบ OSCP มีการใช้เทคนิคนี้ในการ “Crack” ไฟล์ที่ถูกตั้งรหัสผ่านไว้ เพราะฉะนั้น อย่าลืมไปทดลองฝึกหรือลองเล่นกันนะครับบบ สุดท้ายก็ขอลาไปกันก่อน สวัสดีครับ ขอบคุณครับ

--

--

No responses yet