hacktricks/cryptography/electronic-code-book-ecb.md

10 KiB

{% hint style="success" %} AWS हैकिंग सीखें और अभ्यास करें:HackTricks प्रशिक्षण AWS रेड टीम विशेषज्ञ (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks प्रशिक्षण GCP रेड टीम विशेषज्ञ (GRTE)

हैकट्रिक्स का समर्थन करें
{% endhint %}

ECB

(ECB) इलेक्ट्रॉनिक कोड बुक - सममित्र एन्क्रिप्शन योजना जो प्रत्येक साफ टेक्स्ट के ब्लॉक को साइपरटेक्स्ट के ब्लॉक से बदल देती है। यह सरलतम एन्क्रिप्शन योजना है। मुख्य विचार यह है कि साफ टेक्स्ट को N बिट के ब्लॉक में विभाजित किया जाता है (इनपुट डेटा, एन्क्रिप्शन एल्गोरिदम के ब्लॉक का आकार पर निर्भर करता है) और फिर केवल कुंजी का उपयोग करके प्रत्येक साफ टेक्स्ट के ब्लॉक को एन्क्रिप्ट (डिक्रिप्ट) करना है।

ECB का उपयोग करने के कई सुरक्षा प्रभाव होते हैं:

  • एन्क्रिप्टेड संदेश से ब्लॉक हटा दिए जा सकते हैं
  • एन्क्रिप्टेड संदेश से ब्लॉक चले जा सकते हैं

सुरक्षा दोष का पता लगाना

कल्पना करें आप किसी एप्लिकेशन में लॉगिन करते हैं और आप हमेशा एक ही कुकी प्राप्त करते हैं। यह इसलिए है क्योंकि एप्लिकेशन की कुकी <उपयोगकर्ता नाम>|<पासवर्ड> है।
फिर, आप नए उपयोगकर्ताओं को उत्पन्न करते हैं, जिनमें से दोनों का लंबा पासवर्ड है और लगभग एक ही उपयोगकर्ता नाम है।
आप पता लगाते हैं कि 8B के ब्लॉक जहां दोनों उपयोगकर्ताओं की जानकारी समान हैं, वे बराबर हैं। तो, आपको लगता है कि यह हो सकता है क्योंकि ECB का उपयोग हो रहा है

जैसे निम्नलिखित उदाहरण में। ध्यान दें कि इन 2 डिकोड कुकी में कई बार ब्लॉक \x23U\xE45K\xCB\x21\xC8 है।

\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9

\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9

यह इसलिए है क्योंकि कुकीज़ के उस उपयोक्ता नाम और पासवर्ड में कई बार अक्षर "a" शामिल थे (उदाहरण के लिए)। विभिन्न ब्लॉक वे ब्लॉक हैं जिनमें कम से कम 1 विभिन्न वर्ण था (शायद विभाजक "|" या उपयोक्ता नाम में आवश्यक भिन्नता)।

अब, हमलावर को बस यह पता लगाना है कि प्रारूप <उपयोक्ता नाम><विभाजक><पासवर्ड> है या <पासवर्ड><विभाजक><उपयोक्ता नाम> है। इसके लिए, वह बस कई उपयोक्ता नाम उत्पन्न कर सकता है जिनमें समान और लंबे उपयोक्ता नाम और पासवर्ड हों जब तक वह प्रारूप और विभाजक की लंबाई को न पाए:

उपयोक्ता नाम की लंबाई: पासवर्ड की लंबाई: उपयोक्ता नाम + पासवर्ड की लंबाई: कुकी की लंबाई (डिकोडिंग के बाद):
2 2 4 8
3 3 6 8
3 4 7 8
4 4 8 16
7 7 14 16

सुरक्षा कमजोरी का शोषण

पूरे ब्लॉक हटाना

कुकी के प्रारूप को जानकर (<उपयोक्ता नाम>|<पासवर्ड>), उपयोक्ता नाम एडमिन का अनुकरण करने के लिए एक नया उपयोक्ता बनाएं aaaaaaaaadmin और कुकी प्राप्त करें और इसे डिकोड करें:

\x23U\xE45K\xCB\x21\xC8\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4

हम पहले से बनाए गए पैटर्न \x23U\xE45K\xCB\x21\xC8 को देख सकते हैं जो उस उपयोगकर्ता नाम के साथ बनाया गया था जिसमें केवल a था।
फिर, आप पहले 8B ब्लॉक को हटा सकते हैं और आपको उपयोगकर्ता नाम admin के लिए एक मान्य कुकी मिलेगी:

\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4

ब्लॉकों को हटाना

कई डेटाबेस में WHERE username='admin'; खोजना या WHERE username='admin '; खोजना समान होता है (अतिरिक्त रिक्त स्थानों का ध्यान दें)

तो, उपयोगकर्ता admin का अनुकरण करने का एक और तरीका है:

  • एक उपयोगकर्ता नाम जेनरेट करें जो: len(<username>) + len(<delimiter) % len(block). 8B ब्लॉक का आकार होने पर आप username नामक उपयोगकर्ता उत्पन्न कर सकते हैं, डिलीमिटर | के साथ टुकड़ा <username><delimiter> 2 ब्लॉक्स को उत्पन्न करेगा।
  • फिर, एक पासवर्ड जेनरेट करें जो उसी संख्या के ब्लॉक्स को भरेगा जिसमें हम उपनामित करना चाहते हैं और रिक्त स्थान हों, जैसे: admin

इस उपयोगकर्ता की कुकी 3 ब्लॉक्स से बनी होगी: पहले 2 उपयोगकर्ता के ब्लॉक्स + डिलीमिटर और तीसरा पासवर्ड का ब्लॉक (जो उपयोगकर्ता का नाम बना रहेगा): username |admin

फिर, बस पहले ब्लॉक को आखिरी ब्लॉक के साथ बदल दें और आप उपयोगकर्ता admin का अनुकरण कर रहे होंगे: admin |username

संदर्भ