31 KiB

DOM XSS

{{#include ../../banners/hacktricks-training.md}}

DOM Vulnerabilities

DOM कमजोरियाँ तब होती हैं जब हमलावर-नियंत्रित स्रोतों (जैसे location.search, document.referrer, या document.cookie) से डेटा असुरक्षित रूप से सिंक में स्थानांतरित किया जाता है। सिंक वे फ़ंक्शन या ऑब्जेक्ट होते हैं (जैसे, eval(), document.body.innerHTML) जो यदि दुर्भावनापूर्ण डेटा दिया जाए तो हानिकारक सामग्री को निष्पादित या प्रस्तुत कर सकते हैं।

  • स्रोत वे इनपुट हैं जिन्हें हमलावरों द्वारा हेरफेर किया जा सकता है, जिसमें URLs, कुकीज़, और वेब संदेश शामिल हैं।
  • सिंक संभावित रूप से खतरनाक एंडपॉइंट हैं जहाँ दुर्भावनापूर्ण डेटा प्रतिकूल प्रभावों का कारण बन सकता है, जैसे कि स्क्रिप्ट निष्पादन।

जोखिम तब उत्पन्न होता है जब डेटा एक स्रोत से एक सिंक में उचित सत्यापन या सफाई के बिना प्रवाहित होता है, जिससे XSS जैसे हमलों की अनुमति मिलती है।

Note

आप स्रोतों और सिंक की एक अधिक अद्यतन सूची https://github.com/wisec/domxsswiki/wiki में पा सकते हैं।

सामान्य स्रोत:

document.URL
document.documentURI
document.URLUnencoded
document.baseURI
location
document.cookie
document.referrer
window.name
history.pushState
history.replaceState
localStorage
sessionStorage
IndexedDB(mozIndexedDB, webkitIndexedDB, msIndexedDB)
Database

सामान्य सिंक:

ओपन रीडायरेक्ट जावास्क्रिप्ट इंजेक्शन DOM-डेटा हेरफेर jQuery
location eval() scriptElement.src add()
location.host Function() constructor scriptElement.text after()
location.hostname setTimeout() scriptElement.textContent append()
location.href setInterval() scriptElement.innerText animate()
location.pathname setImmediate() someDOMElement.setAttribute() insertAfter()
location.search execCommand() someDOMElement.search insertBefore()
location.protocol execScript() someDOMElement.text before()
location.assign() msSetImmediate() someDOMElement.textContent html()
location.replace() range.createContextualFragment() someDOMElement.innerText prepend()
open() crypto.generateCRMFRequest() someDOMElement.outerText replaceAll()
domElem.srcdoc ``स्थानीय फ़ाइल-पथ हेरफेर someDOMElement.value replaceWith()
XMLHttpRequest.open() FileReader.readAsArrayBuffer() someDOMElement.name wrap()
XMLHttpRequest.send() FileReader.readAsBinaryString() someDOMElement.target wrapInner()
jQuery.ajax() FileReader.readAsDataURL() someDOMElement.method wrapAll()
$.ajax() FileReader.readAsText() someDOMElement.type has()
``Ajax अनुरोध हेरफेर FileReader.readAsFile() someDOMElement.backgroundImage constructor()
XMLHttpRequest.setRequestHeader() FileReader.root.getFile() someDOMElement.cssText init()
XMLHttpRequest.open() FileReader.root.getFile() someDOMElement.codebase index()
XMLHttpRequest.send() लिंक हेरफेर someDOMElement.innerHTML jQuery.parseHTML()
jQuery.globalEval() someDOMElement.href someDOMElement.outerHTML $.parseHTML()
$.globalEval() someDOMElement.src someDOMElement.insertAdjacentHTML क्लाइंट-साइड JSON इंजेक्शन
``HTML5-स्टोरेज हेरफेर someDOMElement.action someDOMElement.onevent JSON.parse()
sessionStorage.setItem() XPath इंजेक्शन document.write() jQuery.parseJSON()
localStorage.setItem() document.evaluate() document.writeln() $.parseJSON()
**[**`सेवा का इनकार`**](dom-xss.md#denial-of-service)** someDOMElement.evaluate() document.title ``कुकी हेरफेर
requestFileSystem() ``डॉक्यूमेंट-डोमेन हेरफेर document.implementation.createHTMLDocument() document.cookie
RegExp() document.domain history.pushState() WebSocket-URL विषाक्तता
क्लाइंट-साइड SQL इंजेक्शन वेब-संदेश हेरफेर history.replaceState() WebSocket
executeSql() postMessage() `` ``

innerHTML सिंक किसी भी आधुनिक ब्राउज़र पर script तत्वों को स्वीकार नहीं करता है, न ही svg onload घटनाएँ चलेंगी। इसका मतलब है कि आपको img या iframe जैसे वैकल्पिक तत्वों का उपयोग करना होगा।

इस प्रकार का XSS शायद खोजने के लिए सबसे कठिन है, क्योंकि आपको JS कोड के अंदर देखना होगा, यह देखना होगा कि क्या यह किसी वस्तु का उपयोग कर रहा है जिसका मूल्य आप नियंत्रित करते हैं, और इस मामले में, यह देखना होगा कि क्या इसे मनमाने JS को निष्पादित करने के लिए दुरुपयोग करने का कोई तरीका है

उन्हें खोजने के उपकरण

उदाहरण

ओपन रीडायरेक्ट

से: https://portswigger.net/web-security/dom-based/open-redirection

DOM में ओपन रीडायरेक्ट कमजोरियाँ तब होती हैं जब एक स्क्रिप्ट डेटा लिखती है, जिसे एक हमलावर नियंत्रित कर सकता है, एक सिंक में जो डोमेन के बीच नेविगेशन शुरू करने में सक्षम है।

यह समझना महत्वपूर्ण है कि मनमाना कोड निष्पादित करना, जैसे कि javascript:alert(1), संभव है यदि आपके पास उस URL की शुरुआत पर नियंत्रण है जहाँ रीडायरेक्शन होता है।

सिंक:

location
location.host
location.hostname
location.href
location.pathname
location.search
location.protocol
location.assign()
location.replace()
open()
domElem.srcdoc
XMLHttpRequest.open()
XMLHttpRequest.send()
jQuery.ajax()
$.ajax()

कुकी हेरफेर

From: https://portswigger.net/web-security/dom-based/cookie-manipulation

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

Sinks:

document.cookie

JavaScript Injection

From: https://portswigger.net/web-security/dom-based/javascript-injection

DOM-आधारित JavaScript इंजेक्शन कमजोरियाँ तब उत्पन्न होती हैं जब एक स्क्रिप्ट डेटा चलाती है, जिसे एक हमलावर द्वारा नियंत्रित किया जा सकता है, JavaScript कोड के रूप में।

Sinks:

eval()
Function() constructor
setTimeout()
setInterval()
setImmediate()
execCommand()
execScript()
msSetImmediate()
range.createContextualFragment()
crypto.generateCRMFRequest()

Document-domain manipulation

From: https://portswigger.net/web-security/dom-based/document-domain-manipulation

डॉक्यूमेंट-डोमेन मैनिपुलेशन कमजोरियाँ तब होती हैं जब एक स्क्रिप्ट document.domain प्रॉपर्टी को ऐसे डेटा का उपयोग करके सेट करती है जिसे एक हमलावर नियंत्रित कर सकता है।

document.domain प्रॉपर्टी ब्राउज़रों द्वारा समान-स्रोत नीति के कार्यांवयन में एक मुख्य भूमिका निभाती है। जब विभिन्न स्रोतों से दो पृष्ठ अपने document.domain को एक ही मान पर सेट करते हैं, तो वे बिना किसी प्रतिबंध के बातचीत कर सकते हैं। हालांकि ब्राउज़र्स document.domain के लिए असाइन किए जाने वाले मानों पर कुछ सीमाएँ लगाते हैं, जो वास्तविक पृष्ठ स्रोत के लिए पूरी तरह से असंबंधित मानों के असाइनमेंट को रोकते हैं, लेकिन अपवाद मौजूद हैं। आमतौर पर, ब्राउज़र्स चाइल्ड या पैरेंट डोमेन्स के उपयोग की अनुमति देते हैं।

Sinks:

document.domain

WebSocket-URL poisoning

From: https://portswigger.net/web-security/dom-based/websocket-url-poisoning

WebSocket-URL poisoning तब होता है जब एक स्क्रिप्ट नियंत्रित डेटा को WebSocket कनेक्शन के लिए लक्षित URL के रूप में उपयोग करती है

Sinks:

WebSocket कंस्ट्रक्टर WebSocket-URL poisoning कमजोरियों की ओर ले जा सकता है।

From: https://portswigger.net/web-security/dom-based/link-manipulation

DOM-आधारित लिंक-मैनिपुलेशन कमजोरियाँ तब उत्पन्न होती हैं जब एक स्क्रिप्ट हमलावर-नियंत्रित डेटा को वर्तमान पृष्ठ के भीतर एक नेविगेशन लक्ष्य पर लिखती है, जैसे कि एक क्लिक करने योग्य लिंक या एक फॉर्म का सबमिशन URL।

Sinks:

someDOMElement.href
someDOMElement.src
someDOMElement.action

Ajax अनुरोध हेरफेर

From: https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation

Ajax अनुरोध हेरफेर कमजोरियाँ तब उत्पन्न होती हैं जब एक स्क्रिप्ट हमलावर-नियंत्रित डेटा को एक Ajax अनुरोध में लिखती है जो XmlHttpRequest ऑब्जेक्ट का उपयोग करके जारी किया जाता है।

Sinks:

XMLHttpRequest.setRequestHeader()
XMLHttpRequest.open()
XMLHttpRequest.send()
jQuery.globalEval()
$.globalEval()

स्थानीय फ़ाइल-पथ हेरफेर

From: https://portswigger.net/web-security/dom-based/local-file-path-manipulation

स्थानीय फ़ाइल-पथ हेरफेर की कमजोरियाँ तब उत्पन्न होती हैं जब एक स्क्रिप्ट हमलावर-नियंत्रित डेटा को फ़ाइल-हैंडलिंग API में filename पैरामीटर के रूप में पास करती है। इस कमजोरी का उपयोग एक हमलावर द्वारा एक URL बनाने के लिए किया जा सकता है जो, यदि किसी अन्य उपयोगकर्ता द्वारा देखा जाए, तो उपयोगकर्ता के ब्राउज़र को एक मनमाना स्थानीय फ़ाइल खोलने या लिखने के लिए प्रेरित कर सकता है।

Sinks:

FileReader.readAsArrayBuffer()
FileReader.readAsBinaryString()
FileReader.readAsDataURL()
FileReader.readAsText()
FileReader.readAsFile()
FileReader.root.getFile()
FileReader.root.getFile()

क्लाइंट-साइड SQL इंजेक्शन

From: https://portswigger.net/web-security/dom-based/client-side-sql-injection

क्लाइंट-साइड SQL-इंजेक्शन कमजोरियाँ तब होती हैं जब एक स्क्रिप्ट हमलावर-नियंत्रित डेटा को एक क्लाइंट-साइड SQL क्वेरी में असुरक्षित तरीके से शामिल करती है

Sinks:

executeSql()

HTML5-storage manipulation

From: https://portswigger.net/web-security/dom-based/html5-storage-manipulation

HTML5-storage manipulation vulnerabilities तब उत्पन्न होती हैं जब एक स्क्रिप्ट हमलावर-नियंत्रित डेटा को वेब ब्राउज़र के HTML5 स्टोरेज में स्टोर करती है (localStorage या sessionStorage)। जबकि यह क्रिया स्वाभाविक रूप से एक सुरक्षा कमजोरी नहीं है, यह समस्या बन जाती है यदि एप्लिकेशन बाद में स्टोर किए गए डेटा को पढ़ता है और इसे असुरक्षित तरीके से प्रोसेस करता है। इससे एक हमलावर को स्टोरेज तंत्र का लाभ उठाकर अन्य DOM-आधारित हमले करने की अनुमति मिल सकती है, जैसे कि क्रॉस-साइट स्क्रिप्टिंग और जावास्क्रिप्ट इंजेक्शन।

Sinks:

sessionStorage.setItem()
localStorage.setItem()

XPath इंजेक्शन

From: https://portswigger.net/web-security/dom-based/client-side-xpath-injection

DOM-आधारित XPath-इंजेक्शन कमजोरियाँ तब होती हैं जब एक स्क्रिप्ट हमलावर-नियंत्रित डेटा को XPath क्वेरी में शामिल करती है

Sinks:

document.evaluate()
someDOMElement.evaluate()

क्लाइंट-साइड JSON इंजेक्शन

From: https://portswigger.net/web-security/dom-based/client-side-json-injection

DOM-आधारित JSON-इंजेक्शन कमजोरियाँ तब होती हैं जब एक स्क्रिप्ट हमलावर-नियंत्रित डेटा को एक स्ट्रिंग में शामिल करती है जिसे JSON डेटा संरचना के रूप में पार्स किया जाता है और फिर एप्लिकेशन द्वारा प्रोसेस किया जाता है

Sinks:

JSON.parse()
jQuery.parseJSON()
$.parseJSON()

वेब-संदेश हेरफेर

From: https://portswigger.net/web-security/dom-based/web-message-manipulation

वेब-संदेश कमजोरियाँ तब उत्पन्न होती हैं जब एक स्क्रिप्ट हमलावर-नियंत्रित डेटा को एक वेब संदेश के रूप में दूसरे दस्तावेज़ में भेजती है। कमजोर वेब-संदेश हेरफेर का एक उदाहरण PortSwigger's Web Security Academy पर पाया जा सकता है।

Sinks:

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

DOM-डेटा हेरफेर

From: https://portswigger.net/web-security/dom-based/dom-data-manipulation

DOM-डेटा हेरफेर कमजोरियाँ तब उत्पन्न होती हैं जब एक स्क्रिप्ट हमलावर-नियंत्रित डेटा को DOM के एक क्षेत्र में लिखती है जिसका उपयोग दृश्य UI या क्लाइंट-साइड लॉजिक में किया जाता है। इस कमजोरी का उपयोग एक हमलावर द्वारा एक URL बनाने के लिए किया जा सकता है जो, यदि किसी अन्य उपयोगकर्ता द्वारा देखा जाता है, तो क्लाइंट-साइड UI की उपस्थिति या व्यवहार को बदल सकता है।

Sinks:

scriptElement.src
scriptElement.text
scriptElement.textContent
scriptElement.innerText
someDOMElement.setAttribute()
someDOMElement.search
someDOMElement.text
someDOMElement.textContent
someDOMElement.innerText
someDOMElement.outerText
someDOMElement.value
someDOMElement.name
someDOMElement.target
someDOMElement.method
someDOMElement.type
someDOMElement.backgroundImage
someDOMElement.cssText
someDOMElement.codebase
document.title
document.implementation.createHTMLDocument()
history.pushState()
history.replaceState()

Denial of Service

From: https://portswigger.net/web-security/dom-based/denial-of-service

DOM-आधारित सेवा से इनकार की कमजोरियाँ तब होती हैं जब एक स्क्रिप्ट हमलावर-नियंत्रित डेटा को एक समस्याग्रस्त प्लेटफ़ॉर्म API में असुरक्षित रूप से पास करती है। इसमें ऐसे APIs शामिल हैं, जो जब सक्रिय होते हैं, तो उपयोगकर्ता के कंप्यूटर को अत्यधिक मात्रा में CPU या डिस्क स्थान का उपभोग करने के लिए प्रेरित कर सकते हैं। ऐसी कमजोरियों के महत्वपूर्ण दुष्प्रभाव हो सकते हैं, जैसे कि ब्राउज़र वेबसाइट की कार्यक्षमता को सीमित कर देता है, डेटा को localStorage में स्टोर करने के प्रयासों को अस्वीकार करके या व्यस्त स्क्रिप्ट को समाप्त करके।

Sinks:

requestFileSystem()
RegExp()

डॉम क्लॉबरिंग

{{#ref}} dom-clobbering.md {{#endref}}

{{#include ../../banners/hacktricks-training.md}}