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

80 lines
10 KiB
Markdown

{% hint style="success" %}
**AWS हैकिंग सीखें और अभ्यास करें:**<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks प्रशिक्षण AWS रेड टीम विशेषज्ञ (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
**GCP हैकिंग सीखें और अभ्यास करें:** <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks प्रशिक्षण GCP रेड टीम विशेषज्ञ (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>हैकट्रिक्स का समर्थन करें</summary>
* [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जाँच करें!
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें।
* **हैकिंग ट्रिक्स साझा करें, पीआर जमा करके** [**HackTricks**](https://github.com/carlospolop/hacktricks) **और** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github रेपो में।**
</details>
{% endhint %}
# ECB
(ECB) इलेक्ट्रॉनिक कोड बुक - सममित्र एन्क्रिप्शन योजना जो **प्रत्येक साफ टेक्स्ट के ब्लॉक को** **साइपरटेक्स्ट के ब्लॉक से** **बदल देती है**। यह **सरलतम** एन्क्रिप्शन योजना है। मुख्य विचार यह है कि साफ टेक्स्ट को **N बिट के ब्लॉक में विभाजित** किया जाता है (इनपुट डेटा, एन्क्रिप्शन एल्गोरिदम के ब्लॉक का आकार पर निर्भर करता है) और फिर केवल कुंजी का उपयोग करके प्रत्येक साफ टेक्स्ट के ब्लॉक को एन्क्रिप्ट (डिक्रिप्ट) करना है।
![](https://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/ECB_decryption.svg/601px-ECB_decryption.svg.png)
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`**
## संदर्भ
* [http://cryptowiki.net/index.php?title=Electronic_Code_Book\_(ECB)](http://cryptowiki.net/index.php?title=Electronic_Code_Book_\(ECB\))