Peretas kata sandi (valid dalam OS 10.8 dan yang lebih baru)
Pertama saya ingin menjelaskan perintah Anda:
sudo defaults read /var/db/dslocal/nodes/Default/users/user.plist ShadowHashData|tr -dc 0-9a-f|xxd -r -p|plutil -convert xml1 - -o -
Bagian pertama dari perintah membaca ShadowHashData kunci dalam daftar
sudo defaults read /var/db/dslocal/nodes/Default/users/user.plist ShadowHashData
Hasil (kebanyakan hex):
(
<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>
)
bagian kedua dari perintah tr -dc 0-9a-f
menghapus apa pun kecuali 0-9a-f.
Hasil (hex):
62706c6973743030d101025f101453414c5445442d5348413531322d50424b444632d303040506070857656e74726f70795473616c745a697465726174696f6e734f1080c5f198639915a101c99af326dffe13e8f14456be8fd2312a39a777b92178804e204ca4fee12a8667871440eff4288e811d86d746c6d96a60c919c3418dfebba42f329f5d73c0372d636d61d5dfda1add61af36c70e4acd771276107209e643ae92a0f43e95a452744e50fb4540d9bdf4e0b701725d7db488fbe18c1ab7737c6b4f10200dba6246bd38266b2e827ff7e7271380757c71d653893aa361d590239830236911c160080b2229313641c4e700000000000001010000000000000009000000000000000000000000000000ea
bagian ketiga xxd -r -p
mengembalikannya ke biner (mal-pembentukan):
?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?? ?
dan bagian terakhir plutil -convert xml1 - -o -
membuat xist plist yang terbentuk dengan baik:
<?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>
Untuk mendapatkan file nyata, ganti -o -
dengan-o ~/Desktop/tempuser.plist
Plist berisi tiga bagian utama : iterasi , entropi dan garam .
iterasi hanyalah bilangan bulat, tetapi entropi dan garam dikodekan base64. Untuk terus bekerja dengan mereka, Anda harus memecahkan kode dan xxd:
Untuk memecahkan kode garam, hapus semua spasi dan baris baru dari bagian data dan gunakan
echo "salt_data" | base64 -D | xxd -p | tr -d \\n > salt
Dengan data saya di atas itu
echo "DbpiRr04Jmsugn/35ycTgHV8cdZTiTqjYdWQI5gwI2k=" | base64 -D | xxd -p | tr -d \\n > ~/Desktop/salt
dengan hasil garam (hex):
0dba6246bd38266b2e827ff7e7271380757c71d653893aa361d5902398302369
Hal yang sama untuk entropi:
echo "xfGYY5kVoQHJmvMm3/4T6PFEVr6P0jEqOad3uSF4gE4gTKT+4SqGZ4cUQO/0KI6BHYbXRsbZamDJGcNBjf67pC8yn11zwDctY21h1d/aGt1hrzbHDkrNdxJ2EHIJ5kOukqD0PpWkUnROUPtFQNm99OC3AXJdfbSI++GMGrdzfGs=" | base64 -D | xxd -p | tr -d \\n > ~/Desktop/entropy
dengan hasil entropi (hex):
c5f198639915a101c99af326dffe13e8f14456be8fd2312a39a777b92178804e204ca4fee12a8667871440eff4288e811d86d746c6d96a60c919c3418dfebba42f329f5d73c0372d636d61d5dfda1add61af36c70e4acd771276107209e643ae92a0f43e95a452744e50fb4540d9bdf4e0b701725d7db488fbe18c1ab7737c6b
Jika Anda memerlukan file teks untuk hashcat untuk memecahkan kata sandi, Anda harus menggabungkan data hash yang Anda temukan menjadi satu string:
$ml$<iterations(integer)>$<salt(hex)>$<entropy(hex)>
Dengan contoh data hash saya itu:
$ml$49504$0dba6246bd38266b2e827ff7e7271380757c71d653893aa361d5902398302369$c5f198639915a101c99af326dffe13e8f14456be8fd2312a39a777b92178804e204ca4fee12a8667871440eff4288e811d86d746c6d96a60c919c3418dfebba42f329f5d73c0372d636d61d5dfda1add61af36c70e4acd771276107209e643ae92a0f43e95a452744e50fb4540d9bdf4e0b701725d7db488fbe18c1ab7737c6b
Simpan ini ke file bernama hash.txt dan gunakan dalam hashcat. Perintah brute force yang tepat untuk menemukan kata sandi (= kata sandi tes sederhana saya yang hanya berisi 4 digit) adalah:
./hashcat-cli64.app -m 7100 hash.txt -a 3 ?d?d?d?d
Kata sandi yang dihasilkan setelah 3 menit cracking (dalam VM) adalah 1111 .
Sekarang kebalikannya: Menciptakan ShadowHashData (valid di OS 10.8 dan yang lebih baru)
Ini menjelaskan mengapa Anda tidak dapat menggunakan generator hash SHA512 sederhana untuk membuat data "kata sandi" Anda. SHA512 masih penting. Latar belakang dijelaskan di sini: proses PBKDF2-Key_derivation_ .
Anda membutuhkan:
- PRF adalah fungsi pseudorandom dari dua parameter dengan panjang output hLen (misalnya HMAC yang dikunci)
- Kata sandi adalah kata sandi utama dari mana kunci turunan dihasilkan
- Garam adalah urutan bit, yang dikenal sebagai garam kriptografi
- c adalah jumlah iterasi yang diinginkan
- dkLen adalah panjang yang diinginkan dari kunci yang diturunkan
untuk membuat DK = PBKDF2 (PRF, Kata Sandi, Garam, c, dkLen)
Untuk membuat DK ~ kunci entropi di SALTED-SHA512-PBKDF2 (satu-satunya bagian dalam papan perantara yang bergantung pada kata sandi Anda) gunakan php hash_pbkdf2 :
string hash_pbkdf2 ( string $algo , string $password , string $salt , int $iterations [, int $length = 0 [, bool $raw_output = false ]] )
Di Terminal (PHP ⩾ 5.5 diperlukan) masukkan:
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 >
String yang digunakan dalam $ salt adalah presentasi hex (\ x) dari salt (hex):
0dba6246 ... -> \ x0d \ xba \ x62 \ x46 ...
Karena Anda dapat mendefinisikan atau mengetahui algoritma hash (harus sha512 untuk Mac 10.8 dan yang lebih baru), iterasi (angka lebih besar dari nol dan lebih kecil dari 2 ^ 32-1), garam (panjang 64 byte hex tapi acak!) Dan length (256 byte) Anda dapat membuat file plist intermediate yang terbentuk dengan membalik semua perintah di atas.
Dengan membalikkan perintah Anda (lebih baik: masing-masing sub-perintah) dari langkah pertama Anda dapat membuat data dari ShadowHashData kunci dalam plist asli menggunakan plist perantara.
Dan untuk menjawab pertanyaan Anda akhirnya: algoritma hash yang digunakan untuk memproses kata sandi OS X (dan data lain seperti garam) adalah SHA512. Tapi Anda tidak bisa mengatakan kata sandi pengguna Anda disimpan sebagai hash SHA512 .
Kata sandi dan garam Anda dipanggang oleh sha512 berkali-kali, maka hasilnya adalah base64'ed dan reverse xxd'ed. Bersama dengan garam dan iterasi , xxd'ed dan base64'ed lagi.
Saya harap saya tidak melupakan langkah apa pun.
SALTED-SHA512-PBKDF2
(OS X 10.10)!