XSS-DOM

XSS (Cross Site Scripting) Nedir?

OWASP Top 10 listesinde eskilerden beri bulunan, bir diğer adı ile Çapraz Site Betik Saldırısı;  Asp, PHP, ASP.NET gibi bir çok web programlama dilinde meydana gelen bir betik kod (HTML, JavaScript v.s) saldırısıdır. Yazılımcıların kullanıcıdan aldığı veriyi filtrelememesinden kaynaklanan zafiyettir. HTML kodlarının arasına istemci tabanlı kod gömülmesi yoluyla kullanıcının tarayıcısında istenen istemci tabanlı kodun çalıştırılabilmesi olarak tanımlanır.

XSS’in açılımı; Cross Site Scripting. Ama neden kısaltılmışı CSS değil diye düşünecek olursak CSS (Casdanding Style Sheets) web siteleri için şablon hazırlamaya yarayan bir dildir. Karışıklık olmaması için Cross Site Scripting kısaltılmışı olarak XSS kullanılıyor.

XSS ile Neler Yapılabilir?

XSS ile Javascript kodları çalıştırabilir. Cookie çalma, sayfanın içinde başka sayfaya yönlendirme gibi saldırılar yapılabilir. Siteye zararlı kodlar gömerek istedikleri başka saldırılar gerçekleştirebilirler. Saldırı türü tamamen saldırganın zevkine kalmıştır.  XSS Web dünyasında önemli ve kritik açıklıklar arasında üst sıralarda yer almaktadır.

XSS saldırı türleri 3’e ayrılıyor.

1) XSS Reflected

2) XSS Stored

3) DOM Based XSS: Document Object Model (Belge Nesnesi Modeli) internet tarayıcıları girmiş olduğumuz her web sayfasını bir belge olarak kabul eder. Web sayfasında bulunan tüm materyaller (resim, bir buton v.s. ) bir nesne olarak kabul edilir. DOM sayfada bulunan nesnelere müdahale etmemizi sağlar. Bunun için JavaScript gibi bazı script dillerinin kullanılması gerekir. Genelde “#” işaretinden sonra “payload” denenmesi ve sayfa yenilendiğinde “alert” alındığında DOM XSS var denilen XSS açıklığıdır.

Web sitelerinin çoğunda dom tabanlı XSS zafiyeti mevcuttur. Bir çok büyük şirketin (Google, yahoo gibi) web sitelerinde dahi bu zafiyet mevcuttur.

Zararlı olarak kullanılabilecek DOM betikleri:

  • HTML Yazma, örnek:
    • document.write(…)
    • document.writeln(…)
    • document.body.innerHtml=…
  • Doğrudan DOM Değiştirme (Dahili DHTML olayları), örnek:
    • document.forms[0].action=… (ve çeşitli koleksiyonları)
    • document.attachEvent(…)
    • document.create…(…)
    • document.execCommand(…)
    • document.body. … (DOM ana nesnesi üzerinden erişen)
    • window.attachEvent(…)
  • Belge URL Değişimi, örnek:
    • document.location=… (yer, alan ve host atama)
    • document.location.hostname=…
    • document.location.replace(…)
    • document.location.assign(…)
    • document.URL=…
    • window.navigate(…)
  • Pencere Açma Değiştirme, örnek:
    • document.open(…)
    • window.open(…)
    • window.location.href=… (yer, alan ve host atama)
  • Doğrudan Script Çalıştırma, örnek:
    • eval(…)
    • window.execScript(…)
    • window.setInterval(…)
    • window.setTimeout(…)

Kısaca XSS ve saldırı türlerini anlattığıma göre düşük seviyeden başlayarak örneklerimizi yapma zamanı geldi.

1. Low seviye örneğimiz;

DVWA uygulamamız üzerinden XSS DOM zafiyetimizin güvenlik seviyesini “impossible” ayarını “low” seviyesine ayarlamalıyız.


Burada herhangi bir girdi yapabileceğimiz bir kısım bulunmamakta. Bu yüzden yukarıdaki arama çubuğundan girdilerimizi yollayacağız.

Arama çubuğunda yazılı olan ‘English’ kısmını silip “alert” (“yazmak istediğiniz mesaj”); yazıp enter tuşuna basıyoruz.

Pencere açıldı ve hatayı verdi. Burada XSS zafiyetinin varlığını gösterdik.

Medium seviye örneğimiz;

Güvenlik seviyesini medium olarak ayarlıyoruz.

XSS DOM kısmına giriyoruz. Önceki seviyede olduğu gibi dil seçim ekranı geldi.

Bu sefer farklı bir metot deneyeceğiz. Açık bırakılan “options” seçeneğine yenisini ekleyeceğiz. Ardından “select” butonunu kulanım dışı bırakıp doğrudan seçilmiş bir şekilde kapatılmasını sağlayacağız.

Bir önceki seviyede yaptığımız gibi arama çubuğunda ‘English’ yazısını silip onun yerine ‘eklemek istediğiniz yazı’ yazıp enter tuşuna basıyoruz.

Sunucudan bir resim dosyasını çağıralım. Sunucuda böyle bir resim dosyası bulamayınca sayfada XSS zafiyeti olduğunu belirten bir hata verdirelim. Bunun için yazmamız gereken kod parçası;
‘eklemek istediğiniz yazı’ </options></select><img src=x onerror=”alert (‘eklemek istediğiniz mesaj’)”;>

3. High seviye örneğimiz;

Güvenlik seviyemizi high olarak değiştiriyoruz.

English#<script>alert(“eklemek istediğiniz mesaj”)</script> yazıp enter tuşuna basın. Linke tıklandığında sunucu tarafına sadece “#” karakterinden önceki kısım gönderilir. “#” karakterinden sonraki kısım kesinlikle gönderilmez. Burada herhangi bir filtre varsa filtreler bunu göremez.

Herhangi bir değişiklik olmadığını göreceksiniz. Dili değiştirip “select” ettikten sonra uyarıyı görüntüleyebiliriz.

Öneri ve eleştirilerinizi yorum olarak belirtebilirsiniz. Teşekkürler.

İçerik Sahibi: Nurcan Duman

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir