DOM XSS
Last updated
Last updated
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
DOM açıkları, saldırgan kontrolündeki kaynaklardan (örneğin location.search
, document.referrer
veya document.cookie
) verilerin güvensiz bir şekilde sinklere aktarılması durumunda ortaya çıkar. Sinkler, kötü niyetli veriler verildiğinde zararlı içeriği çalıştırabilen veya render edebilen fonksiyonlar veya nesnelerdir (örneğin, eval()
, document.body.innerHTML
).
Kaynaklar, saldırganlar tarafından manipüle edilebilen URL'ler, çerezler ve web mesajları gibi girdilerdir.
Sinkler, kötü niyetli verilerin olumsuz etkilere yol açabileceği potansiyel olarak tehlikeli uç noktalarıdır, örneğin script çalıştırma.
Verilerin bir kaynaktan bir sinke uygun bir doğrulama veya sanitasyon olmadan akması durumunda risk ortaya çıkar ve bu, XSS gibi saldırılara olanak tanır.
Kaynaklar ve sinkler hakkında daha güncel bir listeyi https://github.com/wisec/domxsswiki/wiki bulabilirsiniz.
Yaygın kaynaklar:
Ortak Sıvılar:
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()
**[**`Hizmet Reddi`**](dom-xss.md#denial-of-service)**
someDOMElement.evaluate()
document.title
requestFileSystem()
document.implementation.createHTMLDocument()
document.cookie
executeSql()
postMessage()
``
``
innerHTML
sıvısı, modern tarayıcılarda script
öğelerini kabul etmez ve svg onload
olayları tetiklenmez. Bu, img
veya iframe
gibi alternatif öğeler kullanmanız gerektiği anlamına gelir.
Bu tür bir XSS muhtemelen bulunması en zor olanıdır, çünkü JS kodunun içine bakmanız, kontrol ettiğiniz herhangi bir nesneyi kullanıp kullanmadığını görmeniz ve bu durumda, keyfi JS çalıştırmak için herhangi bir şekilde kötüye kullanma olup olmadığını kontrol etmeniz gerekir.
Potansiyel bir sıvıya ulaşan her veriyi kontrol etmek için tarayıcı uzantısı: https://github.com/kevin-mizu/domloggerpp
Kaynak: https://portswigger.net/web-security/dom-based/open-redirection
DOM'daki açık yönlendirme güvenlik açıkları, bir saldırganın kontrol edebileceği verilerin bir sıvıya yazıldığı durumlarda meydana gelir; bu sıvı, alanlar arasında gezinmeyi başlatma yeteneğine sahiptir.
Yönlendirmenin gerçekleştiği URL'nin başlangıcını kontrol ediyorsanız, javascript:alert(1)
gibi keyfi kod çalıştırmanın mümkün olduğunu anlamak önemlidir.
Sıvılar:
From: https://portswigger.net/web-security/dom-based/cookie-manipulation
DOM tabanlı cookie-manipülasyon zafiyetleri, bir script'in bir saldırgan tarafından kontrol edilebilen verileri bir cookie'nin değerine dahil etmesi durumunda ortaya çıkar. Bu zafiyet, cookie sitenin içinde kullanıldığında web sayfasının beklenmedik bir şekilde davranmasına yol açabilir. Ayrıca, cookie kullanıcı oturumlarını takip etmekte kullanılıyorsa, oturum sabitleme saldırısı gerçekleştirmek için de istismar edilebilir. Bu zafiyetle ilişkili ana sink şudur:
Sinks:
From: https://portswigger.net/web-security/dom-based/javascript-injection
DOM tabanlı JavaScript enjeksiyonu zafiyetleri, bir saldırgan tarafından kontrol edilebilen verilerin JavaScript kodu olarak çalıştırıldığı durumlarda oluşur.
Sinks:
From: https://portswigger.net/web-security/dom-based/document-domain-manipulation
Document-domain manipulation zafiyetleri, bir script'in document.domain
özelliğini bir saldırganın kontrol edebileceği verilerle ayarlaması durumunda ortaya çıkar.
document.domain
özelliği, tarayıcılar tarafından aynı köken politikasının uygulanmasında anahtar bir rol oynar. Farklı kökenlerden gelen iki sayfa document.domain
'larını aynı değere ayarladıklarında, kısıtlama olmaksızın etkileşimde bulunabilirler. Tarayıcılar, document.domain
'a atanabilir değerlere belirli sınırlamalar getirse de, tamamen alakasız değerlerin gerçek sayfa kökenine atanmasını engelleyen istisnalar vardır. Genellikle, tarayıcılar çocuk veya ebeveyn alan adlarının kullanımına izin verir.
Sinks:
From: https://portswigger.net/web-security/dom-based/websocket-url-poisoning
WebSocket-URL zehirlenmesi, bir script'in kontrol edilebilir verileri WebSocket bağlantısı için hedef URL olarak kullanması durumunda meydana gelir.
Sinks:
WebSocket
yapıcıları, WebSocket-URL zehirlenmesi zafiyetlerine yol açabilir.
From: https://portswigger.net/web-security/dom-based/link-manipulation
DOM tabanlı bağlantı manipülasyonu zafiyetleri, bir script'in saldırgan tarafından kontrol edilebilir verileri mevcut sayfadaki bir navigasyon hedefine yazması durumunda ortaya çıkar; bu, tıklanabilir bir bağlantı veya bir formun gönderim URL'si gibi olabilir.
Sinks:
From: https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation
Ajax isteği manipülasyonu zafiyetleri, bir scriptin saldırgan tarafından kontrol edilebilen verileri bir Ajax isteğine yazdığı durumlarda ortaya çıkar ve bu istek bir XmlHttpRequest
nesnesi kullanılarak yapılır.
Sinks:
From: https://portswigger.net/web-security/dom-based/local-file-path-manipulation
Yerel dosya yolu manipülasyonu zafiyetleri, bir scriptin saldırgan tarafından kontrol edilebilen verileri bir dosya işleme API'sine filename
parametresi olarak geçirdiğinde ortaya çıkar. Bu zafiyet, bir saldırgan tarafından, başka bir kullanıcı tarafından ziyaret edilirse kullanıcının tarayıcısının rastgele bir yerel dosyayı açmasına veya yazmasına neden olabilecek bir URL oluşturmak için kullanılabilir.
Sinks:
From: https://portswigger.net/web-security/dom-based/client-side-sql-injection
İstemci tarafı SQL enjeksiyonu zafiyetleri, bir script'in saldırgan tarafından kontrol edilebilen verileri güvensiz bir şekilde istemci tarafı SQL sorgusuna dahil etmesi durumunda meydana gelir.
Sinks:
From: https://portswigger.net/web-security/dom-based/html5-storage-manipulation
HTML5-storage manipulation zafiyetleri, bir script'in saldırgan tarafından kontrol edilebilen verileri web tarayıcısının HTML5 depolamasında (localStorage
veya sessionStorage
) sakladığında ortaya çıkar. Bu eylem doğası gereği bir güvenlik zafiyeti olmasa da, uygulama daha sonra saklanan verileri okuyup güvensiz bir şekilde işlediğinde sorun haline gelir. Bu, bir saldırganın depolama mekanizmasını kullanarak diğer DOM tabanlı saldırıları gerçekleştirmesine olanak tanıyabilir, örneğin cross-site scripting ve JavaScript injection.
Sinks:
From: https://portswigger.net/web-security/dom-based/client-side-xpath-injection
DOM tabanlı XPath enjeksiyonu zafiyetleri, bir scriptin saldırgan tarafından kontrol edilebilen verileri bir XPath sorgusuna dahil etmesi durumunda meydana gelir.
Sinks:
From: https://portswigger.net/web-security/dom-based/client-side-json-injection
DOM tabanlı JSON enjeksiyon zafiyetleri, bir scriptin saldırgan tarafından kontrol edilebilen verileri, bir JSON veri yapısı olarak ayrıştırılan bir dizeye dahil etmesi ve ardından uygulama tarafından işlenmesi durumunda meydana gelir.
Sinks:
From: https://portswigger.net/web-security/dom-based/web-message-manipulation
Web-message güvenlik açıkları, bir script'in saldırgan kontrolündeki verileri bir web mesajı olarak başka bir belgeye göndermesi durumunda ortaya çıkar. Kırılgan Web-message manipülasyonu örneği PortSwigger'in Web Güvenliği Akademisi adresinde bulunabilir.
Sinks:
postMessage()
metodu ile web mesajları göndermek, mesajları almak için kullanılan olay dinleyicisi gelen verileri güvensiz bir şekilde işliyorsa güvenlik açıklarına yol açabilir.
From: https://portswigger.net/web-security/dom-based/dom-data-manipulation
DOM-veri manipülasyonu güvenlik açıkları, bir script'in saldırgan kontrolündeki verileri DOM içindeki bir alana yazması durumunda ortaya çıkar; bu alan görünür UI veya istemci tarafı mantığında kullanılır. Bu güvenlik açığı, bir saldırgan tarafından başka bir kullanıcı tarafından ziyaret edilirse istemci tarafı UI'sının görünümünü veya davranışını değiştirebilecek bir URL oluşturmak için kullanılabilir.
Sinks:
From: https://portswigger.net/web-security/dom-based/denial-of-service
DOM tabanlı hizmetin reddi zafiyetleri, bir scriptin saldırgan kontrolündeki verileri tehlikeli bir şekilde sorunlu bir platform API'sine geçirmesi durumunda meydana gelir. Bu, çağrıldığında kullanıcının bilgisayarının aşırı miktarda CPU veya disk alanı tüketmesine neden olabilecek API'leri içerir. Bu tür zafiyetler, tarayıcının verileri localStorage
'da depolama girişimlerini reddederek web sitesinin işlevselliğini kısıtlaması veya meşgul scriptleri sonlandırması gibi önemli yan etkilere sahip olabilir.
Sinks:
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)