Passwort-Cracking (gültig ab OS 10.8)
Zuerst möchte ich Ihren Befehl erklären:
sudo defaults read /var/db/dslocal/nodes/Default/users/user.plist ShadowHashData|tr -dc 0-9a-f|xxd -r -p|plutil -convert xml1 - -o -
Der erste Teil des Befehls liest den Schlüssel ShadowHashData in der Plist
sudo defaults read /var/db/dslocal/nodes/Default/users/user.plist ShadowHashData
Ergebnis (meist 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>
)
Der zweite Teil des Befehls tr -dc 0-9a-f
entfernt alles außer 0-9a-f.
Ergebnis (hex):
62706c6973743030d101025f101453414c5445442d5348413531322d50424b444632d303040506070857656e74726f70795473616c745a697465726174696f6e734f1080c5f198639915a101c99af326dffe13e8f14456be8fd2312a39a777b92178804e204ca4fee12a8667871440eff4288e811d86d746c6d96a60c919c3418dfebba42f329f5d73c0372d636d61d5dfda1add61af36c70e4acd771276107209e643ae92a0f43e95a452744e50fb4540d9bdf4e0b701725d7db488fbe18c1ab7737c6b4f10200dba6246bd38266b2e827ff7e7271380757c71d653893aa361d590239830236911c160080b2229313641c4e700000000000001010000000000000009000000000000000000000000000000ea
Der dritte Teil setzt xxd -r -p
es in eine (fehlerhafte) Binärdatei um:
?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?? ?
und der letzte Teil plutil -convert xml1 - -o -
erstellt eine wohlgeformte XML-Liste:
<?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>
Um eine echte Datei zu erhalten, ersetzen Sie diese -o -
durch-o ~/Desktop/tempuser.plist
Die Liste enthält drei Schlüsselteile : Iterationen , Entropie und Salz .
Iterationen sind nur eine ganze Zahl, aber Entropie und Salt sind Base64-codiert. Um mit ihnen weiterarbeiten zu können, müssen Sie sie dekodieren und xxdieren:
Um salt zu dekodieren, entfernen Sie alle Leerzeichen und neuen Zeilen aus dem Datenteil und verwenden Sie
echo "salt_data" | base64 -D | xxd -p | tr -d \\n > salt
Mit meinen Daten darüber ist das
echo "DbpiRr04Jmsugn/35ycTgHV8cdZTiTqjYdWQI5gwI2k=" | base64 -D | xxd -p | tr -d \\n > ~/Desktop/salt
mit dem Salz (hex) Ergebnis:
0dba6246bd38266b2e827ff7e7271380757c71d653893aa361d5902398302369
Das gleiche gilt für die Entropie:
echo "xfGYY5kVoQHJmvMm3/4T6PFEVr6P0jEqOad3uSF4gE4gTKT+4SqGZ4cUQO/0KI6BHYbXRsbZamDJGcNBjf67pC8yn11zwDctY21h1d/aGt1hrzbHDkrNdxJ2EHIJ5kOukqD0PpWkUnROUPtFQNm99OC3AXJdfbSI++GMGrdzfGs=" | base64 -D | xxd -p | tr -d \\n > ~/Desktop/entropy
mit dem entropie (hex) ergebnis:
c5f198639915a101c99af326dffe13e8f14456be8fd2312a39a777b92178804e204ca4fee12a8667871440eff4288e811d86d746c6d96a60c919c3418dfebba42f329f5d73c0372d636d61d5dfda1add61af36c70e4acd771276107209e643ae92a0f43e95a452744e50fb4540d9bdf4e0b701725d7db488fbe18c1ab7737c6b
Wenn Sie eine Textdatei für hashcat benötigen , um das Kennwort zu knacken, müssen Sie die gefundenen Hashdaten in einer einzigen Zeichenfolge kombinieren:
$ml$<iterations(integer)>$<salt(hex)>$<entropy(hex)>
Mit meinen Beispiel-Hash-Daten ist das:
$ml$49504$0dba6246bd38266b2e827ff7e7271380757c71d653893aa361d5902398302369$c5f198639915a101c99af326dffe13e8f14456be8fd2312a39a777b92178804e204ca4fee12a8667871440eff4288e811d86d746c6d96a60c919c3418dfebba42f329f5d73c0372d636d61d5dfda1add61af36c70e4acd771276107209e643ae92a0f43e95a452744e50fb4540d9bdf4e0b701725d7db488fbe18c1ab7737c6b
Speichern Sie diese in einer Datei mit dem Namen hash.txt und verwenden Sie sie in hashcat. Der richtige Brute-Force-Befehl zum Auffinden des Passworts (= mein einfaches Testpasswort, das nur 4 Ziffern enthält) lautet:
./hashcat-cli64.app -m 7100 hash.txt -a 3 ?d?d?d?d
Das resultierende Passwort nach 3 Minuten Cracken (in einer VM) ist 1111 .
Nun das Gegenteil: Erstellen von ShadowHashData (gültig ab OS 10.8)
Dies erklärt, warum Sie keinen einfachen SHA512-Hash-Generator verwenden können, um Ihre "Passwort" -Daten zu erstellen. SHA512 ist dennoch wichtig. Der Hintergrund wird hier erklärt: PBKDF2-Key_derivation_process .
Du brauchst:
- PRF ist eine Pseudozufallsfunktion von zwei Parametern mit der Ausgabelänge hLen (z. B. ein getasteter HMAC)
- Passwort ist das Master-Passwort, aus dem ein abgeleiteter Schlüssel generiert wird
- Salz ist eine Folge von Bits, die als kryptografisches Salz bezeichnet wird
- c ist die Anzahl der gewünschten Iterationen
- dkLen ist die gewünschte Länge des abgeleiteten Schlüssels
DK = PBKDF2 erstellen (PRF, Passwort, Salt, c, dkLen)
Um DK ~ den Entropieschlüssel in SALTED-SHA512-PBKDF2 zu erstellen (der einzige Teil in der Zwischenliste, der sich auf Ihr Passwort stützt), verwenden Sie php hash_pbkdf2 :
string hash_pbkdf2 ( string $algo , string $password , string $salt , int $iterations [, int $length = 0 [, bool $raw_output = false ]] )
Im Terminal (PHP ⩾ 5.5 wird benötigt) geben Sie ein:
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 >
Die in $ salt verwendete Zeichenfolge ist die hexadezimale (\ x) Darstellung von salt (hex):
0dba6246 ... -> \ x0d \ xba \ x62 \ x46 ...
Da Sie den Hash-Algorithmus definieren oder kennen (er muss für Mac 10.8 und höher sha512 sein), Iterationen (eine Zahl größer als Null und kleiner als 2 ^ 32-1), Salt (Länge 64 Byte hex, aber zufällig!) Und Länge (256 Byte) Sie können eine wohlgeformte Plist-Zwischendatei erstellen, indem Sie alle obigen Befehle umkehren.
Indem Sie Ihren Befehl (besser: jeden der Unterbefehle) vom ersten Schritt an umkehren, können Sie die Daten des Schlüssels ShadowHashData in der ursprünglichen Liste mithilfe der Zwischenliste erstellen.
Und um Ihre Frage endlich zu beantworten: Der Hash-Algorithmus, mit dem das OS X-Passwort (und andere Daten wie das Salt) verarbeitet werden, ist SHA512. Sie können jedoch nicht sagen, dass Ihr Benutzerpasswort als SHA512-Hash gespeichert ist .
Dein Passwort und das Salz werden von sha512 viele Male gegrillt, dann ist das Ergebnis base64'ed und reverse xxd'ed. Zusammen mit dem Salt und den Iterationen ist es wieder xxd'ed und base64'ed.
Ich hoffe, ich habe keinen Schritt vergessen.
SALTED-SHA512-PBKDF2
(OS X 10.10)!