mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
56 lines
6.5 KiB
Markdown
56 lines
6.5 KiB
Markdown
{{#include ../banners/hacktricks-training.md}}
|
|
|
|
# CBC
|
|
|
|
यदि **कुकी** केवल **उपयोगकर्ता नाम** है (या कुकी का पहला भाग उपयोगकर्ता नाम है) और आप उपयोगकर्ता नाम "**admin**" का अनुकरण करना चाहते हैं। तो, आप उपयोगकर्ता नाम **"bdmin"** बना सकते हैं और कुकी के **पहले बाइट** को **ब्रूटफोर्स** कर सकते हैं।
|
|
|
|
# CBC-MAC
|
|
|
|
**साइफर ब्लॉक चेनिंग मैसेज ऑथेंटिकेशन कोड** (**CBC-MAC**) एक विधि है जो क्रिप्टोग्राफी में उपयोग की जाती है। यह एक संदेश को लेती है और इसे ब्लॉक दर ब्लॉक एन्क्रिप्ट करती है, जहां प्रत्येक ब्लॉक का एन्क्रिप्शन पिछले ब्लॉक से जुड़ा होता है। यह प्रक्रिया एक **ब्लॉकों की श्रृंखला** बनाती है, यह सुनिश्चित करते हुए कि मूल संदेश के एक भी बिट को बदलने से एन्क्रिप्टेड डेटा के अंतिम ब्लॉक में अप्रत्याशित परिवर्तन होगा। ऐसा परिवर्तन करने या उलटने के लिए एन्क्रिप्शन कुंजी की आवश्यकता होती है, जो सुरक्षा सुनिश्चित करती है।
|
|
|
|
संदेश m का CBC-MAC निकालने के लिए, m को शून्य प्रारंभिक वेक्टर के साथ CBC मोड में एन्क्रिप्ट किया जाता है और अंतिम ब्लॉक को रखा जाता है। निम्नलिखित चित्र एक संदेश के CBC-MAC की गणना को दर्शाता है जिसमें ब्लॉक शामिल हैं एक गुप्त कुंजी k और एक ब्लॉक साइफर E का उपयोग करते हुए:
|
|
|
|
.svg/570px-CBC-MAC_structure_(en).svg.png>)
|
|
|
|
# Vulnerability
|
|
|
|
CBC-MAC के साथ आमतौर पर **IV 0** होता है।\
|
|
यह एक समस्या है क्योंकि 2 ज्ञात संदेश (`m1` और `m2`) स्वतंत्र रूप से 2 हस्ताक्षर (`s1` और `s2`) उत्पन्न करेंगे। तो:
|
|
|
|
- `E(m1 XOR 0) = s1`
|
|
- `E(m2 XOR 0) = s2`
|
|
|
|
फिर m1 और m2 के संयोजन से बना एक संदेश (m3) 2 हस्ताक्षर (s31 और s32) उत्पन्न करेगा:
|
|
|
|
- `E(m1 XOR 0) = s31 = s1`
|
|
- `E(m2 XOR s1) = s32`
|
|
|
|
**जिसे एन्क्रिप्शन की कुंजी को जाने बिना गणना करना संभव है।**
|
|
|
|
कल्पना करें कि आप नाम **Administrator** को **8bytes** ब्लॉकों में एन्क्रिप्ट कर रहे हैं:
|
|
|
|
- `Administ`
|
|
- `rator\00\00\00`
|
|
|
|
आप एक उपयोगकर्ता नाम **Administ** (m1) बना सकते हैं और हस्ताक्षर (s1) प्राप्त कर सकते हैं।\
|
|
फिर, आप एक उपयोगकर्ता नाम बना सकते हैं जो `rator\00\00\00 XOR s1` का परिणाम है। यह `E(m2 XOR s1 XOR 0)` उत्पन्न करेगा जो s32 है।\
|
|
अब, आप s32 को पूर्ण नाम **Administrator** के हस्ताक्षर के रूप में उपयोग कर सकते हैं।
|
|
|
|
### Summary
|
|
|
|
1. उपयोगकर्ता नाम **Administ** (m1) का हस्ताक्षर प्राप्त करें जो s1 है
|
|
2. उपयोगकर्ता नाम **rator\x00\x00\x00 XOR s1 XOR 0** का हस्ताक्षर प्राप्त करें जो s32 है।
|
|
3. कुकी को s32 पर सेट करें और यह उपयोगकर्ता **Administrator** के लिए एक मान्य कुकी होगी।
|
|
|
|
# Attack Controlling IV
|
|
|
|
यदि आप उपयोग किए गए IV को नियंत्रित कर सकते हैं तो हमला बहुत आसान हो सकता है।\
|
|
यदि कुकी केवल उपयोगकर्ता नाम एन्क्रिप्टेड है, तो उपयोगकर्ता "**administrator**" का अनुकरण करने के लिए आप उपयोगकर्ता "**Administrator**" बना सकते हैं और आपको इसकी कुकी मिल जाएगी।\
|
|
अब, यदि आप IV को नियंत्रित कर सकते हैं, तो आप IV के पहले बाइट को बदल सकते हैं ताकि **IV\[0] XOR "A" == IV'\[0] XOR "a"** और उपयोगकर्ता **Administrator** के लिए कुकी को फिर से उत्पन्न कर सकें। यह कुकी **administrator** उपयोगकर्ता का अनुकरण करने के लिए मान्य होगी, प्रारंभिक **IV** के साथ।
|
|
|
|
## References
|
|
|
|
अधिक जानकारी के लिए [https://en.wikipedia.org/wiki/CBC-MAC](https://en.wikipedia.org/wiki/CBC-MAC)
|
|
|
|
{{#include ../banners/hacktricks-training.md}}
|