Craquage de mots de passe (valable dans OS 10.8 et plus récent)
Je veux d'abord expliquer votre commande :
sudo defaults read /var/db/dslocal/nodes/Default/users/user.plist ShadowHashData|tr -dc 0-9a-f|xxd -r -p|plutil -convert xml1 - -o -
La première partie de la commande lit la clé ShadowHashData dans la liste
sudo defaults read /var/db/dslocal/nodes/Default/users/user.plist ShadowHashData
Résultat (surtout hexagonal) :
(
<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>
)
la deuxième partie de la commande tr -dc 0-9a-f
supprime tout sauf 0-9a-f.
Résultat (hex) :
62706c6973743030d101025f101453414c5445442d5348413531322d50424b444632d303040506070857656e74726f70795473616c745a697465726174696f6e734f1080c5f198639915a101c99af326dffe13e8f14456be8fd2312a39a777b92178804e204ca4fee12a8667871440eff4288e811d86d746c6d96a60c919c3418dfebba42f329f5d73c0372d636d61d5dfda1add61af36c70e4acd771276107209e643ae92a0f43e95a452744e50fb4540d9bdf4e0b701725d7db488fbe18c1ab7737c6b4f10200dba6246bd38266b2e827ff7e7271380757c71d653893aa361d590239830236911c160080b2229313641c4e700000000000001010000000000000009000000000000000000000000000000ea
la troisième partie xxd -r -p
le ramène à un binaire (mal formé) :
?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?? ?
et la dernière partie plutil -convert xml1 - -o -
crée un plist xml bien formé :
<?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>
Pour obtenir un fichier réel, remplacez -o -
par -o ~/Desktop/tempuser.plist
La plist contient trois clé pièces : itérations , entropie y sel .
itérations est juste un nombre entier, mais entropie y sel sont codés en base64. Pour continuer à travailler avec eux, vous devez les décoder et les xxd :
Pour décoder sel supprime tous les espaces et les nouvelles lignes de la partie données et utilise
echo "salt_data" | base64 -D | xxd -p | tr -d \\n > salt
Avec mes données ci-dessus, c'est
echo "DbpiRr04Jmsugn/35ycTgHV8cdZTiTqjYdWQI5gwI2k=" | base64 -D | xxd -p | tr -d \\n > ~/Desktop/salt
avec le résultat du sel(hex) :
0dba6246bd38266b2e827ff7e7271380757c71d653893aa361d5902398302369
Il en va de même pour l'entropie :
echo "xfGYY5kVoQHJmvMm3/4T6PFEVr6P0jEqOad3uSF4gE4gTKT+4SqGZ4cUQO/0KI6BHYbXRsbZamDJGcNBjf67pC8yn11zwDctY21h1d/aGt1hrzbHDkrNdxJ2EHIJ5kOukqD0PpWkUnROUPtFQNm99OC3AXJdfbSI++GMGrdzfGs=" | base64 -D | xxd -p | tr -d \\n > ~/Desktop/entropy
avec le résultat de l'entropie(hex) :
c5f198639915a101c99af326dffe13e8f14456be8fd2312a39a777b92178804e204ca4fee12a8667871440eff4288e811d86d746c6d96a60c919c3418dfebba42f329f5d73c0372d636d61d5dfda1add61af36c70e4acd771276107209e643ae92a0f43e95a452744e50fb4540d9bdf4e0b701725d7db488fbe18c1ab7737c6b
Si vous avez besoin d'un fichier texte pour hashcat pour craquer le mot de passe, vous devez combiner les données de hachage que vous avez trouvées en une seule chaîne :
$ml$<iterations(integer)>$<salt(hex)>$<entropy(hex)>
Avec mon exemple de données de hachage, c'est :
$ml$49504$0dba6246bd38266b2e827ff7e7271380757c71d653893aa361d5902398302369$c5f198639915a101c99af326dffe13e8f14456be8fd2312a39a777b92178804e204ca4fee12a8667871440eff4288e811d86d746c6d96a60c919c3418dfebba42f329f5d73c0372d636d61d5dfda1add61af36c70e4acd771276107209e643ae92a0f43e95a452744e50fb4540d9bdf4e0b701725d7db488fbe18c1ab7737c6b
Sauvegardez-le dans un fichier nommé hash.txt et utilisez-le dans hashcat. La commande de force brute appropriée pour trouver le mot de passe (=mon simple mot de passe de test ne contenant que 4 chiffres) est :
./hashcat-cli64.app -m 7100 hash.txt -a 3 ?d?d?d?d
Le mot de passe obtenu après 3 minutes de craquage (dans une VM) est le suivant 1111 .
Maintenant, l'inverse : Création de ShadowHashData (valable dans OS 10.8 et plus récent)
Cela explique pourquoi vous ne pouvez pas utiliser un simple générateur de hachage SHA512 pour créer vos données de "mot de passe". SHA512 reste néanmoins important. Le contexte est expliqué ici : Processus de dérivation de la clé PBKDF2 .
Vous avez besoin :
- PRF est une fonction pseudo-aléatoire de deux paramètres avec une longueur de sortie hLen (par exemple, un HMAC à clé).
- Le mot de passe est le mot de passe principal à partir duquel une clé dérivée est générée.
- Le sel est une séquence de bits, connue sous le nom de sel cryptographique.
- c est le nombre d'itérations souhaité
- dkLen est la longueur souhaitée de la clé dérivée
pour créer DK = PBKDF2(PRF, Password, Salt, c, dkLen)
Pour créer DK ~ le entropie dans SALTED-SHA512-PBKDF2 (la seule partie de la plist intermédiaire qui repose sur votre mot de passe), utilisez php hash_pbkdf2 :
string hash_pbkdf2 ( string $algo , string $password , string $salt , int $iterations [, int $length = 0 [, bool $raw_output = false ]] )
Dans le Terminal (PHP 5.5 est nécessaire) entrez :
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 >
La chaîne utilisée dans $salt est l'hexagone échappé ( \x ) présentation du sel(hex) :
0dba6246... -> \x0d\xba\x62\x46...
Puisque vous pouvez définir ou connaître l'algorithme de hachage (il doit être sha512 pour Mac 10.8 et plus), itérations (un nombre supérieur à zéro et inférieur à 2^32-1), sel (longueur 64 octets hexa mais aléatoire !) et longueur (256 octets), vous pouvez créer un fichier plist intermédiaire bien formé, en inversant toutes les commandes ci-dessus.
En inversant votre commande (mieux : chacune des sous-commandes) dès la première étape, vous pouvez créer les données de la clé ShadowHashData dans la liste originale en utilisant la liste intermédiaire.
Et pour répondre enfin à votre question : l'algorithme de hachage utilisé pour traiter le mot de passe OS X (et d'autres données comme le sel) est SHA512. Mais vous ne pouvez pas dire que votre mot de passe utilisateur est stocké en tant que hachage SHA512 .
Votre mot de passe et le sel sont grillés par sha512 plusieurs fois, puis le résultat est édité en base64 et en reverse xxd. Avec le sel y el itérations c'est xxd'ed et base64'ed encore.
J'espère que je n'ai oublié aucune étape.
3 votes
Quel type de mot de passe OS X essayez-vous de craquer ? OS X 10.7/10.8 ? Parce que mon fichier dit
SALTED-SHA512-PBKDF2
(OS X 10.10) !0 votes
@klanomath OS X El Capitan ; et c'est ce qu'il dit, je n'étais pas sûr que PBKDF2 soit une donnée sensible. Est-ce que SALTED-SHA512-PBKDF2 est le type, et si oui, y a-t-il des fonctions/librairies c++ qui peuvent générer ce type ? (De préférence une fonction/librairie rapide)
0 votes
Je pensais que les hashs de mots de passe OS X étaient stockés dans
/var/db/shadow/hash
?1 votes
@tjt263 pas sur Yosemite+.