मैक का पासवर्ड किस प्रकार के हैश में संग्रहीत किया जाता है?


22

ओएस एक्स 10.11 पर - मैंने अपने उपयोगकर्ता की .plistफ़ाइल खोल दी है , और फ़ाइल के अंदर देखा है।

मैंने निम्न कमांड के साथ ऐसा किया:

sudo defaults read /var/db/dslocal/nodes/Default/users/<username>.plist ShadowHashData|tr -dc 0-9a-f|xxd -r -p|plutil -convert xml1 - -o -

फाइल ने SALTED-SHA512इसमें कहा , इसलिए मैंने मान लिया कि यह SHA512 हैश था।

लेकिन, मैं कुछ SHA512 हैश जनरेटर साइटों पर गया, और मैंने अपना पासवर्ड डाला। मैंने .plistफाइल में जो था उससे अलग हैश प्राप्त किया ।

तो, मैं .plistफ़ाइल में क्या है उसे वास्तविक हैश में कैसे परिवर्तित करूं , या वास्तव में किस प्रकार का हैश फ़ाइल में संग्रहीत है?


2
आप किस तरह का OS X पासवर्ड क्रैक करने की कोशिश करते हैं? OS X 10.7 / 10.8? क्योंकि मेरी फ़ाइल कहती है SALTED-SHA512-PBKDF2(OS X 10.10)!
कालोनोमथ

@klanomath OS X El Capitan; और यह वही है जो कहता है, यकीन नहीं था कि PBKDF2 संवेदनशील डेटा था। क्या SALTED-SHA512-PBKDF2 प्रकार है, और यदि हां, तो क्या कोई c ++ फ़ंक्शन / लाइब्रेरी हैं जो इस प्रकार को उत्पन्न कर सकते हैं? (अधिमानतः एक तेजी से कार्य / पुस्तकालय)
भड़क बिल्ली

मुझे लगा कि OS X पासवर्ड हैश में जमा हो गया था /var/db/shadow/hash?
आवाजें

1
@ tjt263 Yosemite पर नहीं +
बिल्ली

जवाबों:


40

