แคร็กรหัสผ่าน (ใช้ได้ใน OS 10.8 และใหม่กว่า)
ก่อนอื่นฉันต้องการอธิบายคำสั่งของคุณ:
sudo defaults read /var/db/dslocal/nodes/Default/users/user.plist ShadowHashData|tr -dc 0-9a-f|xxd -r -p|plutil -convert xml1 - -o -
ส่วนแรกของคำสั่งจะอ่านคีย์ShadowHashDataในการวางแผน
sudo defaults read /var/db/dslocal/nodes/Default/users/user.plist ShadowHashData
ผลลัพธ์ (ส่วนใหญ่เป็นเลขฐานสิบหก):
(
<62706c69 73743030 d101025f 10145341 4c544544 2d534841 3531322d 50424b44 4632d303 04050607 0857656e 74726f70 79547361 6c745a69 74657261 74696f6e 734f1080 c5f19863 9915a101 c99af326 dffe13e8 f14456be 8fd2312a 39a777b9 2178804e 204ca4fe e12a8667 871440ef f4288e81 1d86d746 c6d96a60 c919c341 8dfebba4 2f329f5d 73c0372d 636d61d5 dfda1add 61af36c7 0e4acd77 12761072 09e643ae 92a0f43e 95a45274 4e50fb45 40d9bdf4 e0b70172 5d7db488 fbe18c1a b7737c6b 4f10200d ba6246bd 38266b2e 827ff7e7 27138075 7c71d653 893aa361 d5902398 30236911 c160080b 22293136 41c4e700 00000000 00010100 00000000 00000900 00000000 00000000 00000000 0000ea>
)
ส่วนที่สองของคำสั่งtr -dc 0-9a-f
ลบสิ่งใด ๆ ยกเว้น 0-9a-f
ผลลัพธ์ (ฐานสิบหก):
62706c6973743030d101025f101453414c5445442d5348413531322d50424b444632d303040506070857656e74726f70795473616c745a697465726174696f6e734f1080c5f198639915a101c99af326dffe13e8f14456be8fd2312a39a777b92178804e204ca4fee12a8667871440eff4288e811d86d746c6d96a60c919c3418dfebba42f329f5d73c0372d636d61d5dfda1add61af36c70e4acd771276107209e643ae92a0f43e95a452744e50fb4540d9bdf4e0b701725d7db488fbe18c1ab7737c6b4f10200dba6246bd38266b2e827ff7e7271380757c71d653893aa361d590239830236911c160080b2229313641c4e700000000000001010000000000000009000000000000000000000000000000ea
ส่วนที่สามเปลี่ยนเป็นxxd -r -p
ไบนารี่ (mal-formed):
?bF?8&k.???'?u|q?S?:?aՐ#?0#i?`WentropyTsaltZiterationsO???c??ɚ?&????DV???1*9?w?!x?N L???*?g?@??(????F??j`??A????/2?]s?7-cma????a?6?J?wvr ?C????>??RtNP?E@ٽ??r]}?????s|kO ")16A?? ?
และส่วนสุดท้ายplutil -convert xml1 - -o -
สร้าง plist xml ที่มีรูปแบบถูกต้อง:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SALTED-SHA512-PBKDF2</key>
<dict>
<key>entropy</key>
<data>
xfGYY5kVoQHJmvMm3/4T6PFEVr6P0jEqOad3uSF4gE4gTKT+4SqGZ4cUQO/0
KI6BHYbXRsbZamDJGcNBjf67pC8yn11zwDctY21h1d/aGt1hrzbHDkrNdxJ2
EHIJ5kOukqD0PpWkUnROUPtFQNm99OC3AXJdfbSI++GMGrdzfGs=
</data>
<key>iterations</key>
<integer>49504</integer>
<key>salt</key>
<data>
DbpiRr04Jmsugn/35ycTgHV8cdZTiTqjYdWQI5gwI2k=
</data>
</dict>
</dict>
</plist>
ที่จะได้รับไฟล์จริงแทนที่-o -
โดย-o ~/Desktop/tempuser.plist
plist มีสามที่สำคัญส่วนการทำซ้ำ , เอนโทรปีและเกลือ
การวนซ้ำเป็นจำนวนเต็ม แต่เอนโทรปีและเกลือเป็นเบสที่เข้ารหัส 64 หากต้องการทำงานกับพวกเขาต่อไปคุณต้องถอดรหัสและ xxd พวกเขา:
หากต้องการถอดรหัสเกลือให้ลบช่องว่างและบรรทัดใหม่ทั้งหมดออกจากส่วนข้อมูลและการใช้งาน
echo "salt_data" | base64 -D | xxd -p | tr -d \\n > salt
ด้วยข้อมูลของฉันข้างต้นนั่น
echo "DbpiRr04Jmsugn/35ycTgHV8cdZTiTqjYdWQI5gwI2k=" | base64 -D | xxd -p | tr -d \\n > ~/Desktop/salt
ด้วยผลลัพธ์ของเกลือ (hex):
0dba6246bd38266b2e827ff7e7271380757c71d653893aa361d5902398302369
เช่นเดียวกันกับเอนโทรปี:
echo "xfGYY5kVoQHJmvMm3/4T6PFEVr6P0jEqOad3uSF4gE4gTKT+4SqGZ4cUQO/0KI6BHYbXRsbZamDJGcNBjf67pC8yn11zwDctY21h1d/aGt1hrzbHDkrNdxJ2EHIJ5kOukqD0PpWkUnROUPtFQNm99OC3AXJdfbSI++GMGrdzfGs=" | base64 -D | xxd -p | tr -d \\n > ~/Desktop/entropy
ด้วยผลลัพธ์ของเอนโทรปี (hex):
c5f198639915a101c99af326dffe13e8f14456be8fd2312a39a777b92178804e204ca4fee12a8667871440eff4288e811d86d746c6d96a60c919c3418dfebba42f329f5d73c0372d636d61d5dfda1add61af36c70e4acd771276107209e643ae92a0f43e95a452744e50fb4540d9bdf4e0b701725d7db488fbe18c1ab7737c6b
หากคุณต้องการไฟล์ข้อความสำหรับhashcatเพื่อถอดรหัสรหัสผ่านคุณต้องรวมข้อมูลแฮชที่คุณพบในสตริงเดียว:
$ml$<iterations(integer)>$<salt(hex)>$<entropy(hex)>
ด้วยข้อมูลแฮชตัวอย่างของฉัน:
$ml$49504$0dba6246bd38266b2e827ff7e7271380757c71d653893aa361d5902398302369$c5f198639915a101c99af326dffe13e8f14456be8fd2312a39a777b92178804e204ca4fee12a8667871440eff4288e811d86d746c6d96a60c919c3418dfebba42f329f5d73c0372d636d61d5dfda1add61af36c70e4acd771276107209e643ae92a0f43e95a452744e50fb4540d9bdf4e0b701725d7db488fbe18c1ab7737c6b
บันทึกสิ่งนี้ลงในไฟล์ชื่อ hash.txt และใช้ใน hashcat คำสั่ง brute force ที่เหมาะสมเพื่อค้นหารหัสผ่าน (= รหัสผ่านการทดสอบอย่างง่ายของฉันมีเพียง 4 หลัก) คือ:
./hashcat-cli64.app -m 7100 hash.txt -a 3 ?d?d?d?d
รหัสผ่านที่เกิดหลังจาก 3 นาทีแตก (ใน VM) เป็น1111
ตอนนี้ย้อนกลับ: การสร้าง ShadowHashData (ใช้ได้ใน OS 10.8 และใหม่กว่า)
สิ่งนี้จะอธิบายว่าทำไมคุณไม่สามารถใช้ตัวสร้างแฮช SHA512 อย่างง่ายเพื่อสร้างข้อมูล "รหัสผ่าน" ของคุณ แม้ว่า SHA512 ยังมีความสำคัญ พื้นหลังจะมีการอธิบายที่นี่: PBKDF2-Key_derivation_process
คุณต้องการ:
- PRF เป็นฟังก์ชันหลอกเทียมของพารามิเตอร์สองตัวที่มีความยาวเอาต์พุต hLen (เช่น HMAC แบบคีย์)
- รหัสผ่านเป็นรหัสผ่านหลักที่สร้างรหัสที่ได้รับ
- เกลือเป็นลำดับของบิตที่รู้จักกันในชื่อเกลือเข้ารหัส
- c คือจำนวนการวนซ้ำที่ต้องการ
- dkLen คือความยาวที่ต้องการของคีย์ที่ได้รับ
เพื่อสร้าง DK = PBKDF2 (PRF, รหัสผ่าน, เกลือ, c, dkLen)
ในการสร้าง DK ~ คีย์เอนโทรปีใน SALTED-SHA512-PBKDF2 (ส่วนเดียวในโปรแกรมกลางที่ใช้รหัสผ่านของคุณ) ให้ใช้php hash_pbkdf2 :
string hash_pbkdf2 ( string $algo , string $password , string $salt , int $iterations [, int $length = 0 [, bool $raw_output = false ]] )
ในเทอร์มินัล (จำเป็นต้องใช้ PHP ⩾ 5.5) ให้ป้อน:
php -a
Interactive shell
php > $password = "1111";
php > $iterations = 49504;
php > $length = 256;
php > $salt = "\x0d\xba\x62\x46\xbd\x38\x26\x6b\x2e\x82\x7f\xf7\xe7\x27\x13\x80\x75\x7c\x71\xd6\x53\x89\x3a\xa3\x61\xd5\x90\x23\x98\x30\x23\x69";
php > $hash = hash_pbkdf2("sha512", $password, $salt, $iterations, $length);
php > echo $hash;
c5f198639915a101c99af326dffe13e8f14456be8fd2312a39a777b92178804e204ca4fee12a8667871440eff4288e811d86d746c6d96a60c919c3418dfebba42f329f5d73c0372d636d61d5dfda1add61af36c70e4acd771276107209e643ae92a0f43e95a452744e50fb4540d9bdf4e0b701725d7db488fbe18c1ab7737c6b
php >
สตริงที่ใช้ใน $ salt เป็นการนำเสนอ hex (\ x) escaped ของเกลือ (hex):
0dba6246 ... -> \ x0d \ xba \ x62 \ x46 ...
เนื่องจากคุณสามารถกำหนดหรือรู้อัลกอริธึมการแฮช (ต้องเป็น sha512 สำหรับ Mac 10.8 และใหม่กว่า) การทำซ้ำ (จำนวนที่มากกว่าศูนย์และเล็กกว่า 2 ^ 32-1) เกลือ (ความยาว 64 ไบต์ฐานสิบหก แต่สุ่ม!) และlength (256 byte) คุณสามารถสร้างไฟล์ plist กลางที่มีรูปแบบที่ดีโดยการกลับคำสั่งทั้งหมดข้างต้น
โดยการย้อนกลับคำสั่งของคุณ (ดีกว่า: คำสั่งย่อยแต่ละคำสั่ง) จากขั้นตอนแรกคุณสามารถสร้างข้อมูลของคีย์ShadowHashDataในPlistดั้งเดิมโดยใช้Plistระดับกลาง
และเพื่อตอบคำถามของคุณในที่สุด: อัลกอริทึมแฮชที่ใช้ในการประมวลผลรหัสผ่าน OS X (และข้อมูลอื่น ๆ เช่นเกลือ) คือ SHA512 แต่คุณไม่สามารถพูดได้ว่าผู้ใช้รหัสผ่านของคุณจะถูกเก็บเป็นSHA512 กัญชา
รหัสผ่านและเกลือของคุณถูกย่างด้วย sha512 หลายครั้งจากนั้นผลลัพธ์จะเป็นเบส 64'ed และย้อนกลับ xxd'ed เมื่อรวมกับเกลือและการทำซ้ำมันจึงเป็น xxd'ed และ base64'ed อีกครั้ง
ฉันหวังว่าฉันจะไม่ลืมขั้นตอนใด ๆ
SALTED-SHA512-PBKDF2
(OS X 10.10)!