8.7 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}}