Взлом пароля (действует в 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 в plist
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
возвращает его в (неправильно сформированный) двоичный файл:
?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 -
создает правильно сформированный список 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
Список содержит три ключевые части: итерации , энтропия и соль .
Итерации - это просто целое число, но энтропия и соль кодируются в base64. Чтобы продолжить работу с ними, вы должны их декодировать и xxd:
Для декодирования соли удалите все пробелы и новые строки из части данных и используйте
echo "salt_data" | base64 -D | xxd -p | tr -d \\n > salt
С моими данными выше это
echo "DbpiRr04Jmsugn/35ycTgHV8cdZTiTqjYdWQI5gwI2k=" | base64 -D | xxd -p | tr -d \\n > ~/Desktop/salt
с результатом соли (гекс):
0dba6246bd38266b2e827ff7e7271380757c71d653893aa361d5902398302369
То же самое для энтропии:
echo "xfGYY5kVoQHJmvMm3/4T6PFEVr6P0jEqOad3uSF4gE4gTKT+4SqGZ4cUQO/0KI6BHYbXRsbZamDJGcNBjf67pC8yn11zwDctY21h1d/aGt1hrzbHDkrNdxJ2EHIJ5kOukqD0PpWkUnROUPtFQNm99OC3AXJdfbSI++GMGrdzfGs=" | base64 -D | xxd -p | tr -d \\n > ~/Desktop/entropy
с энтропийным (шестнадцатеричным) результатом:
c5f198639915a101c99af326dffe13e8f14456be8fd2312a39a777b92178804e204ca4fee12a8667871440eff4288e811d86d746c6d96a60c919c3418dfebba42f329f5d73c0372d636d61d5dfda1add61af36c70e4acd771276107209e643ae92a0f43e95a452744e50fb4540d9bdf4e0b701725d7db488fbe18c1ab7737c6b
Если вам нужен текстовый файл для хэширования, чтобы взломать пароль, вы должны объединить найденные хеш-данные в одну строку:
$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-х минутного взлома (в ВМ) - 1111 .
Теперь обратное: создание ShadowHashData (действует в OS 10.8 и новее)
Это объясняет, почему вы не можете использовать простой генератор хеша SHA512 для создания ваших данных «пароля». SHA512 все еще важен, хотя. Фон объясняется здесь: PBKDF2-Key_derivation_process .
Тебе нужно:
- PRF - это псевдослучайная функция двух параметров с выходной длиной hLen (например, HMAC с ключом)
- Пароль - главный пароль, из которого генерируется производный ключ
- Соль - это последовательность битов, известная как криптографическая соль
- с число желаемых итераций
- 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, представляет собой экранированное шестнадцатеричное (\ x) представление соли (hex):
0dba6246 ... -> \ x0d \ xba \ x62 \ x46 ...
Так как вы можете определить или знать алгоритм хеширования (это должно быть sha512 для Mac 10.8 и более поздних версий), итерации (число больше нуля и меньше 2 ^ 32-1), соль (длина шестнадцатеричного байта, но случайное! 64 байта) и длиной (256 байт) вы можете создать правильно сформированный промежуточный файл plist, изменив все приведенные выше команды.
Путем изменения вашей команды (лучше: каждой из подкоманд) с самого первого шага вы можете создать данные ключа ShadowHashData в исходном списке, используя промежуточный список.
И, наконец, чтобы ответить на ваш вопрос: алгоритм хэширования, используемый для обработки пароля OS X (и других данных, таких как соль), - это SHA512. Но вы не можете сказать, что ваш пароль пользователя хранится как хэш SHA512 .
Ваш пароль и соль многократно жарятся sha512, затем результат base64 и обратный xxd. Вместе с солью и итерациями он снова xxd и base64.
Я надеюсь, что я не забыл ни одного шага.
SALTED-SHA512-PBKDF2
(OS X 10.10)!