Padding Oracle
Reading time: 6 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
CBC - Cipher Block Chaining
CBC मोड में पिछला एन्क्रिप्टेड ब्लॉक IV के रूप में उपयोग किया जाता है अगले ब्लॉक के साथ XOR करने के लिए:
CBC को डिक्रिप्ट करने के लिए विपरीत ऑपरेशंस किए जाते हैं:
ध्यान दें कि एन्क्रिप्शन की और IV का उपयोग करना आवश्यक है।
Message Padding
चूंकि एन्क्रिप्शन फिक्स्ड साइज ब्लॉक्स में किया जाता है, पैडिंग आमतौर पर अंतिम ब्लॉक में इसकी लंबाई को पूरा करने के लिए आवश्यक होती है।
आमतौर पर PKCS7 का उपयोग किया जाता है, जो पैडिंग जेनरेट करता है ब्लॉक को पूरा करने के लिए आवश्यक बाइट्स की संख्या को दोहराते हुए। उदाहरण के लिए, यदि अंतिम ब्लॉक में 3 बाइट्स की कमी है, तो पैडिंग होगी \x03\x03\x03
।
आइए 8 बाइट्स की 2 ब्लॉक्स के साथ और उदाहरण देखें:
byte #0 | byte #1 | byte #2 | byte #3 | byte #4 | byte #5 | byte #6 | byte #7 | byte #0 | byte #1 | byte #2 | byte #3 | byte #4 | byte #5 | byte #6 | byte #7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
P | A | S | S | W | O | R | D | 1 | 2 | 3 | 4 | 5 | 6 | 0x02 | 0x02 |
P | A | S | S | W | O | R | D | 1 | 2 | 3 | 4 | 5 | 0x03 | 0x03 | 0x03 |
P | A | S | S | W | O | R | D | 1 | 2 | 3 | 0x05 | 0x05 | 0x05 | 0x05 | 0x05 |
P | A | S | S | W | O | R | D | 0x08 | 0x08 | 0x08 | 0x08 | 0x08 | 0x08 | 0x08 | 0x08 |
ध्यान दें कि अंतिम उदाहरण में अंतिम ब्लॉक पूरा था इसलिए केवल पैडिंग के साथ एक और उत्पन्न किया गया।
Padding Oracle
जब एक एप्लिकेशन एन्क्रिप्टेड डेटा को डिक्रिप्ट करता है, तो यह पहले डेटा को डिक्रिप्ट करेगा; फिर यह पैडिंग को हटा देगा। पैडिंग की सफाई के दौरान, यदि अमान्य पैडिंग एक पहचान योग्य व्यवहार को ट्रिगर करती है, तो आपके पास पैडिंग ऑरेकल भेद्यता है। पहचान योग्य व्यवहार एक त्रुटि, परिणामों की कमी, या धीमी प्रतिक्रिया हो सकता है।
यदि आप इस व्यवहार का पता लगाते हैं, तो आप एन्क्रिप्टेड डेटा को डिक्रिप्ट कर सकते हैं और यहां तक कि किसी भी क्लियरटेक्स्ट को एन्क्रिप्ट कर सकते हैं।
How to exploit
आप इस प्रकार की भेद्यता का शोषण करने के लिए https://github.com/AonCyberLabs/PadBuster का उपयोग कर सकते हैं या बस करें
sudo apt-get install padbuster
किसी साइट के कुकी की संवेदनशीलता का परीक्षण करने के लिए आप कोशिश कर सकते हैं:
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA=="
Encoding 0 का मतलब है कि base64 का उपयोग किया गया है (लेकिन अन्य उपलब्ध हैं, मदद मेनू की जांच करें)।
आप इस कमजोरियों का दुरुपयोग करके नए डेटा को एन्क्रिप्ट कर सकते हैं। उदाहरण के लिए, कल्पना करें कि कुकी की सामग्री "user=MyUsername" है, तो आप इसे "_user=administrator_" में बदल सकते हैं और एप्लिकेशन के अंदर विशेषाधिकार बढ़ा सकते हैं। आप इसे paduster
का उपयोग करके -plaintext पैरामीटर निर्दिष्ट करके भी कर सकते हैं:
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" -plaintext "user=administrator"
यदि साइट कमजोर है तो padbuster
स्वचालित रूप से यह पता लगाने की कोशिश करेगा कि पैडिंग त्रुटि कब होती है, लेकिन आप -error पैरामीटर का उपयोग करके त्रुटि संदेश को भी इंगित कर सकते हैं।
perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon=RVJDQrwUdTRWJUVUeBKkEA==" -error "Invalid padding"
सिद्धांत
संक्षेप में, आप सभी विभिन्न पैडिंग बनाने के लिए उपयोग किए जा सकने वाले सही मानों का अनुमान लगाकर एन्क्रिप्टेड डेटा को डिक्रिप्ट करना शुरू कर सकते हैं। फिर, पैडिंग ऑरेकल अटैक अंत से शुरू होकर सही मान का अनुमान लगाते हुए बाइट्स को डिक्रिप्ट करना शुरू करेगा जो 1, 2, 3, आदि की पैडिंग बनाता है।
कल्पना करें कि आपके पास कुछ एन्क्रिप्टेड टेक्स्ट है जो 2 ब्लॉक्स में फैला हुआ है जो E0 से E15 तक के बाइट्स से बना है।
अंतिम ब्लॉक (E8 से E15) को डिक्रिप्ट करने के लिए, पूरा ब्लॉक "ब्लॉक सिफर डिक्रिप्शन" के माध्यम से जाता है जिससे मध्यवर्ती बाइट्स I0 से I15 उत्पन्न होते हैं।
अंत में, प्रत्येक मध्यवर्ती बाइट को पिछले एन्क्रिप्टेड बाइट्स (E0 से E7) के साथ XOR किया जाता है। तो:
C15 = D(E15) ^ E7 = I15 ^ E7
C14 = I14 ^ E6
C13 = I13 ^ E5
C12 = I12 ^ E4
- ...
अब, यह संभव है कि E7
को इस तरह से संशोधित करें कि C15
0x01
हो, जो एक सही पैडिंग भी होगी। तो, इस मामले में: \x01 = I15 ^ E'7
तो, E'7 को खोजकर, I15 की गणना करना संभव है: I15 = 0x01 ^ E'7
जो हमें C15 की गणना करने की अनुमति देता है: C15 = E7 ^ I15 = E7 ^ \x01 ^ E'7
C15 को जानकर, अब C14 की गणना करना संभव है, लेकिन इस बार पैडिंग \x02\x02
को ब्रूट-फोर्स करते हुए।
यह BF पिछले एक के रूप में जटिल है क्योंकि यह E''15
की गणना करना संभव है जिसका मान 0x02 है: E''7 = \x02 ^ I15
इसलिए केवल E'14
को खोजने की आवश्यकता है जो C14
को 0x02
के बराबर बनाता है।
फिर, C14 को डिक्रिप्ट करने के लिए वही कदम उठाएं: C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6
इस श्रृंखला का पालन करें जब तक आप पूरे एन्क्रिप्टेड टेक्स्ट को डिक्रिप्ट न कर लें।
भेद्यता का पता लगाना
एक रजिस्टर और खाता बनाएं और इस खाते से लॉग इन करें।
यदि आप कई बार लॉग इन करते हैं और हमेशा एक ही कुकी प्राप्त करते हैं, तो संभवतः एप्लिकेशन में कुछ गलत है। कुकी हर बार लॉग इन करते समय अद्वितीय होनी चाहिए। यदि कुकी हमेशा एक ही है, तो यह संभवतः हमेशा मान्य होगी और इसे अमान्य करने का कोई तरीका नहीं होगा।
अब, यदि आप कुकी को संशोधित करने की कोशिश करते हैं, तो आप देख सकते हैं कि आपको एप्लिकेशन से एक त्रुटि मिलती है।
लेकिन यदि आप पैडिंग को BF करते हैं (उदाहरण के लिए padbuster का उपयोग करते हुए) तो आप एक अन्य उपयोगकर्ता के लिए मान्य कुकी प्राप्त करने में सफल होते हैं। यह परिदृश्य padbuster के लिए अत्यधिक संभावित रूप से संवेदनशील है।
संदर्भ
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।