DOM XSS
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Οι ευπάθειες DOM συμβαίνουν όταν δεδομένα από πηγές που ελέγχονται από επιτιθέμενους (όπως το location.search
, document.referrer
ή document.cookie
) μεταφέρονται με ανασφαλή τρόπο σε αποδέκτες. Οι αποδέκτες είναι συναρτήσεις ή αντικείμενα (π.χ., eval()
, document.body.innerHTML
) που μπορούν να εκτελέσουν ή να αποδώσουν επιβλαβές περιεχόμενο αν λάβουν κακόβουλα δεδομένα.
Πηγές είναι είσοδοι που μπορούν να χειραγωγηθούν από επιτιθέμενους, συμπεριλαμβανομένων των URLs, cookies και διαδικτυακών μηνυμάτων.
Αποδέκτες είναι δυνητικά επικίνδυνες διευθύνσεις όπου τα κακόβουλα δεδομένα μπορούν να οδηγήσουν σε αρνητικές συνέπειες, όπως η εκτέλεση σεναρίων.
Ο κίνδυνος προκύπτει όταν τα δεδομένα ρέουν από μια πηγή σε έναν αποδέκτη χωρίς κατάλληλη επικύρωση ή απολύμανση, επιτρέποντας επιθέσεις όπως το XSS.
You can find a more updated list of sources and sinks in https://github.com/wisec/domxsswiki/wiki
Common sources:
Κοινές Σημειακές Εξόδους:
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()
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()
XMLHttpRequest.setRequestHeader()
FileReader.root.getFile()
someDOMElement.cssText
init()
XMLHttpRequest.open()
FileReader.root.getFile()
someDOMElement.codebase
index()
jQuery.globalEval()
someDOMElement.href
someDOMElement.outerHTML
$.parseHTML()
localStorage.setItem()
document.evaluate()
document.writeln()
$.parseJSON()
**[**`Άρνηση Υπηρεσίας`**](dom-xss.md#denial-of-service)**
someDOMElement.evaluate()
document.title
requestFileSystem()
document.implementation.createHTMLDocument()
document.cookie
executeSql()
postMessage()
``
``
Η innerHTML
έξοδος δεν δέχεται script
στοιχεία σε κανέναν σύγχρονο περιηγητή, ούτε θα εκτελούνται τα γεγονότα svg onload
. Αυτό σημαίνει ότι θα χρειαστεί να χρησιμοποιήσετε εναλλακτικά στοιχεία όπως img
ή iframe
.
Αυτού του είδους το XSS είναι πιθανώς το πιο δύσκολο να βρεθεί, καθώς πρέπει να κοιτάξετε μέσα στον κώδικα JS, να δείτε αν χρησιμοποιεί οποιοδήποτε αντικείμενο του οποίου την τιμή ελέγχετε, και σε αυτή την περίπτωση, να δείτε αν υπάρχει οποιοσδήποτε τρόπος να το εκμεταλλευτείτε για να εκτελέσετε αυθαίρετο JS.
Επέκταση περιηγητή για να ελέγχει κάθε δεδομένο που φτάνει σε μια πιθανή έξοδο: https://github.com/kevin-mizu/domloggerpp
Από: https://portswigger.net/web-security/dom-based/open-redirection
Οι ευπάθειες ανοιχτής ανακατεύθυνσης στο DOM συμβαίνουν όταν ένα σενάριο γράφει δεδομένα, τα οποία μπορεί να ελέγξει ένας επιτιθέμενος, σε μια έξοδο ικανή να ξεκινήσει πλοήγηση σε διάφορους τομείς.
Είναι κρίσιμο να κατανοήσετε ότι η εκτέλεση αυθαίρετου κώδικα, όπως javascript:alert(1)
, είναι δυνατή αν έχετε έλεγχο στην αρχή της διεύθυνσης URL όπου συμβαίνει η ανακατεύθυνση.
Σημεία:
From: https://portswigger.net/web-security/dom-based/cookie-manipulation
Οι ευπάθειες χειρισμού cookie που βασίζονται στο DOM συμβαίνουν όταν ένα σενάριο ενσωματώνει δεδομένα, τα οποία μπορούν να ελεγχθούν από έναν επιτιθέμενο, στην τιμή ενός cookie. Αυτή η ευπάθεια μπορεί να οδηγήσει σε απροσδόκητη συμπεριφορά της ιστοσελίδας αν το cookie χρησιμοποιείται εντός του ιστότοπου. Επιπλέον, μπορεί να εκμεταλλευτεί για να πραγματοποιηθεί μια επίθεση σταθεροποίησης συνεδρίας αν το cookie εμπλέκεται στην παρακολούθηση των συνεδριών χρηστών. Ο κύριος αποδέκτης που σχετίζεται με αυτή την ευπάθεια είναι:
Sinks:
From: https://portswigger.net/web-security/dom-based/javascript-injection
Οι ευπάθειες εισαγωγής JavaScript που βασίζονται στο DOM δημιουργούνται όταν ένα σενάριο εκτελεί δεδομένα, τα οποία μπορούν να ελεγχθούν από έναν επιτιθέμενο, ως κώδικα JavaScript.
Sinks:
From: https://portswigger.net/web-security/dom-based/document-domain-manipulation
Ευπάθειες χειρισμού document-domain συμβαίνουν όταν ένα σενάριο ορίζει την ιδιότητα document.domain
χρησιμοποιώντας δεδομένα που μπορεί να ελέγξει ένας επιτιθέμενος.
Η ιδιότητα document.domain
παίζει έναν κεντρικό ρόλο στην επιβολή της πολιτικής ίδιας προέλευσης από τους περιηγητές. Όταν δύο σελίδες από διαφορετικές προελεύσεις ορίζουν το document.domain
τους στην ίδια τιμή, μπορούν να αλληλεπιδρούν χωρίς περιορισμούς. Αν και οι περιηγητές επιβάλλουν ορισμένους περιορισμούς στις τιμές που μπορούν να ανατεθούν στο document.domain
, αποτρέποντας την ανάθεση εντελώς άσχετων τιμών στην πραγματική προέλευση της σελίδας, υπάρχουν εξαιρέσεις. Συνήθως, οι περιηγητές επιτρέπουν τη χρήση παιδικών ή γονικών τομέων.
Sinks:
From: https://portswigger.net/web-security/dom-based/websocket-url-poisoning
WebSocket-URL poisoning συμβαίνει όταν ένα σενάριο χρησιμοποιεί ελέγξιμα δεδομένα ως τον στόχο URL για μια σύνδεση WebSocket.
Sinks:
Ο κατασκευαστής WebSocket
μπορεί να οδηγήσει σε ευπάθειες WebSocket-URL poisoning.
From: https://portswigger.net/web-security/dom-based/link-manipulation
DOM-based link-manipulation vulnerabilities προκύπτουν όταν ένα σενάριο γράφει δεδομένα ελέγξιμα από τον επιτιθέμενο σε έναν στόχο πλοήγησης μέσα στην τρέχουσα σελίδα, όπως ένα κλικαρίσιμο σύνδεσμο ή το URL υποβολής μιας φόρμας.
Sinks:
From: https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation
Οι ευπάθειες χειρισμού αιτημάτων Ajax προκύπτουν όταν ένα σενάριο γράφει δεδομένα που ελέγχονται από τον επιτιθέμενο σε ένα αίτημα Ajax που εκδίδεται χρησιμοποιώντας ένα αντικείμενο XmlHttpRequest
.
Sinks:
From: https://portswigger.net/web-security/dom-based/local-file-path-manipulation
Οι ευπάθειες τοπικής παραποίησης διαδρομής αρχείου προκύπτουν όταν ένα σενάριο περνά δεδομένα που ελέγχονται από τον επιτιθέμενο σε μια API διαχείρισης αρχείων ως παράμετρο filename
. Αυτή η ευπάθεια μπορεί να εκμεταλλευτεί από έναν επιτιθέμενο για να κατασκευάσει μια διεύθυνση URL που, αν επισκεφθεί από έναν άλλο χρήστη, θα μπορούσε να οδηγήσει στο να ανοίξει ή να γράψει το πρόγραμμα περιήγησης του χρήστη ένα αυθαίρετο τοπικό αρχείο.
Sinks:
From: https://portswigger.net/web-security/dom-based/client-side-sql-injection
Ευπάθειες SQL injection πελάτη συμβαίνουν όταν ένα σενάριο ενσωματώνει δεδομένα που ελέγχονται από τον επιτιθέμενο σε ένα ερώτημα SQL πελάτη με μη ασφαλή τρόπο.
Sinks:
From: https://portswigger.net/web-security/dom-based/html5-storage-manipulation
Οι ευπάθειες χειρισμού HTML5-storage προκύπτουν όταν ένα σενάριο αποθηκεύει δεδομένα που ελέγχονται από τον επιτιθέμενο στην αποθήκευση HTML5 του web browser (localStorage
ή sessionStorage
). Ενώ αυτή η ενέργεια δεν είναι εγγενώς μια ευπάθεια ασφαλείας, γίνεται προβληματική αν η εφαρμογή στη συνέχεια διαβάσει τα αποθηκευμένα δεδομένα και τα επεξεργαστεί με ανασφαλή τρόπο. Αυτό θα μπορούσε να επιτρέψει σε έναν επιτιθέμενο να εκμεταλλευτεί τον μηχανισμό αποθήκευσης για να διεξάγει άλλες επιθέσεις βασισμένες στο DOM, όπως η διασταυρούμενη σcripting και η ένεση JavaScript.
Sinks:
From: https://portswigger.net/web-security/dom-based/client-side-xpath-injection
Οι ευπάθειες XPath-injection που βασίζονται στο DOM συμβαίνουν όταν ένα σενάριο ενσωματώνει δεδομένα που ελέγχονται από τον επιτιθέμενο σε ένα ερώτημα XPath.
Sinks:
From: https://portswigger.net/web-security/dom-based/client-side-json-injection
Οι ευπάθειες JSON-injection που βασίζονται στο DOM συμβαίνουν όταν ένα σενάριο ενσωματώνει δεδομένα που ελέγχονται από τον επιτιθέμενο σε μια συμβολοσειρά που αναλύεται ως δομή δεδομένων JSON και στη συνέχεια επεξεργάζεται από την εφαρμογή.
Sinks:
From: https://portswigger.net/web-security/dom-based/web-message-manipulation
Ευπάθειες web-message προκύπτουν όταν ένα σενάριο στέλνει δεδομένα ελεγχόμενα από τον επιτιθέμενο ως web message σε άλλο έγγραφο μέσα στον περιηγητή. Ένα παράδειγμα ευάλωτης web-message manipulation μπορεί να βρεθεί στην Ακαδημία Ασφαλείας Ιστού του PortSwigger.
Sinks:
Η μέθοδος postMessage()
για την αποστολή web messages μπορεί να οδηγήσει σε ευπάθειες αν ο ακροατής γεγονότων για την παραλαβή μηνυμάτων χειρίζεται τα εισερχόμενα δεδομένα με μη ασφαλή τρόπο.
From: https://portswigger.net/web-security/dom-based/dom-data-manipulation
Ευπάθειες DOM-data manipulation προκύπτουν όταν ένα σενάριο γράφει δεδομένα ελεγχόμενα από τον επιτιθέμενο σε ένα πεδίο μέσα στο DOM που χρησιμοποιείται μέσα στην ορατή διεπαφή χρήστη ή τη λογική πλευρά του πελάτη. Αυτή η ευπάθεια μπορεί να εκμεταλλευτεί από έναν επιτιθέμενο για να κατασκευάσει μια διεύθυνση URL που, αν επισκεφθεί από άλλο χρήστη, μπορεί να αλλάξει την εμφάνιση ή τη συμπεριφορά της διεπαφής χρήστη πλευράς του πελάτη.
Sinks:
From: https://portswigger.net/web-security/dom-based/denial-of-service
Ευπάθειες άρνησης υπηρεσίας βάσει DOM συμβαίνουν όταν ένα σενάριο περνά δεδομένα που ελέγχονται από τον επιτιθέμενο με μη ασφαλή τρόπο σε μια προβληματική πλατφόρμα API. Αυτό περιλαμβάνει APIs που, όταν καλούνται, μπορούν να οδηγήσουν τον υπολογιστή του χρήστη να καταναλώνει υπερβολικές ποσότητες CPU ή χώρου δίσκου. Τέτοιες ευπάθειες μπορεί να έχουν σημαντικές παρενέργειες, όπως η περιορισμένη λειτουργικότητα της ιστοσελίδας από τον περιηγητή, απορρίπτοντας τις προσπάθειες αποθήκευσης δεδομένων στο localStorage
ή τερματίζοντας απασχολημένα σενάρια.
Sinks:
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)