Xss Zaafiyeti: Sömürme Ve Korunma

Bugünkü yazımızda, web güvenlik zaafiyetlerinden birisi olan “XSS” zaafiyetinin neden kaynaklandığını, nasıl sömürüldüğünü ve bu zaafiyetten korunmak için ne gibi önlemler almamız gerektiğine değineceğiz.

XSS(Cross Site Scripting) Zaafiyeti genel olarak bir web sayfası üzerindeki input kısımlarından faydalanarak tarayıcı üzerinde javascript kodları çalıştırmamıza yarayan bir güvenlik zaafiyetidir. Zaafiyetin ortaya çıkma sebebi web uygulamasının girilen input değerini filtrelemeden kullanıcıya sunmasıdır. OWASP Listesinde uzun yıllardır Top 10’da bulunmaktadır.

XSS zaafiyetini kullanarak yapılabilecekler:
—> Cookie bilgileri çalınabilir.
—> Web sayfası başka bir sayfaya yönlendirilebilir.
—> Farklı bir sunucudan zararlı kodlar çalıştırılabilir.
—> Keylogger olarak kullanılabilir.

XSS zaafiyeti kendi içinde üç kısıma ayrılır:
1-) Reflected XSS: Kullanıcıdan input olarak alınan girdiler(zararlı kodlar) veritabanına kaydedilmediği için reflected yani kalıcı olmayan türüdür.
2-) Stored XSS: Kullanıcıdan input olarak alınan girdiler(zararlı kodlar) veritabanına kaydedildiği için girdinin bulunduğu sayfaya her girdiğiniz de zararlı kod çalıştırılır. Mesela üye olunan bir yerde profil ismini zararlı kod yaparsanız, profilinize giren her kişi xss zaafiyetinden etkilenebilir.
3-) Dom(Document Object Model) XSS: Bu türde bütün işlem istemci tarafında gerçekleşir. Bunun diğer türlerden en büyük farkı, Dom XSS istemci tarafında gerçekleştiği için ana sunucu bunun farkında olmayacaktır.

XSS Zaafiyeti Sömürme Yöntemleri:

Xss zaafiyetini sömürmek için payload dediğimiz zararlı kodları kullanmaktayız. Şimdi beraber örnekleri incelemeye başlayalım.

1-) Reflected XSS:


—> Ekran görüntüsünde gördüğünüz gibi site üstünde bir input alanı var. Şimdi input kısmına bir değer verelim ve ne oluyor öncelikle ona bakalım. Ben örnek teşkil etmesi açısından “kernelblog” yazıyorum.

—> Gördüğünüz gibi bizim girdiğimiz girdi ekrana basıldı. Ve kernelblog adında bir sonuç bulunamadığını söyledi. Şimdi ise kernelblog yerine zararlı kod(payload) yazalım.

—> Zararlı kodumuzu(payload) yazdıktan sonra search butonuna tıklıyoruz ve bize bir uyarı ekranı dönüyor. Yani burada xss zaafiyeti var demek oluyor.

2-) Stored XSS:


—> Şimdi ise bir forum sayfası bizi karşıladı. Burada da input alanı olarak bize sunulan yer yorum alanı. İlk olarak buraya bir yorum yaparak işe başlayalım.

—> Ardından gönderdiğimiz yorumu seçip incele diyelim.

—> Gördüğünüz gibi bizim girmiş olduğumuz yorum sayfanın kaynak kodlarına işledi ve sayfaya giren herkes tarafından görüntülenebilir. Bu yüzden eğer burada zararlı kod çalıştırabilirsek bu stored xss zaafiyeti olmuş oluyor. Çünkü bizim verdiğimiz değer kaynak kodlarına işlenmiş oluyor. Şimdi zararlı kodumuzu(payload) burada yorum olarak gönderelim.

—> Fakat bunu yaptığımızda sadece boş bir yorum satırıyla karşılaştık ve herhangi bir hata mesajı da almadık.
Buradan şunu çıkarıyoruz. Demek ki bizim bu kullandığımız zararlı kod(payload) bu yorum alanında engellenmiş. O zaman biz de farklı bir zararlı kod deneyelim.

—> Yukarıdaki görselde bulunan payload aslında yarım bırakılmıştır. Biz şuan bu kısmını göndererek aslında sorasında kullanacağımız kısım çalışacak mı onu anlamak istiyoruz. Yorum olarak gönderelim.

—> Yukarıdaki görselde de gördüğünüz gibi gönderdiğimiz payload sayesinde forum sayfasında biçimsiz bir görsel meydana geldi. Görselin böyle gözükme sebebi ise bizim kullandığımız zararlı koddan kaynaklı. Şimdi ise zararlı kodumuzu tamamlayalım.

—> Zararlı kodumuzu yazıp gönder diyoruz.

—> Ve gördüğünüz gibi hata mesajını aldık.

3-) Dom XSS:


—> Şimdi ise bizi içinde görseller olan bir sayfa karşıladı bizi. Fakat diğer görsellere gittiğimizde de herhangi bir input alanı göremiyoruz. Fakat burada dikkatimizi çeken başka bir şey var “URL”. Url de “#” işaretini gördük ve burada dom based xss olabilir mi diye düşünüyoruz. İlk olarak url’nin sonuna bir zararlı kod eklemeyi deneyelim ve ne olacak görelim.

—> Enter’a basıyoruz ve işlemimizi gerçekleştiriyoruz.

—> Fakat gördüğümüz kadarıyla herhangi bir hata mesajı almadık. Diğer zararlı kodumuzu deneyelim.

—> Fakat yine herhangi bir hata mesajıyla karşılaşmadık. Şimdi vereceğim bilgi aslında biraz detaya giriyor. Bunu ilerleyen günlerde XSS zaafiyetinde payload oluşturma ve waf bypass’ları makalesinde yazacağım. Fakat şimdi yeri geldiği için sadece burada bahsediyorum.
—> İki farklı payload denedik ve maaselef herhangi bir hata mesajı alamadık. Şimdi ise ikinci denediğimiz payloadın başına bir adet tırnak(‘) işareti koyup deneyelim.

—> Gördüğünüz gibi hata mesajını aldık.

XSS Zaafiyetinden Korunma Yolları:

—> Blacklist methodu kullanılabilir. Mesela < , > , / , = gibi xss zaafiyetinde kullanılan karakterler engellenebilir.
—> Whitelist methodu kullanılabilir. Sadece gereken bilginin alınması sağlanılır.
—> Waf Kullanılmalıdır.

Bir cevap yazın

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