| # | मोड |
|---|---|
| 0 | सीधे |
| 1 | संयोजन |
| 3 | ब्रूट-फोर्स |
| 6 | हाइब्रिड वर्डलिस्ट + मास्क |
| 7 | हाइब्रिड मास्क + वर्डलिस्ट |
इस हमले के मोड को "डिक्शनरी अटैक" के रूप में भी जाना जाता है । कहने के लिए बहुत कुछ नहीं है, सिर्फ एक शब्दकोश दिया गया है, हैशकैट शब्दकोश की सामग्री को पंक्ति द्वारा पढ़ेगा, प्रत्येक पंक्ति के हैश मान की गणना करेगा, और लक्ष्य हैश मान के साथ तुलना करेगा ।
उदाहरण:
hashcat -a 0 -m 400 example400.hash example.dict
Baidu ने मुझे बताया कि संयोजन एक संज्ञा है, जिसका अर्थ है: "संयोजन; संघ; पासवर्ड संयोजन; जंपसूट"। यह हमला मोड वास्तव में बहुत सरल है, यानी दो पासवर्ड शब्दकोशों की सामग्री को जोड़ना । इस हमले मोड का उपयोग करने के लिए दो पासवर्ड शब्दकोशों को निर्दिष्ट करने की आवश्यकता होती है । मान लीजिए कि हमारे पास दो पासवर्ड शब्दकोश dict1.txt और dict2.txt हैं, जिनकी सामग्री है:
शिकार किटी इंद्रधनुष
और
पेरिस rock
फिर कमांड:
hashcat -m 0 -a 1 hash.txt dict1.txt dict2.txt
वास्तव में कोशिश की गई शब्दकोश है:
huntingparis हंटिंगरॉक kittyparis किटीरॉक रेनबोपेरिस rainbowrock
dict1.txt में शब्द बाईं ओर हैं, और dict2.txt में शब्द दाईं ओर हैं, कुल 3×2=6 ।
इस मोड से संबंधित पैरामीटर हैं:
-j, --rule-left -k, --rule-right
-j के बाद का नियम बाईं ओर कार्य करता है, और -k के बाद का नियम दाईं ओर कार्य करता है, जैसे पैरामीटर जोड़ना -j '$- ', तो वास्तविक कोशिश शब्दकोश है:
शिकार-पेरिस शिकार-रॉक किटी-पेरिस किट्टी रॉक बारिश-bowparis rain-bowrock
पैरामीटर जोड़ें -j '^!', फिर वास्तविक कोशिश शब्दकोश है:
! शिकारपेरिस ! हंटिंगरॉक ! kittyparis ! kittyrock ! rainbowparis ! रेनबोरॉक
पैरामीटर -k '^>' जोड़ता है, फिर वास्तविक कोशिश शब्दकोश है:
शिकार>पेरिस शिकार >चट्टान किट्टी >पेरिस किट्टी >रॉक बारिश>बोपेरिस rain>bowrock
यह नियम क्या है? "$" और "^" का उपयोग नियमित अभिव्यक्तियों के समान है, तो क्या वे नियमित हैं? वास्तव में, नहीं, हैशकैट के नियम स्वयं लागू किए जाते हैं, जो सामग्री का एक और बड़ा टुकड़ा है । विवरण के लिए, नियम-आधारित हमला
देखें । दिए गए वर्ण सेट के विभिन्न संयोजनों का प्रयास करें । हैशकैट की आधिकारिक विकी के अनुसार, यह विधि पुरानी है और इसे सभी पहलुओं में मास्क-अटैक द्वारा प्रतिस्थापित किया गया है, इसलिए कोई शोध नहीं किया गया है ।
यह एक अपेक्षाकृत नई हमला विधि है । उदाहरण इस प्रकार है:
हैशकैट -ए 3 -एम 0 एमडी5.हैश ? एल? एल? एल? एल? l
हालाँकि "हमले मोड" तालिका के अनुसार, -A 3 ब्रूट-फोर्स से मेल खाता है, वास्तव में, -A 3 मुखौटा हमले का उपयोग करता है । मास्क अटैक को उन्नत ब्रूट-फोर्स माना जा सकता है ।
-m पैरामीटर का उपयोग हैश फ़ंक्शन प्रकार को निर्दिष्ट करने के लिए किया जाता है । MD5 मान MD5 फ़ाइल में संग्रहीत होता है । कुंजी अंतिम स्ट्रिंग "? l? l? l? l? l? l? l" है । ऐसी स्ट्रिंग को मास्क कहा जाता है ।
एक मुखौटा एक स्ट्रिंग है जिसमें कई प्लेसहोल्डर होते हैं । "?l" एक प्लेसहोल्डर है, जहां "?" एक कीवर्ड है जिसका उपयोग बाद के "l" को संशोधित करने के लिए किया जाता है । "?l" के अलावा, "?u" भी हो सकता है , "?d", "?h", "?h", "?s", "?a" और "?b", द्वारा दर्शाए गए वर्ण सेट नीचे दी गई तालिका में दिखाए गए हैं ।
| ? | Charset |
|---|---|
| l | abcdefghijklmnopqrstuvwxyz |
| u | abcdefghijklmnopqrstuvwxyz |
| d | 0123456789 |
| H | 0123456789abcdef |
| H | 0123456789ABCDEF |
| s | ! "#$%&'()*+,-./:;<=>?@[\]^_`~{|} |
| a | ? एल? आप? डी? s |
| b | 0 – 0xff |
इस तरह, हम समझते हैं, "?l" वास्तव में पासवर्ड शब्दकोश के बराबर है:
aaaaa aaaab ... zzzzz
उसी तरह, "?l?u?d" पासवर्ड शब्दकोश के बराबर है:
aA0 एए1 ... ... zZ9
ऊपर की तालिका में वर्ण सेट हैशकैट में निर्मित है, हम स्वयं वर्ण सेट भी निर्दिष्ट कर सकते हैं:
--custom-charset1 = वर्ण सेट 1 --custom-charset2=वर्ण संग्रह 2 --custom-charset3=वर्ण संग्रह 3 --custom-charset4=वर्ण सेट 4
पैरामीटर –custom-charsetN को -N के रूप में संक्षिप्त किया जा सकता है, जैसे –custom-charset1 को -1 के रूप में संक्षिप्त किया जा सकता है । -N के साथ निर्दिष्ट वर्ण सेट को प्लेसहोल्डर "?N" के रूप में मास्क में निर्दिष्ट किया गया है, जैसे:
-1 abc123 ? 1? 1? 1
पासवर्ड शब्दकोश के बराबर है:
aaa ... aa3 ... 333
-N वर्ण संग्रह का प्रतिनिधित्व करने वाली स्ट्रिंग के अलावा, यह .hcchr पर समाप्त होने वाली एक फ़ाइल भी हो सकती है, जिसमें वर्ण संग्रह संग्रहीत होता है । हैशकैट इंस्टॉलेशन पैकेज की charsets/निर्देशिका में कई .hcchr फ़ाइलों के साथ आता है ।
प्लेसहोल्डर "??" द्वारा दर्शाए गए वर्णों का संग्रह "?" स्वयं है । इसके अलावा, जब अन्य वर्णों का उपयोग प्लेसहोल्डर के रूप में किया जाता है, तो वे स्वयं वर्ण का प्रतिनिधित्व करते हैं, उदाहरण के लिए, "?lwerner?d" पासवर्ड शब्दकोश के बराबर है:
awerner0 अवर्नर1 ... zwerner9
उपरोक्त ज्ञान के साथ, मास्क को समझना आसान है । एक मास्क में कई प्लेसहोल्डर होते हैं, प्रत्येक प्लेसहोल्डर एक वर्ण सेट होता है, और एक मास्क प्लेसहोल्डर वर्ण सेट का संयोजन होता है । प्लेसहोल्डर्स की संख्या पासवर्ड की लंबाई के बराबर है । केवल वर्ण सेट और पासवर्ड की लंबाई देने की तुलना में इस तरह के डिज़ाइन के क्या फायदे हैं?
मान लीजिए कि हम जानते हैं कि किसी के पासवर्ड में कुल 7 अंक हैं, पहला अंक एक अपरकेस अक्षर है, अगले 3 अंक एक लोअरकेस अक्षर हैं, और अंतिम 3 अंक एक संख्या हैं । यदि यह पारंपरिक हिंसक क्रैकिंग है, तो इसके लिए वर्ण सेट A-Z, A-Z और 0-9 की आवश्यकता होती है, कुल 62 वर्ण, और अधिकतम प्रयास 62^7=3 521 614 606 208 बार होते हैं, जो एक ट्रिलियन स्तर है । इस पासवर्ड का वर्णन करने के लिए मास्क का उपयोग करना "\u\l\l\l\d\d\d" है, जिसकी गणना करना आसान है । कुल मिलाकर (26^4)×(10^3)=456 976,000 संभावनाएं हैं, जो अरबों है । स्तर, पिछली विधि की तुलना में परिमाण के 4 क्रम कम ।
एक कदम पीछे हटते हुए, भले ही हम पासवर्ड के वितरण को नहीं जानते हों, मास्क का उपयोग करके पारंपरिक हिंसक क्रैकिंग के प्रभाव का अनुकरण करना आसान है ।
अब समस्या यह है कि मास्क तय है, कितने प्लेसहोल्डर मृत रूप से लिखे गए हैं, और अगर हम पासवर्ड की लंबाई नहीं जानते हैं तो हमें क्या करना चाहिए? यह ठीक है कि पासवर्ड बहुत लंबा है । यदि किसी के पासवर्ड में केवल 3 अंक हैं और हमारे पास 4 प्लेसहोल्डर हैं, तो क्या यह एक बड़ा नुकसान नहीं होगा? क्या हमें 1 से शुरू करने और सभी लंबाई के मास्क लिखने की आवश्यकता है? यह कितनी परेशानी है ।
के दो समाधान हैं । एक है मास्क फ़ाइल का उपयोग करना, एक फ़ाइल में कई मास्क लिखना, और फिर कमांड लाइन में फ़ाइल को निर्दिष्ट करना । ध्यान दें कि मास्क फ़ाइल को .hcmask के साथ समाप्त होना चाहिए ।
उदाहरण के लिए, test.hcmask की सामग्री है:
? एल ? एल? एल ? एल? एल? एल ? एल? एल? एल? l
फ़ाइल का उपयोग करने के लिए निम्नलिखित कमांड का उपयोग करें:
hashcat -m 0 -a 3 --show MD5.hash test.hcmask
एक अन्य समाधान पैरामीटर -increment जोड़ना है, जो हैशकैट को बताता है, हमारे द्वारा दिए गए मास्क के अनुसार, एक प्लेसहोल्डर से शुरू करें प्रयास करें, फिर दो, तीन का प्रयास करें, जब तक कि हम लंबाई न दें । उदाहरण के लिए, हम इस प्लेसहोल्डर "abc" को लिखते हैं, और फिर निम्नलिखित स्ट्रिंग के MD5 मान की गणना करते हैं:
ए:0cc175b9c0f1b6a831c399e269772661 बी:92eb5ffee6ae2fec3ad71c777531578f सी:4a8a08f09d37b73795649038408b5f33 एबी:187ef4436122d1cc2f40dc2b92f0eba0 एसी:e2075474294983e013ee4dd2201c7a73 बीए:07159c47ee1b19ae4fb9c40d480856c4 ईसा पूर्व:5360af35bde9ebd8f01f492dc059593c सीए:5435c69ed3bcc5b2e4d580e393e373d3 सीबी:d0d7fdb6977b26929fb68c6083c0b439 एबीसी:900150983cd24fb0d6963f7d28e17f72 एबीसी:900150983cd24fb0d6963f7d28e17f72 बीएसी:79ec16df80b57696a03bb364410061f3 बीसीए:b64eab8ce39e013604e243089c687e4f सीबीए:3944b025c9ca7eec3154b44666ae04a0 cab:16ecfd64586ec6c1ab212762c2c38a90
":" मूल स्ट्रिंग है जिसके लिए हैश मान की गणना की जानी है, और ":" के बाद गणना की गई hasn मान है । उपरोक्त सामग्री को फ़ाइल MD5.hash में सहेजें, और फिर निम्नलिखित कमांड चलाएं:
hashcat -m 0 -a 3 --दिखाएं --उपयोगकर्तानाम MD5.hash abc
पैरामीटर जोड़ें -उपयोगकर्तानाम क्योंकि हमारे प्रत्येक हैश मान के सामने एक मूल स्ट्रिंग होती है यदि यह पैरामीटर नहीं जोड़ा जाता है, तो हैशकैट दिखाएगा कि सही हैश मान नहीं मिला है । इस पैरामीटर को जोड़ने से, हैशकैट सोचेगा कि हैश मान से पहले की स्ट्रिंग हैश मान जोड़ी का उपयोगकर्ता नाम है, ताकि हैश मान सुचारू रूप से लोड किया जा सके ।
चलाने का परिणाम यह है कि केवल एक हैश हल किया गया है:
900150983cd24fb0d6963f7d28e17f72:abc
अब पैरामीटर जोड़ें -increment, फिर से चलाएं:
hashcat -m 0 -a 3 --show --increment --username MD5.hash abc
इस बार, दो और हैश हल किए गए:
0cc175b9c0f1b6a831c399e269772661:a 187ef4436122d1cc2f40dc2b92f0eba0:ab
दिखाई देता है, –increment काम करता है । लेकिन साथ ही, हम यह भी जानते हैं कि इस पैरामीटर के साथ, हैशकैट केवल ए, एबी और एबीसी को क्रम में आज़माएगा, और विभिन्न संभावनाओं की कोशिश करने के लिए प्लेसहोल्डर्स को व्यवस्थित और संयोजित नहीं करेगा ।
हाइब्रिड अटैक कॉम्बिनेटर अटैक के समान है । कॉम्बिनेटर अटैक दो शब्दकोशों को जोड़ता है, जबकि हाइब्रिड अटैक एक शब्दकोश और एक मुखौटा को जोड़ता है । दोनों लगभग समान हैं ।
मान लीजिए कि हमारे पास पहले से ही एक शब्दकोश example.dict है जो इस प्रकार है:
हैलो वर्नर
फिर कमांड:
hashcat -m 0 -a 6 MD5.hash example.dict ? डी? d
केवल शब्दकोश का उपयोग करने के बराबर है:
नमस्कार 00 नमस्ते 01 ... नमस्कार 99 वेर्नर00 वेर्नर01 ... werener99
फिर कमांड:
hashcat -m 0 -a 7 MD5.hash ? डी? dexample.dict
केवल शब्दकोश का उपयोग करने के बराबर है:
00hello 01 हैलो ... नमस्ते 00 वर्नर 01 वर्नर ... 99वेरेनर