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

8.6 KiB

{{#include ../banners/hacktricks-training.md}}

ECB

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

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

  • एन्क्रिप्टेड संदेश के ब्लॉक को हटाया जा सकता है
  • एन्क्रिप्टेड संदेश के ब्लॉक को इधर-उधर किया जा सकता है

कमजोरियों का पता लगाना

कल्पना करें कि आप एक एप्लिकेशन में कई बार लॉगिन करते हैं और आपको हमेशा वही कुकी मिलती है। इसका कारण यह है कि एप्लिकेशन की कुकी <username>|<password> है।
फिर, आप दो नए उपयोगकर्ताओं को उत्पन्न करते हैं, दोनों के पास एक ही लंबा पासवर्ड और लगभग वही उपयोगकर्ता नाम है।
आप पाते हैं कि 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 विभिन्न अक्षर (शायद विभाजक "|" या उपयोगकर्ता नाम में कुछ आवश्यक अंतर) को शामिल करते हैं।

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

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

भेद्यता का शोषण

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

कुकी के प्रारूप को जानकर (<username>|<password>), उपयोगकर्ता नाम admin की नकल करने के लिए एक नया उपयोगकर्ता बनाएं जिसका नाम 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

Moving blocks

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

तो, उपयोगकर्ता admin की नकल करने का एक और तरीका होगा:

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

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

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

References

{{#include ../banners/hacktricks-training.md}}