पासवर्ड क्रैकिंग (ओएस 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 -

कमांड का पहला भाग प्लिस्ट में शैडोहाशडेट को पढ़ता है

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-f0-9a-f को छोड़कर कुछ भी हटा देता है।

परिणाम (हेक्स):

62706c6973743030d101025f101453414c5445442d5348413531322d50424b444632d303040506070857656e74726f70795473616c745a697465726174696f6e734f1080c5f198639915a101c99af326dffe13e8f14456be8fd2312a39a777b92178804e204ca4fee12a8667871440eff4288e811d86d746c6d96a60c919c3418dfebba42f329f5d73c0372d636d61d5dfda1add61af36c70e4acd771276107209e643ae92a0f43e95a452744e50fb4540d9bdf4e0b701725d7db488fbe18c1ab7737c6b4f10200dba6246bd38266b2e827ff7e7271380757c71d653893aa361d590239830236911c160080b2229313641c4e700000000000001010000000000000009000000000000000000000000000000ea

तीसरा भाग xxd -r -pइसे (mal- गठित) बाइनरी में बदल देता है:

?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

प्लिस्ट में तीन प्रमुख भाग होते हैं: पुनरावृत्तियों , एन्ट्रापी और नमक

पुनरावृत्तियों सिर्फ एक पूर्णांक है, लेकिन एन्ट्रापी और नमक बेस 64 एनकोडेड हैं। उनके साथ काम करना जारी रखने के लिए आपको उन्हें डिकोड और 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 नाम की फ़ाइल में सहेजें और इसका उपयोग हैशटैट में करें। पासवर्ड खोजने के लिए उचित ब्रूट फोर्स कमांड (= मेरा सरल परीक्षण पासवर्ड जिसमें केवल 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)
  • पासवर्ड मास्टर पासवर्ड है जिसमें से एक व्युत्पन्न कुंजी उत्पन्न होती है
  • नमक बिट्स का एक क्रम है, जिसे क्रिप्टोग्राफिक नमक के रूप में जाना जाता है
  • ग वांछित पुनरावृत्तियों की संख्या है
  • डीकेलेन व्युत्पन्न कुंजी की वांछित लंबाई है

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 is 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 > 

$ नमक में प्रयुक्त स्ट्रिंग नमक (हेक्स) की
बची हुई हेक्स (\ x) प्रस्तुति है: 0dba6246 ... -> \ x0d \ xba \ x62 \ x46 ...

चूँकि आप हैश एल्गोरिथ्म को परिभाषित या जान सकते हैं (इसे मैक 10.8 और बाद के लिए sha512 होना चाहिए), पुनरावृत्तियों (शून्य से बड़ा और 2 ^ 32-1 से छोटा), नमक (लंबाई 64 बाइट्स हेक्स लेकिन यादृच्छिक!)। लंबाई (256 बाइट) आप ऊपर दिए गए सभी आदेशों को उल्टा करके एक अच्छी तरह से बनाई गई मध्यवर्ती प्लेट फाइल बना सकते हैं।

अपने कमांड (बेहतर: प्रत्येक सबकॉमैंड्स) को पहले चरण से उलट कर, आप इंटरमीडिएट प्लिस्ट का उपयोग करके मूल प्लेस्ट में मुख्य शैडोहाशडाटा का डेटा बना सकते हैं ।


और अंत में आपके प्रश्न का उत्तर देने के लिए: ओएस एक्स पासवर्ड (और नमक की तरह अन्य डेटा) को संसाधित करने के लिए इस्तेमाल किया गया हैश एल्गोरिथ्म SHA512 है। लेकिन आप यह नहीं कह सकते कि आपका उपयोगकर्ता पासवर्ड SHA512 हैश के रूप में संग्रहीत है ।

आपके पासवर्ड और नमक को कई बार sha512 द्वारा ग्रिल किया जाता है, फिर परिणाम base64'ed और रिवर्स xxd'ed होता है। नमक और पुनरावृत्तियों के साथ मिलकर यह xxd'ed और base64'ed फिर से है।

मुझे आशा है कि मैं कोई भी कदम नहीं भूली।


2
एक असाधारण जवाब है, लेकिन यहां स्क्रिप्ट का एक संग्रह है जो इसे सभी को एक साथ रखता है। एक दिलचस्प बात जो मुझे पता चली जब इसे लागू करने की कोशिश की गई थी कि डीकेलेन 128 थी। उम्मीद है कि इससे किसी को लाइन में मदद मिलेगी!
3martini

2
यह एक अद्भुत उत्तर है। मुझे आश्चर्य है कि कैसे पास इसे करने के लिए किया जा रहा समाप्त होता है github.com/octomagon/davegrohl
bmike

@bmike ज्यादा नहीं, यह देखते हुए कि यह हैश क्रैक करने की कोशिश नहीं करता है; लेकिन github.com/octomagon/davegrohl में उपयोगकर्ता के पासवर्ड को स्क्रीन पर हैश करने के लिए इसे क्रैक करने का प्रयास किए बिना स्क्रीन पर हैश करने का विकल्प है, जो कि हैशटैट प्रारूप में ऐसा करता है।
dardo82

@ 3martini आप सही हैं, मैंने पाया है कि यहाँ भी शेल स्क्रिप्ट का मेरा संस्करण है: gist.github.com/dardo82/a529db7a191f375ef401adfea7156bbd
dardo82

0

आपको उस सिस्टम पर अपने उपयोगकर्ता खाते के नमक की आवश्यकता होगी। जब आपने अपना खाता बनाया (या शायद जब आपने अपना पासवर्ड पिछली बार बदल लिया था) तो आपके लिए आविष्कार किया गया वर्णों का एक यादृच्छिक स्ट्रिंग है। आपको इसे अपने पासवर्ड में जोड़ना होगा, जैसे:

[कि नीचे तो संख्या के बड़े पैमाने पर हिस्सा ...] [अपना पासवर्ड]

निश्चित नहीं है कि क्या यह आगे या पीछे जोड़ा गया है: [आपकाPassword] [नमक]? कौन जानता है।

उपयोगकर्ता के लिए USERNAMEआप यहाँ हैश देख सकते हैं:

sudo plutil -p /var/db/dslocal/nodes/Default/users/**USERNAME**.plist

फिर बाहर आता है:

"ShadowHashData" => [
  0 => <62706c69 73743030 d2010203 04524e54 5f101453 414c5445 442d5348 41353132 2d50424b 4446324f 1010f5d1 dcc424b1 a6173adf 2b69b6b4 e043d305 06070809 0a57656e 74726f70 79547361 6c745a69 74657261 74696f6e 734f1080 8d6f15f8 36cf219f c4854634 62706c69 15f23eec 1615bb8a 04524e54 48dcd5fa c6e45319 faf0f12a ae0bebb0 7881dcdd 92fab792 9f354bf8 04524e54 a50cad3b d04e867b 689fbaa5 e1be59ff be37c6f3 60e41e59 3fdc0702 f296c9f9 8aedd2d6 77f5608a 337add70 5a6b39ba 64665f54 a85adb30 54b791d1 62706c69 aa4d0c9a 4f1020a2 99ead6a5 42730425 41353132 01247c53 6442646a 41353132 e2555d2e a3baee11 8e0b0008 000d0010 0027003a 00410049 004e0059 00dc00ff 00000000 00000201 00000000 0000000b 00000000 00000000 00000000 00000102>

दिलचस्प बात यह है कि जब मैंने कुछ रैंडम लुकिंग नंबर ब्लॉक में बदलाव किया है, तो स्टैक को मेरा नमक नहीं मिला (आप कुछ बार-बार रैंडम ब्लॉक देख सकते हैं जो कि मेरा पेस्ट-वर्क था!) लेकिन मैंने अंत में पेस्ट नहीं किया। ... यह अंत में शून्य में भंग करने के लिए इन 512 SHA दिलचस्प दिलचस्प लगता है !!!

पुनश्च। वे इसे एक बिट के आसपास ले गए हैं ... वास्तव में अच्छी तरह से छिपा हुआ करते थे। मैं खो गया और मेरा (नीचे देखें) नहीं मिल सका, इसका नाम 'नाम' से कुछ दुष्ट फ़ोल्डर संरचना में छिपा था!

श-3.2 # पीडब्ल्यूडी
/ Var / db / uuidtext
sh-3.2 # ls -R
00 10 20 30 40 50 60 70 80 90 A0 B0 C0 D0 E0 F0 dsc
01 11 21 31 41 51 61 71 81 91 ए 1 बी 1 सी 1 डी 1 ई 1 एफ 1
02 12 22 32 42 52 62 72 82 92 ए 2 बी 2 सी 2 डी 2 ई 2 एफ 2
03 13 23 33 43 53 63 73 83 93 ए 3 बी 3 सी 3 डी 3 एफ 3
04 14 24 34 44 54 64 74 84 94 ए 4 बी 4 सी 4 डी 4 ई 4 एफ 4
05 15 25 35 45 55 65 75 85 95 ए 5 बी 5 सी 5 डी 5 ई 5 एफ 5
06 16 26 36 46 56 66 76 86 96 ए 6 बी 6 सी 6 डी 6 ई 6 एफ 6
07 17 27 37 47 57 67 77 87 87 97 ए 7 बी 7 सी 7 डी 7 ई 7 एफ 7
08 18 28 38 48 58 68 78 88 88 ए 8 बी 8 सी 8 डी 8 ई 8 एफ 8
09 19 29 39 49 59 69 79 89 99 ए 9 बी 9 सी 9 डी 9 ई 9 एफ 9
0A 1A 2A 3A 4A 5A 6A 7A 8A 9A AA BA CA DA DA FA FA
0 बी 1 बी 2 बी 3 बी 4 बी 5 बी 6 बी 7 बी 8 बी 9 बी एबी बीबी सीबी डीबी ईबी एफबी
0 सी 1 सी 2 सी 3 सी 4 सी 5 सी 6 सी 7 सी 8 सी 9 सी एसी बीसी सीसी डीसी ईसी एफसी
0D 1D 2D 3D 4D 5D 6D 7D 8D 9D AD BD CD DD ED FD
0E 1E 2E 3E 4E 5E 6E 7E 8E 9E AE BE CE DE EE FE
0F 1F 2F 3F 4F 5F 6F 7F 8F 9F AF BF CF DF DF EF FF

./00:
229B1EE4463244AED56CD907B7BEF5 41D012E18834E9A89637A804BE488C A7D6EBD5D63A45918E4D3DCD479708
28400DB8373232B480C57B68EFA51D 7EE5E1A8A839CE9EB017702B87E4A AE3ABF3C8333BF8A495C38946F37F

./01:
56B34D8B03387CA319BDC11BEFB2ED A8359C18A633C9815A5C528BCD7E18 DD590C6953D428FEFCA59185AD53349
62DA3DA0C73CE2AA227F372A727765 C05AE85AE73DF492529DCD10F0F60B ECD5DB35653A50ABCA585948E9595C

./02:
C7513934DD9D8EB73B4B0765D8 98F679561A3957947E381448224549 DBAB00E98835D2853386FF37C39F7 FA85B4876B3E1D81B742C6C1F8D368368
541FAC57203B75BD333F7EC33EBD32 C25AE52FA438AD9006931512A8A522 EFA98EEFF13799BFDDE3033209EC2
3234B636EEA71A903E204E9599 CA252B6EA03E5A811ACFC88F0987C0 F815F784DC35A5B1D5F658F5DBDB666B

./03:
FA758E3DA4996D1CD5FF53B7EA 419205BFBB3469BCDCFE528FDE2C9B 73F0433FB35A0AD1CD160020FFF D0034745E035D183CB344308FC05E5E5
26539F480B31D8B65F1495C85AADE2 69BF1B56BB30DE9BBE83BD3FDAB067 A7CA24A6E1E6B3F384848080F41 D9727CA86A396CAD1CC1B1BD1FA8DF8F8

./04:
87C3CF30E3ADCCDBD0A0D56913 B398A52A3C3041B889899191BB44B25 C004143AB431818D5808C8A301BDE F478D3BCB6313782CBD80369191F4F4F
99FBF1F9B439EB92551A096F187EC3 BA704190633F04BBBDE5EC3ECB6013 CA7AE366FA34BD86DB77774A1A4BED

./05:
67AE763654A52CBF399D33EB29 4D4B7528803C138C4D2330B51326C1 7B6C998C5331159A4ADC173D73D72E71 BEEC66F8573CF0BE339189FD1A688BB
11E586F995DADC9A6E2AC531963BD2 503FAB2A9C331A95670849CC595B30 8C0FAFB09A3526BEAAAAA06976C42E7 CCC4737FBE915B2A8C636060DF7878
138A1B31EC95D1588BF15328A2 560F3EDCED38B29C14CAB39287EA26 988FAB9E6E70E0C21C9424703A5892FA8D378C8C8BA9376A74EB004B74
2669F6338C3AF9A9FBF365EE3294F3 708E7FDA333D6E951F5870047A266B 98E3BB24DF3BE8B8D27EE2F30DA42
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.