Łamanie haseł (ważne w OS 10.8 i nowszych)
Najpierw chcę wyjaśnić twoje polecenie:
sudo defaults read /var/db/dslocal/nodes/Default/users/user.plist ShadowHashData|tr -dc 0-9a-f|xxd -r -p|plutil -convert xml1 - -o -
Pierwsza część polecenia czyta klucz ShadowHashData na liście
sudo defaults read /var/db/dslocal/nodes/Default/users/user.plist ShadowHashData
Wynik (głównie 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>
)
druga część polecenia tr -dc 0-9a-f
usuwa wszystko oprócz 0-9a-f.
Wynik (hex):
62706c6973743030d101025f101453414c5445442d5348413531322d50424b444632d303040506070857656e74726f70795473616c745a697465726174696f6e734f1080c5f198639915a101c99af326dffe13e8f14456be8fd2312a39a777b92178804e204ca4fee12a8667871440eff4288e811d86d746c6d96a60c919c3418dfebba42f329f5d73c0372d636d61d5dfda1add61af36c70e4acd771276107209e643ae92a0f43e95a452744e50fb4540d9bdf4e0b701725d7db488fbe18c1ab7737c6b4f10200dba6246bd38266b2e827ff7e7271380757c71d653893aa361d590239830236911c160080b2229313641c4e700000000000001010000000000000009000000000000000000000000000000ea
trzecia część xxd -r -p
przekształca go w (źle sformułowany) plik binarny:
?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?? ?
a ostatnia część plutil -convert xml1 - -o -
tworzy dobrze sformułowany plik 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>
Aby uzyskać prawdziwy plik, zastąp -o -
go-o ~/Desktop/tempuser.plist
Plist zawiera trzy kluczowe części: iteracje , entropię i sól .
iteracje to tylko liczba całkowita, ale entropia i sól są zakodowane w base64. Aby kontynuować pracę z nimi, musisz je zdekodować i xxd:
Aby zdekodować sól, usuń wszystkie spacje i nowe wiersze z części danych i użyj
echo "salt_data" | base64 -D | xxd -p | tr -d \\n > salt
Z moimi danymi powyżej to
echo "DbpiRr04Jmsugn/35ycTgHV8cdZTiTqjYdWQI5gwI2k=" | base64 -D | xxd -p | tr -d \\n > ~/Desktop/salt
z wynikiem soli (hex):
0dba6246bd38266b2e827ff7e7271380757c71d653893aa361d5902398302369
To samo dotyczy entropii:
echo "xfGYY5kVoQHJmvMm3/4T6PFEVr6P0jEqOad3uSF4gE4gTKT+4SqGZ4cUQO/0KI6BHYbXRsbZamDJGcNBjf67pC8yn11zwDctY21h1d/aGt1hrzbHDkrNdxJ2EHIJ5kOukqD0PpWkUnROUPtFQNm99OC3AXJdfbSI++GMGrdzfGs=" | base64 -D | xxd -p | tr -d \\n > ~/Desktop/entropy
z wynikiem entropii (hex):
c5f198639915a101c99af326dffe13e8f14456be8fd2312a39a777b92178804e204ca4fee12a8667871440eff4288e811d86d746c6d96a60c919c3418dfebba42f329f5d73c0372d636d61d5dfda1add61af36c70e4acd771276107209e643ae92a0f43e95a452744e50fb4540d9bdf4e0b701725d7db488fbe18c1ab7737c6b
Jeśli potrzebujesz pliku tekstowego, aby hashcat złamał hasło, musisz połączyć znalezione dane mieszania w jeden ciąg:
$ml$<iterations(integer)>$<salt(hex)>$<entropy(hex)>
W moim przykładzie dane mieszające, które:
$ml$49504$0dba6246bd38266b2e827ff7e7271380757c71d653893aa361d5902398302369$c5f198639915a101c99af326dffe13e8f14456be8fd2312a39a777b92178804e204ca4fee12a8667871440eff4288e811d86d746c6d96a60c919c3418dfebba42f329f5d73c0372d636d61d5dfda1add61af36c70e4acd771276107209e643ae92a0f43e95a452744e50fb4540d9bdf4e0b701725d7db488fbe18c1ab7737c6b
Zapisz to w pliku o nazwie hash.txt i użyj go w hashcat. Prawidłowe polecenie brute force do znalezienia hasła (= moje proste hasło testowe zawierające tylko 4 cyfry) to:
./hashcat-cli64.app -m 7100 hash.txt -a 3 ?d?d?d?d
Wynikowe hasło po 3 minutach łamania (na maszynie wirtualnej) to 1111 .
Teraz odwrotnie: tworzenie ShadowHashData (ważne w OS 10.8 i nowszych)
To wyjaśnia, dlaczego nie można użyć prostego generatora skrótu SHA512 do utworzenia danych „hasła”. SHA512 jest jednak nadal ważny. Tło wyjaśniono tutaj: PBKDF2-Key_derivation_process .
Potrzebujesz:
- PRF jest pseudolosową funkcją dwóch parametrów o długości wyjściowej hLen (np. Kluczowany HMAC)
- Hasło to hasło główne, z którego generowany jest klucz pochodny
- Sól to sekwencja bitów, znana jako sól kryptograficzna
- c jest liczbą pożądanych iteracji
- dkLen jest pożądaną długością klucza pochodnego
utworzyć DK = PBKDF2 (PRF, hasło, sól, c, dkLen)
Aby utworzyć DK ~ klucz entropii w SALTED-SHA512-PBKDF2 (jedyna część listy pośredniej, która opiera się na haśle), użyj php hash_pbkdf2 :
string hash_pbkdf2 ( string $algo , string $password , string $salt , int $iterations [, int $length = 0 [, bool $raw_output = false ]] )
W Terminalu (potrzebny jest PHP is 5.5) wpisz:
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 >
Łańcuch używany w $ salt jest ucieczką heksadecymalną (\ x) prezentacji salt (hex):
0dba6246 ... -> \ x0d \ xba \ x62 \ x46 ...
Ponieważ możesz zdefiniować lub znać algorytm skrótu (musi to być sha512 dla komputerów Mac 10.8 i nowszych), iteracje (liczba większa od zera i mniejsza niż 2 ^ 32-1), sól (długość 64 bajtów hex, ale losowa!) I długość (256 bajtów) możesz utworzyć dobrze uformowany pośredni plik plist, odwracając wszystkie powyższe polecenia.
Odwracając swoje polecenie (lepiej: każda z podkomend) od pierwszego kroku, możesz utworzyć dane klucza ShadowHashData w oryginalnym pędzie za pomocą pisma pośredniego.
I aby w końcu odpowiedzieć na twoje pytanie: algorytm mieszający używany do przetwarzania hasła OS X (i innych danych takich jak sól) to SHA512. Ale nie możesz powiedzieć, że twoje hasło użytkownika jest przechowywane jako skrót SHA512 .
Twoje hasło i sól są wielokrotnie grillowane przez sha512, a następnie wynik jest base64'ed i odwrotnie xxd'ed. Wraz z solą i iteracjami jest ponownie xxd'ed i base64'ed.
Mam nadzieję, że nie zapomniałem o żadnym kroku.
SALTED-SHA512-PBKDF2
(OS X 10.10)!