비밀번호 크래킹 (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 -
명령의 첫 번째 부분은 plist에서 키 ShadowHashData 를 읽습니다.
sudo defaults read /var/db/dslocal/nodes/Default/users/user.plist ShadowHashData
결과 (대부분 16 진) :
(
<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를 제외한 모든 것을 제거합니다.
결과 (16 진) :
62706c6973743030d101025f101453414c5445442d5348413531322d50424b444632d303040506070857656e74726f70795473616c745a697465726174696f6e734f1080c5f198639915a101c99af326dffe13e8f14456be8fd2312a39a777b92178804e204ca4fee12a8667871440eff4288e811d86d746c6d96a60c919c3418dfebba42f329f5d73c0372d636d61d5dfda1add61af36c70e4acd771276107209e643ae92a0f43e95a452744e50fb4540d9bdf4e0b701725d7db488fbe18c1ab7737c6b4f10200dba6246bd38266b2e827ff7e7271380757c71d653893aa361d590239830236911c160080b2229313641c4e700000000000001010000000000000009000000000000000000000000000000ea
세 번째 부분은 xxd -r -p
그것을 (mal-formed) 바이너리로 되돌립니다 :
?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 plist를 만듭니다.
<?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
plist에는 iterations , entropy 및 salt의 세 가지 주요 부분이 있습니다 .
반복 은 정수이지만 엔트로피 와 소금 은 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
소금 (16 진수) 결과 :
0dba6246bd38266b2e827ff7e7271380757c71d653893aa361d5902398302369
엔트로피도 마찬가지입니다.
echo "xfGYY5kVoQHJmvMm3/4T6PFEVr6P0jEqOad3uSF4gE4gTKT+4SqGZ4cUQO/0KI6BHYbXRsbZamDJGcNBjf67pC8yn11zwDctY21h1d/aGt1hrzbHDkrNdxJ2EHIJ5kOukqD0PpWkUnROUPtFQNm99OC3AXJdfbSI++GMGrdzfGs=" | base64 -D | xxd -p | tr -d \\n > ~/Desktop/entropy
엔트로피 (16 진수) 결과 :
c5f198639915a101c99af326dffe13e8f14456be8fd2312a39a777b92178804e204ca4fee12a8667871440eff4288e811d86d746c6d96a60c919c3418dfebba42f329f5d73c0372d636d61d5dfda1add61af36c70e4acd771276107209e643ae92a0f43e95a452744e50fb4540d9bdf4e0b701725d7db488fbe18c1ab7737c6b
hashcat 이 암호를 해독하기 위해 텍스트 파일이 필요한 경우 찾은 해시 데이터를 단일 문자열로 결합해야합니다.
$ml$<iterations(integer)>$<salt(hex)>$<entropy(hex)>
내 예제 해시 데이터는 다음과 같습니다.
$ml$49504$0dba6246bd38266b2e827ff7e7271380757c71d653893aa361d5902398302369$c5f198639915a101c99af326dffe13e8f14456be8fd2312a39a777b92178804e204ca4fee12a8667871440eff4288e811d86d746c6d96a60c919c3418dfebba42f329f5d73c0372d636d61d5dfda1add61af36c70e4acd771276107209e643ae92a0f43e95a452744e50fb4540d9bdf4e0b701725d7db488fbe18c1ab7737c6b
이것을 hash.txt라는 파일에 저장하고 hashcat에서 사용하십시오. 암호를 찾기위한 적절한 무차별 강제 명령 (= 4 자리 만 포함하는 간단한 테스트 암호)은 다음과 같습니다.
./hashcat-cli64.app -m 7100 hash.txt -a 3 ?d?d?d?d
VM에서 3 분 크래킹 후 생성 된 비밀번호는 1111 입니다.
반대의 경우 : ShadowHashData 생성 (OS 10.8 이상에서 유효)
이것은 단순한 SHA512 해시 생성기를 사용하여 "암호"데이터를 작성할 수없는 이유를 설명합니다. SHA512는 여전히 중요합니다. 배경은 PBKDF2-Key_derivation_process에 설명되어 있습니다 .
당신이 필요합니다 :
- PRF는 출력 길이가 hLen 인 두 매개 변수의 의사 난수 함수입니다 (예 : 키가있는 HMAC).
- 비밀번호는 파생 키가 생성되는 마스터 비밀번호입니다.
- 소금은 암호화 소금으로 알려진 일련의 비트입니다.
- c는 원하는 반복 횟수입니다
- dkLen은 파생 키의 원하는 길이입니다.
DK = PBKDF2 (PRF, Password, Salt, c, dkLen)를 만들려면
SALTED-SHA512-PBKDF2 (비밀번호에 의존하는 중간 plist의 유일한 부분)에서 DK ~ 엔트로피 키 를 만들려면 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에 사용 된 문자열은 솔트 (16 진)의 이스케이프 된 16 진 (\ x) 표시입니다.
0dba6246 ...-> \ x0d \ xba \ x62 \ x46 ...
해시 알고리즘 (Mac 10.8 이상에서는 sha512 여야 함), 반복 (0보다 크고 2 ^ 32-1보다 작은 숫자), salt (길이는 64 바이트 16 진수이지만 임의 임)를 정의하거나 알 수 있으므로 length (256 바이트) 위의 모든 명령을 반대로하여 올바른 형식의 중간 plist 파일을 만들 수 있습니다.
첫 번째 단계에서 명령 (더 나은 각 하위 명령)을 취소 하면 중간 plist를 사용하여 원래 plist에서 키 ShadowHashData 의 데이터를 작성할 수 있습니다 .
그리고 마지막으로 귀하의 질문에 대답하십시오 : OS X 암호 (및 소금과 같은 다른 데이터)를 처리하는 데 사용되는 해시 알고리즘은 SHA512입니다. 그러나 사용자 비밀번호가 SHA512 hash 로 저장되어 있다고 말할 수는 없습니다 .
귀하의 비밀번호와 소금은 sha512에 의해 여러 번 구워지며 결과는 base64 's 및 xxd '입니다. 함께 함께 소금 과 반복 이 xxd'ed있어 다시 base64'ed.
나는 한 걸음도 잊지 않았기를 바랍니다.
SALTED-SHA512-PBKDF2
(OS X 10.10) 이라고 표시되어 있기 때문에 !