DOM XSS

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

DOM सुरक्षा दोष

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

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

  • सिंक वे संभावित खतरनाक अंत-बिंदु होते हैं जहाँ दुर्भाग्यपूर्ण डेटा नुकसानकारी प्रभावों में ले जा सकता है, जैसे स्क्रिप्ट क्रियान्वयन।

जोखिम उत्पन्न होता है जब डेटा स्रोत से सिंक में सही मान्यता या सफाई के बिना बहता है, जिससे 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

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

जेक्वेरी

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 सिंक किसी भी आधुनिक ब्राउज़र पर स्क्रिप्ट तत्वों को स्वीकार नहीं करता है, न तो 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()

कुकी मैनिपुलेशन

स्रोत: https://portswigger.net/web-security/dom-based/cookie-manipulation

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

सिंक:

document.cookie

जावास्क्रिप्ट इंजेक्शन

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

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

Sinks:

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

दस्तावेज़-डोमेन मानिपुलेशन

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

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

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

सिंक्स:

document.domain

WebSocket-URL poisoning

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

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

Sinks:

WebSocket constructor WebSocket-URL poisoning vulnerabilities में ले जा सकता है।

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

DOM-based link-manipulation vulnerabilities उत्पन्न होती है जब एक स्क्रिप्ट वर्तमान पृष्ठ में नेविगेशन लक्ष्य के लिए हमलावर-नियंत्रण योग्य डेटा को लिखता है, जैसे क्लिक करने योग्य लिंक या एक फॉर्म के सबमिशन URL।

Sinks:

someDOMElement.href
someDOMElement.src
someDOMElement.action

एजेक्स अनुरोध मानिपुलेशन

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

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

सिंक्स:

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

क्लाइंट-साइड एसक्यूएल इंजेक्शन

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

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

Sinks:

executeSql()

HTML5-संग्रहन संशोधन

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

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

Sinks:

sessionStorage.setItem()
localStorage.setItem()

XPath अंधाधुंध घुसपैठ

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

DOM-आधारित 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-डेटा मानिपुलेशन सुरक्षा दोष उत्पन्न होते हैं जब एक स्क्रिप्ट डोम के भीतर एक क्षेत्र में अटैकर-नियंत्रित डेटा लिखता है जो दृश्यमान यूआई या क्लाइंट-साइड तर्क में उपयोग किया जाता है। एक हमलावर इस सुरक्षा दोष का शिकार बना सकता है ताकि वह एक URL बना सके जिसे अगर किसी अन्य उपयोगकर्ता द्वारा देखा जाता है, तो वह क्लाइंट-साइड यूआई की दिखावट या व्यवहार को बदल सकता है।

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

सेवा की इनकार

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

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

Sinks:

requestFileSystem()
RegExp()

Dom Clobbering

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

Last updated