Как получить доступ к зашифрованному значению пароля локальной учетной записи пользователя в OSX? Можно ли будет проверить его или даже скопировать в другую учетную запись?
решение1
Хэши были в /var/db/shadow/hash/
версии 10.6 и более ранних версиях, но они сохраняются в /var/db/dslocal/nodes/Default/users/username.plist
версиях 10.7 и 10.8.
Вы можете распечатать хэш-данные с помощьюДэйв Грол( sudo dave -s $USER
) или что-то вроде этого:
sudo defaults read /var/db/dslocal/nodes/Default/users/$USER.plist ShadowHashData | tr -dc '0-9a-f ' | xxd -p -r | plutil -convert xml1 - -o -
Если включен автоматический вход в систему, пароль связки ключей входа также сохраняется в /etc/kcpassword
зашифрованном виде с использованием шифра XOR.
sudo ruby -e 'key = [125, 137, 82, 35, 210, 188, 221, 234, 163, 185, 31]; IO.read("/etc/kcpassword").bytes.each_with_index { |b, i| break if key[i % key.size]==(b); print [b ^ key[i % key.size]].pack("U*") }'
решение2
Я не так уж много знаю об этом, но из того, что мне удалось узнать, используя opensnoop
:
login
обращается к локальной службе каталогов (возможно, это связано с некоторыми вещами Kerberos — возможно , это базовая реализация для локального каталога, она читает /Library/Preferences/edu.mit.Kerberos
, и т. д.)./etc/krb5.conf
/usr/etc/krb5.conf
dscl
, утилита командной строки службы каталогов, затем cd Local/Default/Users/yourusername
, read
показывает обычную информацию, связанную с учетными записями Unix, а также: GeneratedUID: 1A5EF9B7-4DB6-4C01-919A-xxxxx
(не знаю последствий, поэтому немного отцензурировал) — вы также можете прочитать этот UUID Accounts.prefPane
через System Preferences.app
.
Который соответствует имени файла в/private/var/db/shadow/hash/
также доступен login
!
Думаю, лучшим вариантом будет переименовать/скопировать файлы с измененным именем GeneratedUID
или изменить ссылку в службе каталогов.
Включил все мои «исследования», чтобы вы могли проследить мои шаги и обеспечить опровержение.
У меня нет времени на удаление и восстановление своих учетных записей, так что теперь вы сами по себе. Удачи.
TLDR: Откройте Accounts.prefPane
, проверьте UUID
(щелкните правой кнопкой мыши по имени пользователя в списке) и найдите файл с таким именем в /private/var/db/shadow/hash/
. Не знаю, работает ли этосовсем. Удачи.