ฟังก์ชันแฮชเป็นคำทั่วไปสำหรับฟังก์ชันประเภทหนึ่ง อินพุตของฟังก์ชันประเภทนี้เป็นข้อมูลไบนารีโดยพลการ และเอาต์พุตเป็นข้อมูลไบนารีที่มีความยาวคงที่ ฟังก์ชันประเภทนี้มีลักษณะดังต่อไปนี้:
ทิศทางเดียว: การคำนวณเอาต์พุตจากอินพุตนั้นง่ายและรวดเร็ว ในขณะที่การอนุมานอินพุตจากเอาต์พุตนั้นเป็นไปไม่ได้ทางคณิตศาสตร์
ข้อจำกัดการชนกัน: เป็นการยากอย่างยิ่งที่จะค้นหาอินพุตสองตัวที่แตกต่างกันและมีเอาต์พุตเดียวกัน
ฟังก์ชันที่ตรงตามคุณลักษณะเหล่านี้สามารถเรียกได้ว่าฟังก์ชันแฮช ใช้ข้อมูลบางอย่างเป็นอินพุตของฟังก์ชันแฮชและคำนวณเอาต์พุต เป็นเรื่องปกติที่จะเรียกเอาต์พุตนี้ว่าค่าแฮชของข้อมูล หน้าที่หลักประการหนึ่งของฟังก์ชันแฮช
คือการจัดเก็บรหัสผ่านอย่างปลอดภัย แทนที่จะบันทึกรหัสผ่านโดยตรง (นั่นคือ ไม่บันทึกรหัสผ่านข้อความธรรมดา) จะบันทึกค่าแฮชของรหัสผ่าน ในระหว่างการตรวจสอบ คุณจะต้องคำนวณรหัสผ่านที่ป้อนอีกครั้งเท่านั้น เปรียบเทียบค่าแฮชของรหัสผ่านกับค่าแฮชของรหัสผ่านที่บันทึกไว้เพื่อดูว่ารหัสผ่านถูกต้องหรือไม่ เนื่องจากลักษณะทางเดียวของฟังก์ชันแฮชและข้อจำกัดการชนกัน จึงเป็นเรื่องยากสำหรับผู้โจมตีที่จะทราบรหัสผ่านแม้ว่าพวกเขาจะได้รับค่าแฮชของรหัสผ่านก็ตาม
ผู้โจมตีได้ค่าแฮชของรหัสผ่าน ไม่มีทางรู้รหัสผ่านได้จริงหรือ? ไม่แน่นอน แม้ว่าการคำนวณรหัสผ่านโดยตรงจากค่าแฮชของรหัสผ่านจะเป็นไปไม่ได้ทางคณิตศาสตร์ แต่เรารู้ว่าฟังก์ชันแฮชนั้นง่ายและรวดเร็วในการคำนวณเอาต์พุตจากอินพุต ในกรณีที่เลวร้ายที่สุด คุณสามารถลองได้ รหัสผ่านที่มนุษย์อาจตั้งไว้ก็เป็นเพียงรหัสผ่านเหล่านั้น ลองทีละรหัส หากคุณโชคดี คุณก็ยังสามารถลองได้ การดำเนินการที่พยายามรับอินพุตที่สอดคล้องกับค่าแฮชอย่างต่อเนื่องเรียกว่าการระเบิด
จากแนวคิดนี้ hashcat จึงเกิดขึ้น ว่ากันว่า hashcat ถือกำเนิดขึ้นเพื่อพิสูจน์ว่าการระเบิดแฮชนั้นง่ายมาก hashcat อ้างว่าเป็นเครื่องมือระเบิดแฮชที่เร็วที่สุดในโลกและยังรองรับ GPU และ FGPA หากคุณมี
hashcat ไม่เพียงแต่รวดเร็วเท่านั้น แต่ยังรองรับฟังก์ชันแฮชมากกว่าสองร้อยอย่างมืออาชีพ โดยใช้คำสั่ง:
hashcat --help
คุณสามารถดูรายการฟังก์ชันแฮชทั้งหมดที่รองรับโดย hashcat มีมากเกินไปฉันจะไม่โพสต์ที่นี่
hashcat ติดตั้งตามค่าเริ่มต้นใน Kali และสามารถใช้งานได้โดยตรง แต่ Kali ของฉันได้รับการติดตั้งใน VirtualBox และฉันมักจะรู้สึกว่าโอกาสเสมือนช้ากว่าเล็กน้อย ดังนั้นฉันจึงต้องการใช้ hashcat ในโฮสต์ทางกายภาพ ขั้นแรกให้ไปที่เว็บไซต์อย่างเป็นทางการของ hashchat เพื่อดาวน์โหลด hashcat จนถึงตอนนี้ เวอร์ชันล่าสุดคือ v3.5.0 ซึ่งเผยแพร่เมื่อวันที่ 2017.04.05 จะเห็นได้จากวันที่อัปเดตว่า hashchat เต็มไปด้วยพลัง ช่วยขจัดปัญหาในการคอมไพล์และดาวน์โหลดแพ็คเกจไบนารีโดยตรง ซึ่งมีขนาดเพียง 2.7M ซึ่งเล็กมากเมื่อเทียบกับเกมที่มีราคาหลายสิบ G
หลังจากดาวน์โหลดเสร็จสิ้น ให้แตกการบีบอัด hashcat และคุณจะเห็น:
ไฟล์ดังกล่าวเป็นไฟล์ปฏิบัติการใน linux และ windows ภายใต้ 32 บิตและ 64 บิตตามลำดับ เพียงเลือกไฟล์ใดไฟล์หนึ่งตามสถานการณ์ของคอมพิวเตอร์ของคุณ ฉันเลือก hashcat64.bin เพื่อความสวยงาม ฉันเพิ่มบรรทัดลงในไฟล์ ~/.bashrc:
alias hashcat='เส้นทางของ hashcat64.bin '
หลังจากบันทึกแล้ว เปิดเทอร์มินัลเสมือนอีกครั้งเพื่อให้ไฟล์ ~/.bashrc มีผลบังคับใช้ ด้วยวิธีนี้ ไม่ว่าคุณจะอยู่ที่ไหน คุณสามารถป้อนคำสั่ง hashcat ได้โดยตรงโดยไม่ต้องสลับไดเร็กทอรีหรือป้อน "64.bin" ที่น่าเกลียด ดังแสดงในภาพด้านล่าง
ตอนนี้คุณสามารถเริ่มใช้ hashcat เพื่อระเบิดแฮชต่างๆ ได้แล้ว
md5 ควรเป็นหนึ่งในฟังก์ชันแฮชที่มีชื่อเสียงและใช้กันอย่างแพร่หลายที่สุด ขั้นแรกให้ใช้ Python เพื่อสร้างค่า md5 หลายค่าสำหรับการระเบิด โค้ดมีดังนี้:
import hashlib รหัสผ่าน = ['123123', 'พันธบัตร007', 'xxxxxx', '*H@&(NT*@BR#^'] สำหรับ รหัสผ่าน ใน รหัสผ่าน: md5 = hashlib.md5() md5.update(รหัสผ่าน) print md5.hexdigest()
โค้ดข้างต้นคำนวณค่าแฮชของสตริงทั้งสี่ตามลำดับ ผลลัพธ์เอาต์พุตคือ:
4297f44b13955235245b2497399d7a93 cbdb7e2b1ed566ceb796af2df07205a3 dad3a37aa9d50688b5157698acfd7aee d77db958c179bbffae04b2b908b75c26
บันทึกผลลัพธ์เอาต์พุตในไฟล์ md5.hash หนึ่งค่า hahs ต่อบรรทัด จากนั้นใช้ hashcat เพื่อระเบิดค่าแฮชเหล่านี้ คำสั่งมีดังนี้:
hashcat -w 3 -a 0 -m 0 --remove -o md5.out md5.hash wordlist.dic
พารามิเตอร์ -w ใช้เพื่อระบุโหมดการทำงาน มีทั้งหมด 4 โหมด ดังที่แสดงในตารางด้านล่าง:
| N | ประสิทธิภาพ | รันไทม์ | การใช้พลังงาน | ผลกระทบต่อเดสก์ท็อป |
|---|---|---|---|---|
| 1 | ต่ำ | 2 ms | Low | Minimal |
| 2 | Default | 12 ms | Economic | Noticeable |
| 3 | High | 96 ms | High | Unresponsive |
| 4 | Nightmare | 480 ms | Insane | Headless |
พารามิเตอร์ -a ใช้เพื่อระบุโหมดการโจมตี ความหมายของ 0 คือ โดยตรงและต่อเนื่อง นั่นคือ การใช้พจนานุกรมรหัสผ่านเพื่อระเบิด มีค่า -a ห้าค่า ดังแสดงในตารางต่อไปนี้:
| N | โหมด |
|---|---|
| 0 | ตรง |
| 1 | ชุดค่าผสม |
| 3 | Brute-force |
| 6 | Hybrid Wordlist + Mask |
| 7 | Hybrid Mask + Wordlist |
-m ใช้เพื่อระบุแฮชที่จะระเบิด ฟังก์ชันแฮชของค่า 0 หมายความว่าฟังก์ชันแฮชคือ md5 และค่าอื่นๆ แสดงในตารางต่อไปนี้:
| N | Name | Category |
|---|---|---|
| 0 | MD5 | Raw Hash |
| 300 | MySQL4.1/MySQL5 | เซิร์ฟเวอร์ฐานข้อมูล |
| 1000 | NTLM | ระบบปฏิบัติการ |
| 1800 | sha512crypt $6$, SHA512 (Unix) | ระบบปฏิบัติการ |
| 2611 | vBulletin < v3.8.5 | ฟอรัม, CMS, อีคอมเมิร์ซ, เฟรมเวิร์ก |
ตารางนี้ยาวเกินไป ฉันจะแสดงเฉพาะฟังก์ชันแฮชสองสามฟังก์ชันที่เกี่ยวข้องในบทความนี้ คุณสามารถดูทั้งหมดได้โดยใช้พารามิเตอร์ – help ความหมายของ
พารามิเตอร์ – ลบคือหากค่าแฮชบางค่าถูกระเบิดสำเร็จ ค่าจะถูกลบออกจาก md5.hash
พารามิเตอร์ -o ตามด้วยชื่อไฟล์ที่ระบุตำแหน่งที่บันทึกผลลัพธ์การระเบิด
พารามิเตอร์สองตัวสุดท้ายคือ md5.hash และ wordlist.dic คือค่าแฮชและพจนานุกรมรหัสผ่านที่จะระเบิดตามลำดับ เนื้อหาใน md5.hash ได้รับการคำนวณโดย Python หากคุณไม่มีพจนานุกรมรหัสผ่านที่เหมาะสม คุณสามารถใช้คำสั่ง:
wget -O wordlist.dic https://samsclass.info/123/proj10/500_passwords.txt
下载一个。现在完事具备,按下回车,结果华丽地报错:(
clGetPlatformIDs(): CL_PLATFORM_NOT_FOUND_KHR
อาจขาดสภาพแวดล้อมการทำงานบางอย่าง ดังนั้นให้ติดตั้ง ฉันติดตั้งสิ่งเหล่านี้ทั้งหมด:
sudo apt-get install gcc make p7zip-full git lsb-core wget http://registrationcenter-download.intel.com/akdlm/irc_nas/9019/opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25.tgz tar -xvf opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25.tgz ซีดี opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25 sudo ./install.sh
หากความเร็วอินเทอร์เน็ตดี จะปลอดภัยภายในระยะเวลาสั้นๆ คำสั่งแรกรายงานข้อผิดพลาด:
/sbin/ldconfig.real: /usr/lib/nvidia-375/libEGL.so.1 คือ ไม่ใช่ เป็น สัญลักษณ์ ลิงก์ /sbin/ldconfig.real: /usr/lib32/nvidia-375/libEGL.so.1 คือ ไม่ใช่ เป็น ลิงก์เชิงสัญลักษณ์
แต่ดูเหมือนว่าจะไม่ส่งผลกระทบต่อสิ่งใด ดังนั้นเพิกเฉยต่อมัน หลังจากติดตั้งสิ่งเหล่านี้แล้ว ให้กด Enter อีกครั้งเพื่อรันคำสั่งที่รายงานข้อผิดพลาดเดิม และพบว่าไม่มีการรายงานข้อผิดพลาดอีกครั้ง และการดำเนินการก็เสร็จสิ้นในชั่วพริบตา หลังจากดำเนินการคำสั่งแล้ว ให้ตรวจสอบเนื้อหาของไฟล์ md5.hash และ md5.out และพบว่าเหลือเพียงแฮชเดียวใน md5.hash แฮชทั้งสามที่ระเบิดสำเร็จได้ถูกโอนไปยังไฟล์ md5.out ใน md5.out มีค่าแฮชสามค่าและค่าดั้งเดิมดังแสดงในรูปด้านล่าง:
ค่าแฮชของรหัสผ่านเข้าสู่ระบบ Windows จะถูกบันทึกไว้ในไฟล์ SAM SAM เป็นตัวย่อของ "security account manager" โดยปกติจะอยู่ที่
C:\Windows\system32\config\SAM
ไฟล์ SAM ได้รับการปกป้องโดย Windows และไม่สามารถอ่านได้โดยตรง จำเป็นต้องใช้เครื่องมือ เช่น SAMInside ค้นหาเครื่องเสมือน Windows 7 สร้างผู้ใช้ผู้ดูแลระบบใหม่ชื่อ hashcat และตั้งค่ารหัสผ่าน ดาวน์โหลดและแตกการบีบอัด SAMInside ใน Windows 7 แล้วเรียกใช้สิทธิ์ของผู้ดูแลระบบ จากนั้นคลิก File-> Import Local Users vis Scheduler ดังแสดงในภาพด้านล่าง แสดง:
SAMInside อาจ "ไม่ตอบสนอง" หลังจากนั้น แต่ก็ไม่สำคัญ รอสักสองสามวินาทีอย่างอดทน SAMInside อ่านแฮชที่เราต้องการตามความคาดหวัง ดังแสดงในภาพด้านล่าง:
เลือกผู้ใช้ "hashcat" ที่เราต้องการระเบิดรหัสผ่าน กด Ctrl 5 เพื่อคัดลอก NT-hash จากนั้นกลับไปที่ Ubuntu ที่ติดตั้ง hashcat ใช้คำสั่งต่อไปนี้เพื่อบันทึกค่าแฮชที่คัดลอกไปยังไฟล์ win7.hash:
echo<101x96>hashcat -w 3 -a 0 -m 1000 --ลบ -o win7.out win7.hash wordlist.dicดำเนินการเสร็จสิ้นหลังจากผ่านไปครู่หนึ่ง ตรวจสอบไฟล์ win7.out และพบว่าการระเบิดประสบความสำเร็จ รหัสผ่านเข้าสู่ระบบของผู้ใช้ hashcat คือ rush2112:
werner@Yasser:~/hashcat$ cat win7.out 356ceae0c89fb65ed6d6aa7a445c4ce5:rush2112วิธีการรับไฟล์ SAM โปรดดูที่ "วิธีส่งออก Windows Hash Series 1" ต่อไปนี้บันทึกกระบวนการของฉันในการอ่านไฟล์ SAM ในเครื่องเสมือน Windows 7
หากเป็นเครื่องจริง ให้ใช้ Win PE เพื่อสตาร์ทเครื่องและอ่านไฟล์ SAM บนดิสก์ ของฉันเป็นเครื่องเสมือน และคุณสามารถอ่านไฟล์ในดิสก์เสมือนได้โดยการติดตั้งไฟล์ดิสก์เสมือนลงในระบบไฟล์ เครื่องเสมือนที่ฉันใช้คือ VirtualBox ซึ่งสามารถทำได้โดยใช้คำสั่ง vdfuse หากคุณไม่มี vdfuse คุณต้องติดตั้ง virtualbox-fuse ก่อน:
sudo apt-get install virtualbox-fuseคุณยังสามารถดาวน์โหลดแพ็คเกจการติดตั้ง virtualbox-fuse ได้ด้วยตัวเอง
หลังจากการติดตั้งเสร็จสิ้น คุณจะมีคำสั่ง vdfuse และคุณสามารถเริ่มการแมปและการติดตั้งดิสก์เสมือนได้:
mkdir -p ~/vmdisk sudo vdfuse -t vmdk -f Win7Pro32.vmdk ~/vmdisk/หลังจากทำตามขั้นตอนนี้ ดูไดเร็กทอรี ~/vmdisk ซึ่งมีสามไฟล์: EntireDisk, Partition1 และ Partition2 สร้างไดเร็กทอรีใหม่:
mkdir -p ~/vmdisk_en mkdir -p ~/vmdisk_1 mkdir -p ~/vmdisk_2ใช้คำสั่ง mount เพื่อติดตั้งไฟล์ทั้งสามของ EntireDisk, Partition1 และ Partition2 ตามลำดับ:
sudo mount ~/vmdisk/EntireDisk ~/vmdisk_en sudo ติดตั้ง ~/vmdisk/พาร์ติชัน1 ~/vmdisk_1 sudo mount ~/vmdisk/Partition2 ~/vmdisk_2พบว่าการติดตั้งดิสก์ทั้งหมดล้มเหลว เนื้อหาในพาร์ติชัน 1 ไม่ใช่สิ่งที่ฉันต้องการ และพาร์ติชัน 2 เป็นไฟล์จากเครื่องเสมือน Windows 7 ซึ่งเป็นสิ่งที่ฉันต้องการ คัดลอกไฟล์ SAM เป้าหมายของเราจาก vmdisk_fs:
cp ~/vmdisk_2/Windows/System32/config/SAM ./โดยวิธีการ คัดลอกไฟล์ระบบด้วย:
cp ~/vmdisk_2/Windows/System32/config/SYSTEM ./ดู เนื้อหาของไฟล์ SAM ดังแสดงในภาพด้านล่าง ไม่ใช่ไฟล์ข้อความธรรมดา แต่เป็นสไตล์ของ Windows จริงๆ
แม้ว่าไฟล์ SAM จะถูกเปิดสำเร็จ แต่เรายังไม่ได้รับแฮช เราควรทำอย่างไรต่อไป? คุณสามารถแยกวิเคราะห์เนื้อหาของไฟล์ SAM ด้วยความช่วยเหลือของเครื่องมือเท่านั้น ใส่ทั้งไฟล์ SAM และไฟล์ระบบลงใน Kali แล้วรันคำสั่ง:
samdump2 -o sam.hash SYSTEM samจากนั้นดู sam.hash คุณยังสามารถดูค่าแฮชของรหัสผ่านเข้าสู่ระบบของผู้ใช้แต่ละรายได้ แต่ละบรรทัดในไฟล์ sam.hash เป็นผู้ใช้ และรูปแบบของแต่ละบรรทัดคือ:
ชื่อผู้ใช้: RID: LM-hash value: NTLM-hash valueโปรดทราบว่ารูปแบบนี้เป็นรูปแบบเอาต์พุตคำสั่ง samdump2 ไม่ใช่ "รูปแบบรหัสผ่านแฮชภายใต้ Windows"
3. ระเบิดแฮชรหัสผ่านเข้าสู่ระบบ linux
ก่อนอื่น คุณต้องมีคอมพิวเตอร์ที่ใช้ระบบ linux พูดง่าย เครื่องเสมือนก็เพียงพอแล้ว จากนั้นเรียกใช้คำสั่งต่อไปนี้เพื่อเพิ่มผู้ใช้ใหม่และตั้งค่ารหัสผ่านสำหรับวัตถุประสงค์ในการระเบิดของเรา:
sudo adduser justforfun
ค่าแฮชของรหัสผ่านเข้าสู่ระบบของผู้ใช้ใน linux จะถูกเก็บไว้ในไฟล์ /etc/shadow (หมายเหตุ: ไม่ใช่ /etc/passwd) ใช้คำสั่งต่อไปนี้เพื่อดูค่าแฮชของรหัสผ่านเข้าสู่ระบบของผู้ใช้ใหม่:
test@test-VirtualBox:~$ sudo tail -n 1 /etc/shadow justforfun:$6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0:17373:0:99999:7:::
คำสั่งหางใช้เพื่ออ่านสองสามบรรทัดสุดท้ายของไฟล์ ค่าเริ่มต้นคือ 10 บรรทัด และใช้พารามิเตอร์ -n เพื่อระบุจำนวนบรรทัด ผู้ใช้ใหม่ที่เราเพิ่งสร้างขึ้นจะอยู่ในบรรทัดสุดท้ายโดยธรรมชาติ ดังนั้นเราจึงใช้ tail -n 1 เพื่ออ่าน ผลลัพธ์ที่คุณอ่านคือข้อมูลที่แบ่งด้วย ":" ส่วนแรกคือชื่อผู้ใช้ "justforfun" ส่วนที่สองคือค่าแฮชของรหัสผ่าน ส่วนอื่น ๆ ไม่จำเป็นต้องกังวลในบทความนี้ เรามุ่งเน้นไปที่ส่วนที่สอง
"$6$" ขึ้นต้นด้วยหมายถึงประเภทของฟังก์ชันแฮชที่ใช้คือ SHA-512 ยกเว้น "$6$" ใน linux "$1$" หมายถึง MD5, "$2a$" หมายถึง Blowfish, " $2y$" หมายถึง Blowfish (การจัดการอักขระ 8 บิตที่ถูกต้อง), "$5$" หมายถึง SHA-256 ดูรายละเอียดใน Wikipedia:passwd นอกจากนี้ไฟล์ /etc/login.defs ยังอธิบายอัลกอริธึมแฮชอีกด้วย
ส่วน "0fokwg59" ที่เริ่มต้นจาก "$6$" ไปจนถึงก่อน "$" ถัดไปคือเกลือ (SALT) เกลือคืออะไร? Baidu รู้ว่าคำตอบของ CNB2009 สำหรับคำถาม " ค่าเกลือ md5 คืออะไร" นั้นเรียบง่ายและเข้าใจง่าย:
พูดง่ายๆ ก็คือวิธีการทำให้รหัสผ่านเดียวกันมีค่าแฮชที่แตกต่างกัน หมายถึงการทำให้เกลือ MD5 นั้นไม่สามารถย้อนกลับได้ แต่ปัจจุบันมีฐานข้อมูลจำนวนมากบนอินเทอร์เน็ตที่รองรับการต่อต้านการสืบค้น หากฐานข้อมูลรหัสผ่านของผู้ใช้รั่วไหลโดยไม่ได้ตั้งใจ แฮกเกอร์สามารถรับรหัสผ่านของผู้ใช้ผ่านการต่อต้านการสืบค้น หรือรับรหัสแฮชที่ปรากฏบ่อยขึ้นในฐานข้อมูล (นั่นคือ ที่หลายๆ คนใช้) สำหรับการแคร็กแบบรุนแรง (เพราะมักจะเป็นรหัสผ่านที่อ่อนแอ) ค่าเกลือคือค่าสุ่มเพิ่มเติมที่เพิ่มในระหว่างกระบวนการแฮชรหัสผ่าน ตัวอย่างเช่น id ของฉันคือ 123456 และรหัสผ่านคือ 123456 เมื่อเก็บไว้ในฐานข้อมูล ฉันสามารถแฮชสตริง "123456/123456 ด้วยวิธีนี้ เมื่อมีรหัสผ่านโง่ๆ อีกรหัสคือ 123456 ก็ยังสามารถสร้างค่าแฮชที่แตกต่างกันและสามารถตรวจสอบได้สำเร็จ ในเวลานี้ id ของฉันจะถูกใช้เป็นค่าเกลือเพื่อแฮชรหัสผ่านที่ซับซ้อน แล้วไง. - บทบาทของค่าเกลือคือการลดความสูญเสียที่เกิดจากการรั่วไหลของฐานข้อมูล หาก RP ของคุณดีมากและเดาได้ถูกต้องว่ารหัสผ่านของฉันคือ 123456 ฉันไม่สามารถหยุดคุณได้
คำตอบสำหรับ md5 เช่นเดียวกับฟังก์ชันแฮชอื่นๆ ส่วนหลังเกลือคือค่าแฮช ตอนนี้คัดลอกส่วนที่สองทั้งหมดไปยังไฟล์ linux.hash เนื้อหาใน linux.hash ควรเป็น:
$6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0จากนั้นระเบิดแฮชรหัสผ่านการเข้าสู่ระบบ linux ด้วยคำสั่งต่อไปนี้:
hashcat -w 3 -a 0 -m 1800 --remove -o linux.out linux.hash wordlist.dicหลังจากนั้นไม่นาน การระเบิดก็เสร็จสิ้น ดูผลลัพธ์:
werner@Yasser:~/hashcat$ cat linux.out $6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0:4321จะเห็นได้ว่าการระเบิดสำเร็จ
4. ระเบิดแฮชรหัสผ่านเข้าสู่ระบบ Mysql
ก่อนอื่น คุณต้องมี Mysql มันเกิดขึ้นในเครื่องเสมือนของฉัน Baidu รู้ว่าค่าแฮชของรหัสผ่านเข้าสู่ระบบ Mysql จะถูกบันทึกไว้ในไฟล์ user.MYD ไฟล์ user.MYD อยู่ที่ไหน? ฉันก็ไม่รู้เหมือนกัน ฉันแค่ค้นหามัน:
test@test-VirtualBox:~$ sudo find / -name user.MYD /var/lib/mysql/mysql/user.MYDพบได้ที่ /var/lib/mysql/mysql/user.MYD ดูเนื้อหาของไฟล์:
sudo cat /var/lib/mysql/mysql/user.MYD
ไม่ใช่ไฟล์ข้อความธรรมดา ความสัมพันธ์เพียงเล็กน้อย ยังคงเห็นว่าค่าแฮชของรหัสผ่านเข้าสู่ระบบรูทของผู้ใช้คือ:
6B825255FB466413D6B1B724644E23428C94BBCBบันทึกค่านี้ลงในไฟล์ mysql.hash ใช้คำสั่งต่อไปนี้เพื่อระเบิดแฮชรหัสผ่านเข้าสู่ระบบ mysql:
{}
หลังจากนั้นไม่นาน การระเบิดก็เสร็จสมบูรณ์ ดูผลลัพธ์:
werner@Yasser:~/hashcat$ cat mysql.out 6b825255fb466413d6b1b724644e23428c94bbcb:viperจะเห็นได้ว่าการระเบิดสำเร็จ
5. ระเบิด Discuz! รหัสผ่านฟอรั่ม
Discuz! เป็นโปรแกรมฟอรั่ม php ที่มีชื่อเสียงในประเทศของฉันและมีการใช้กันอย่างแพร่หลาย ตอนนี้มาระเบิด Discuz กันดีกว่า! ค่าแฮชของรหัสผ่านผู้ใช้ ก่อนอื่นเราต้องหาค่าแฮชก่อน จะหาได้ที่ไหน? แน่นอนจาก Discuz! ในฐานข้อมูล
สามารถอภิปรายได้! ฐานข้อมูลอยู่ที่ไหน? นี่คือวิธีที่ฉันแก้ปัญหา ดาวน์โหลด Discuz เวอร์ชันล่าสุดจากเว็บไซต์อย่างเป็นทางการ! ซอร์สโค้ด เรียกใช้และติดตั้ง แล้วคุณจะได้ Discuz! ฐานข้อมูล
Discuz! ชื่อฐานข้อมูลเริ่มต้นคือ ultrax และตาราง pre_ucenter_members จะเก็บค่าแฮชของรหัสผ่านเข้าสู่ระบบ "pre_" เป็นคำนำหน้าเริ่มต้นและสามารถเปลี่ยนแปลงได้ในระหว่างการติดตั้ง "ucenter_members" จะไม่เปลี่ยนแปลง ใช้คำสั่ง sql ต่อไปนี้เพื่อค้นหาค่าแฮชของรหัสผ่านเข้าสู่ระบบ:
select password,salt from pre_ucenter_members;
บันทึกค่าแฮชและค่าเกลือลงในไฟล์:
echo 69bcba126b93c6f397983629a0f70553:c13fd9 > discuz.hashค่าแฮชและค่าเกลืออยู่ในแถวเดียวกัน แบ่งด้วย ":" สุดท้าย ใช้คำสั่งต่อไปนี้เพื่อระเบิดแฮชรหัสผ่านเข้าสู่ระบบ Discuz:
hashcat -w 3 -a 0 -m 2611 --ลบ -o discuz.out discuz.hash wordlist.dicหลังจากนั้นไม่นาน การระเบิดก็เสร็จสิ้น ดูผลลัพธ์:
werner@Yasser:~/hashcat$ cat discuz.out 69bcba126b93c6f397983629a0f70553:c13fd9:winterจะเห็นได้ว่าการระเบิดสำเร็จ
6. การทดสอบพจนานุกรมขนาดใหญ่
จนถึงตอนนี้ เราใช้พจนานุกรมขนาดเล็กที่มีเพียง 500 คำ และใช้เวลาเพียงชั่วครู่ในแต่ละครั้งเพื่อระเบิดแฮชต่างๆ ได้สำเร็จ คุณไม่คิดว่า แปลกเหรอ? นี่เป็นเพราะฉันจงใจตั้งรหัสผ่านที่อ่อนแอในพจนานุกรมเพื่อฝึกใช้ hashcat มิฉะนั้นมันจะไม่ทำให้ผู้คนรู้สึกแย่ถ้าพวกเขาไม่สามารถระเบิดได้ ในทางปฏิบัติมันเป็นไปไม่ได้ที่จะมีโชคดีเช่นนี้ ลองคำนวณค่า md5 ของรหัสผ่านที่อ่อนแอน้อยกว่าและระเบิดด้วยพจนานุกรมขนาดใหญ่ ลองเสี่ยงโชคในมือข้างหนึ่ง และดูว่า hashcat จะเร็วแค่ไหนในทางกลับกัน
คำนวณค่า md5 ก่อน:
นำเข้า แฮชลิบ md5 = แฮชลิบ.md5() md5.update("werner123456!!!") พิมพ์ md5.hexdigest()เอาต์พุตคือ:
b17133f9abff287ed0546c1af2b171f7จากนั้นเลือกพจนานุกรมขนาด 10.5G ที่มีรหัสผ่าน 940 ล้านรหัส เริ่มระเบิด:
hashcat -w 3 -a 0 -m 0 --remove -o big.out b17133f9abff287ed0546c1af2b171f7 big.dicสังเกตว่าเมื่อมีค่าแฮชเพียงค่าเดียว คุณไม่จำเป็นต้องบันทึกไว้ในไฟล์โดยตรง เริ่มระเบิดก่อนนอน ตื่นมาดูผลวันรุ่งขึ้น พบว่า
เริ่ม: พุธ ก.ค. 26 22:55:27 2017 หยุด: พุธ ก.ค. 26 23:02:28 2017ปรากฎว่าใช้เวลาเพียง 7 นาที! ฉันคิดว่าจะใช้เวลา 7 ชั่วโมง ซึ่งเร็วกว่าที่ฉันคาดไว้ 60 เท่า! น่าเสียดายที่ค่าแฮชไม่สามารถระเบิดได้สำเร็จ ดูเหมือนว่า "werner123456!!!" ไม่อยู่ในพจนานุกรมรหัสผ่าน ดูเหมือนว่าฉันจะต้องเตรียมพจนานุกรมรหัสผ่าน 100G แต่ไม่สะดวกมากที่จะบันทึกและถ่ายโอนพจนานุกรมขนาดใหญ่เช่นนี้ ไม่มีทางอื่นเหรอ? แน่นอน จำโหมดการโจมตีได้ไหม? เราใช้โหมด "ตรง" ต่อไปเรามาดูโหมดอื่น ๆ กัน
7. สรุป
เมื่อใช้ hashcat เพื่อระเบิดแฮช สิ่งแรกคือการค้นหาแฮชที่ถูกต้อง ระบบที่แตกต่างกันและซอฟต์แวร์ที่แตกต่างกันจะจัดเก็บแฮชในตำแหน่งที่แตกต่างกัน ดังนั้นคุณจึงจำเป็นต้องค้นหาแฮชอย่างแม่นยำ ค่ามา; ประการที่สองคือการกำหนดประเภทแฮชอย่างถูกต้อง พิจารณาว่า hashcat รองรับแฮชประเภทนี้หรือไม่ และเลือกพารามิเตอร์ -m ที่ถูกต้อง มิฉะนั้นแทบจะเป็นไปไม่ได้เลยที่จะประสบความสำเร็จ ประการที่สามคือพจนานุกรมรหัสผ่านจะดีกว่าไม่ว่าจะสามารถระเบิดได้สำเร็จในที่สุดก็ขึ้นอยู่กับพจนานุกรม แม้ว่าพจนานุกรมรหัสผ่านจะไม่ใหญ่เท่าไหร่ก็ยิ่งดี แต่ก็ยังดีกว่าเสมอ hashcat ยังเป็นที่รู้จักในเรื่องความเร็ว พจนานุกรมขนาดใหญ่ไม่ใช่ปัญหาสำหรับ hashcat นี่คือพจนานุกรมที่ดีกว่า: ประตูการรั่วไหลก่อนหน้านี้ + คอลเลกชันพจนานุกรมรหัสผ่านที่อ่อนแอที่ใช้กันทั่วไป 7Z รหัสผ่านการบีบอัดคือ: anywlan นอกจากนี้ หากคุณรวบรวมพจนานุกรมขนาดเล็กจำนวนมาก คุณสามารถรวม เรียงลำดับ และขจัดความซ้ำซ้อนของพจนานุกรมขนาดเล็กเพื่อให้ได้พจนานุกรมขนาดใหญ่สำหรับการระเบิด hashcat หากพจนานุกรมขนาดเล็กอยู่ในไดเร็กทอรีเดียวกัน คุณสามารถทำได้โดยใช้คำสั่งเดียว:
cat * | เรียงลำดับ | uniq > Merge.dicจะเกิดอะไรขึ้นหากพจนานุกรมขนาดเล็กถูกจัดระเบียบตามหมวดหมู่และกระจายในไดเร็กทอรีหลายชั้น? เห็นได้ชัดว่าการใช้คำสั่ง cat เพียงอย่างเดียวไม่เพียงพอ แต่จริงๆ แล้วต้องใช้คำสั่งเดียวเท่านั้น สมมติว่าพจนานุกรมขนาดเล็กทั้งหมดถูกจัดเก็บไว้ในไดเร็กทอรี MyDictionary คำสั่งสามารถเขียนได้ดังนี้:
find ./MyDictionary -type f -exec cat {} \; | เรียงลำดับ | uniq > Merge.dic