Como posso acessar o valor criptografado da senha de uma conta de usuário local no osx? Seria possível verificar ou até mesmo copiá-lo para outra conta?
Responder1
Os hashes estavam /var/db/shadow/hash/
na versão 10.6 e anteriores, mas estão armazenados /var/db/dslocal/nodes/Default/users/username.plist
na versão 10.7 e 10.8.
Você pode imprimir os dados hash comDave Grohl( sudo dave -s $USER
) ou algo parecido com isto:
sudo defaults read /var/db/dslocal/nodes/Default/users/$USER.plist ShadowHashData | tr -dc '0-9a-f ' | xxd -p -r | plutil -convert xml1 - -o -
Se o login automático estiver habilitado, a senha das chaves de login também será armazenada /etc/kcpassword
criptografada com cifra 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*") }'
Responder2
Não sei muito sobre isso, mas pelo que pude reunir usando opensnoop
:
login
acessa o serviço de diretório local (possivelmente relacionado a algumas coisas do Kerberos - talvez essa seja a implementação subjacente do diretório local, ele lê /Library/Preferences/edu.mit.Kerberos
, /etc/krb5.conf
etc. /usr/etc/krb5.conf
).
dscl
, o utilitário de linha de comando do serviço de diretório, então cd Local/Default/Users/yourusername
, read
revela o material usual relacionado à conta unixy, mais: GeneratedUID: 1A5EF9B7-4DB6-4C01-919A-xxxxx
(não sei as implicações, então censurei um pouco) - você também pode ler este UUID via Accounts.prefPane
in System Preferences.app
.
Isso corresponde a um nome de arquivo em/private/var/db/shadow/hash/
também acessado por login
!
Acho que sua melhor aposta é renomear/copiar os arquivos com o GeneratedUID
nome ou alterar a referência no serviço de diretório.
Incluí toda a minha "pesquisa" para permitir que você refaça meus passos e permita a refutabilidade.
Não tenho tempo para jogar fora e restaurar minhas contas de usuário, então você está sozinho agora. Boa sorte.
TLDR: Abra Accounts.prefPane
, verifique seu UUID
(clique com o botão direito no usuário na lista) e procure um arquivo com esse nome em /private/var/db/shadow/hash/
. Não sei se funcionade forma alguma. Boa sorte.