DOM XSS
Reading time: 11 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
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://github.com/mozilla/eslint-plugin-no-unsanitized
- संभावित सिंक तक पहुँचने वाले हर डेटा की जाँच करने के लिए ब्राउज़र एक्सटेंशन: https://github.com/kevin-mizu/domloggerpp
उदाहरण
ओपन रीडायरेक्ट
से: 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 कमजोरियों की ओर ले जा सकता है।
Link manipulation
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()
डॉम क्लॉबरिंग
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।