13 KiB
शैडो डॉम
☁️ हैकट्रिक्स क्लाउड ☁️ -🐦 ट्विटर 🐦 - 🎙️ ट्विच 🎙️ - 🎥 यूट्यूब 🎥
- क्या आप साइबर सुरक्षा कंपनी में काम करते हैं? क्या आप अपनी कंपनी को हैकट्रिक्स में विज्ञापित करना चाहते हैं? या क्या आपको PEASS की नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग करना चाहिए? सदस्यता योजनाएं की जांच करें!
- The PEASS Family की खोज करें, हमारा विशेष NFT संग्रह
- आधिकारिक PEASS और HackTricks swag प्राप्त करें
- 💬 डिस्कॉर्ड समूह या टेलीग्राम समूह में शामिल हों या मुझे ट्विटर पर फ़ॉलो करें 🐦@carlospolopm.
- अपने हैकिंग ट्रिक्स साझा करें, PRs सबमिट करके hacktricks repo और hacktricks-cloud repo को।
मूलभूत जानकारी
शैडो डॉम वेब कंपोनेंट्स फीचर स्यूट का हिस्सा है, जिसका उद्देश्य JS डेवलपर्स को अपने कस्टम तत्वों को बनाने के लिए उनके फंक्शनैलिटी को वेबसाइट कोड से अलग करके पुनःउपयोगी बनाने की अनुमति देना है।
मूल रूप से, आप शैडो डॉम का उपयोग करके अपने कंपोनेंट के HTML और CSS को वेबपेज के बाकी कोड से अलग कर सकते हैं। उदाहरण के लिए, यदि आप शैडो डॉम में तत्व आईडी बनाते हैं, तो वे मूल डॉम में तत्व आईडी के साथ टकराएगा नहीं। आप अपने शैडो डॉम में उपयोग करने वाले किसी भी CSS सेलेक्टर का प्रयोग केवल शैडो डॉम में ही लागू होगा और मूल डॉम में नहीं, और आप मूल डॉम में उपयोग करने वाले किसी भी सेलेक्टर का प्रयोग शैडो डॉम में नहीं करेंगे।
// creating a shadow DOM
let $element = document.createElement("div");
$shadowDomRef = $element.attachShadow({ mode: "open" }); // open or closed
आमतौर पर, जब आप एक "खुला" छाया DOM को एक तत्व से जोड़ते हैं, तो आप $element.shadowRoot
के साथ छाया DOM का संदर्भ प्राप्त कर सकते हैं। हालांकि, यदि छाया DOM "बंद" मोड के तहत जुड़ा होता है, तो आप इस तरीके से इसे प्राप्त नहीं कर सकते हैं। चाहे जितनी भी डेवलपर दस्तावेज़ीकरण पढ़ लें, मुझे अभी भी थोड़ी सी अस्पष्टता है कि बंद मोड का उद्देश्य क्या है। Google के अनुसार:
"बंद" मोड के एक और रूप को छाया DOM कहा जाता है। जब आप एक बंद छाया पेड़ बनाते हैं, तो बाहरी JavaScript आपके कंपोनेंट के आंतरिक DOM तक पहुंच नहीं पा सकता। यह
<video>
जैसे प्राकृतिक तत्वों के काम करने की तरह है। JavaScript<video>
के छाया DOM तक पहुंच नहीं कर सकता क्योंकि ब्राउज़र इसे बंद मोड छाया रूट का उपयोग करके लागू करता है।
हालांकि, वे यह भी कहते हैं:
बंद मोड छाया रूट बहुत उपयोगी नहीं है। कुछ डेवलपर बंद मोड को एक कृत्रिम सुरक्षा सुविधा के रूप में देखेंगे। लेकिन यह स्पष्ट हो जाए, यह कोई सुरक्षा सुविधा नहीं है।
छाया DOM तक पहुंच
window.find() और पाठ चयन
फ़ंक्शन window.find("search_text")
छाया DOM के भीतर प्रवेश करता है। यह फ़ंक्शन प्रभावी रूप से वेबपेज पर ctrl-F की तरह कार्य करती है।
यह संभव है कि आप document.execCommand("SelectAll")
को कॉल करके चयन को जितना संभव हो सके विस्तारित करें और फिर window.getSelection()
को कॉल करें छाया DOM में चयनित पाठ की सामग्री लौटाएं।
firefox में आप getSelection()
का उपयोग कर सकते हैं जो एक Selection ऑब्जेक्ट लौटाता है, जहां anchorElement
एक छाया DOM में तत्व के लिए संदर्भ है। इसलिए, हम छाया DOM की सामग्री को निम्नलिखित तरीके से निकाल सकते हैं:
getSelection().anchorNode.parentNode.parentNode.parentNode.innerHTML
लेकिन यह Chromium में काम नहीं करता।
contenteditable या CSS इंजेक्शन
एक तरीका है जिससे हम शैडो डॉम के साथ इंटरैक्ट कर सकते हैं वह है जब हमारे पास इसके अंदर HTML या JS इंजेक्शन हो। कुछ दिलचस्प स्थितियाँ हैं जहां आप एक शैडो डॉम के भीतर इंजेक्शन प्राप्त कर सकते हैं, जहां आप एक सामान्य crossorigin पेज पर नहीं कर सकते हैं।
एक उदाहरण है, यदि आपके पास contenteditable
एट्रिब्यूट के साथ कोई तत्व है। यह एक पुराना और कम उपयोग होने वाला HTML एट्रिब्यूट है जो इस तत्व की सामग्री को उपयोगकर्ता-संपादनीय घोषित करता है। हम संग्रहों का उपयोग कर सकते हैं इसके साथ और document.execCommand
API का उपयोग करके contenteditable तत्व के साथ इंटरैक्ट कर सकते हैं और HTML इंजेक्शन प्राप्त कर सकते हैं!
find('selection within contenteditable');
document.execCommand('insertHTML',false,'<svg/onload=console.log(this.parentElement.outerHTML)>')
शायद और भी रोचक है, contenteditable
को क्रोमियम में किसी भी तत्व पर घोषित किया जा सकता है जब एक अप्रचलित CSS गुण: -webkit-user-modify:read-write
लागू किया जाता है।
इससे हमें एक CSS/स्टाइल इंजेक्शन को एक HTML इंजेक्शन में उठा सकते हैं, एक तत्व पर CSS गुण जोड़कर और फिर insertHTML
कमांड का उपयोग करके।
CTF
इस तकनीक का उपयोग CTF चैलेंज के रूप में किया गया था, इस लेख में देखें: https://github.com/Super-Guesser/ctf/blob/master/2022/dicectf/shadow.md
संदर्भ
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- क्या आप साइबर सुरक्षा कंपनी में काम करते हैं? क्या आप अपनी कंपनी को HackTricks में विज्ञापित देखना चाहते हैं? या क्या आपको PEASS की नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग करना चाहिए? सदस्यता योजनाएं की जांच करें!
- खोजें The PEASS Family, हमारा विशेष NFT संग्रह।
- प्राप्त करें आधिकारिक PEASS और HackTricks swag
- शामिल हों 💬 Discord समूह या टेलीग्राम समूह या मुझे Twitter 🐦@carlospolopm** का पालन करें।**
- अपने हैकिंग ट्रिक्स साझा करें, PRs सबमिट करके hacktricks repo और hacktricks-cloud repo को।