Daha önce iki tür XSS istismarından bahsetmiştik : yansıtılan ve saklanan.Hepsinin ortak özelliği, tehlikeli kodun, eklendikten sonra sunucunun yanıtından sonra çalıştırılmasıdır, bu da hatanın sunucu tarafında olduğu anlamına gelir.sunucu.sunucu. Bu özelliğe aykırı başka bir XSS istismarı türü daha vardır; kötü amaçlı kod, DOM Tabanlı XSS olarak bilinen veya tip 0 XSS olarak da bilinen, sunucudan geçmeden istemci tarafında anında yürütülür.
Öncelikle DOM'un ne olduğunu bilmemiz gerekiyor.
Belge Nesne Modeli'nin kısaltması olan DOM, HTML ve XML gibi yapılandırılmış belgelerdeki verileri almak ve değiştirmek için önerilen standart bir W3C biçimidir (http://www.w3.org/DOM/). Bu model, belgeleri hiyerarşik bir ağaç yapısı olarak temsil eder. HTML ve XML'deki tüm öğeler bir düğüm olarak kabul edilir.
DOM Tabanlı XSS, belgenin DOM yapısını, özellikle de HTML'yi değiştirmeye dayanan bir XSS kullanma tekniğidir.
Aşağıdaki spesifik bir örneğe bakalım:
Bir web sitesinde kayıt sayfasına giden aşağıdaki URL bulunur:
example.com/register.php?message=Please fill in the form
Eriştiğimizde çok normal bir Form görüyoruz:

Formdaki bildirim içeriğine aktarılan mesaj parametresini kolaylıkla anlayabilirsiniz, bu bildirimin kaynak koduna yakından bakabilirsiniz:
![Web9: XSS'den yararlanma türleri - Bölüm 3: Dom Tabanlı XSS Web9: XSS'den yararlanma türleri - Bölüm 3: Dom Tabanlı XSS]()
JavaScript segmenti, mesaj parametresinden değerin alınmasından ve yazdırılmasından sorumludur. Bu gevşek giriş kontrolünden, kullanıcıları tehlikeli URL'lere erişmeleri için kandırmak tamamen mümkündür.
Döküm yerine:
message=Please fill in the form
sonra iletin:
message=GenderMaleFemale
function show(){alert();}
Daha sonra kayıt formu şöyle görünecektir:
![Web9: XSS'den yararlanma türleri - Bölüm 3: Dom Tabanlı XSS Web9: XSS'den yararlanma türleri - Bölüm 3: Dom Tabanlı XSS]()
Kullanıcılar bunun gibi "normal" bir formdan şüphelenmeyecek ve cinsiyet seçerken Komut Dosyası yürütülecektir:
![Web9: XSS'den yararlanma türleri - Bölüm 3: Dom Tabanlı XSS Web9: XSS'den yararlanma türleri - Bölüm 3: Dom Tabanlı XSS]()
message parametresinde iletilen değeri biraz daha açıklayacağım:
GenderMaleFemale
function show(){alert();}
Ana amacı, select etiketinde her onchage olayı olduğunda show() işlevini yürütmektir. Buradaki show() işlevi, betiğin yürütüldüğünü göstermek için basitçe açılır. Ancak gerçekte, bilgisayar korsanları, kullanıcı çerezi değerini önceden belirlenmiş bir sunucuya ileten bir komut dosyasını yürütmek için bu show() işlevini sıklıkla kullanırlar.Okuyucular, bilgisayar korsanlarının bu isteği nasıl oluşturduğunu anlatan Reflected XSS makalesini inceleyebilirler.
Bu örnek bize iki önemli sonuç veriyor. İlk olarak kötü amaçlı kod, seçim etiketindeki değere tıklandıktan hemen sonra çalıştırıldı; bu, sunucunun yanıtını incelemeden doğrudan istemci tarafında çalıştırıldığı anlamına geliyor. İkincisi, aktarılan komut dosyasıyla HTML yapısı değiştirildi. Ayrıca gerçek istismar senaryosunu da görebiliyoruz; konu kullanıcıları kötü amaçlı kodla gömülü bir URL'ye erişmeleri için kandırmak söz konusu olduğunda DOM Tabanlı, Depolanan XSS'den ziyade Yansıtılan'a daha çok benziyor.
Aşağıdaki şekilde DOM Tabanlı XSS saldırı tekniğinin uygulanmasındaki her adım açıklanmaktadır:
![Web9: XSS'den yararlanma türleri - Bölüm 3: Dom Tabanlı XSS Web9: XSS'den yararlanma türleri - Bölüm 3: Dom Tabanlı XSS]()
Aşağıda WhiteHat.vn forumunun bir üyesinin DOM Tabanlı XSS aracılığıyla istismar gerçekleştirdiğini gösteren bir video bulunmaktadır:
İyi şanlar!