hacktricks/crypto-and-stego/electronic-code-book-ecb.md

79 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)** पर फॉलो** करें।
* **हैकिंग ट्रिक्स साझा करें, PRs सबमिट करके** [**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 |
# सुरक्षा दोष का शोधन
## पूरे ब्लॉक हटाना
कुकी के प्रारूप को जानकर (`<उपयगकर्त >|<सवर्ड>`), उपयोगकर्ता नाम `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
```
## ब्लॉक्स को ले जाना
कई डेटाबेस में `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\))