DOM XSS

Support HackTricks

DOM Vulnerabilities

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

  • स्रोत वे इनपुट हैं जिन्हें हमलावरों द्वारा हेरफेर किया जा सकता है, जिसमें URL, कुकीज़, और वेब संदेश शामिल हैं।

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

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

आप स्रोतों और सिंक की एक अधिक अद्यतन सूची पा सकते हैं 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

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

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

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

someDOMElement.action

someDOMElement.onevent

JSON.parse()

sessionStorage.setItem()

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

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 manipulation vulnerabilities तब होती हैं जब एक स्क्रिप्ट document.domain प्रॉपर्टी को ऐसे डेटा का उपयोग करके सेट करती है जिसे एक हमलावर नियंत्रित कर सकता है।

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

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

Client-Side SQl injection

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 injection

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

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

Sinks:

document.evaluate()
someDOMElement.evaluate()

Client-side JSON injection

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

Dom Clobbering

Dom Clobbering
HackTricks का समर्थन करें

Last updated