Stored XSS Zafiyeti, Önlemler, Bypass ve Saldırı İzleri

Amaç

DVWA Lab. ortamında Stored XSS zafiyetinin bir saldırgan tarafından nasıl istismar edileceği ve saldırı neticesinde erişim log kayıtlarında nasıl izler oluşacağını öğrenmek.

Stored XSS Nedir?

Daha önceki yazılarımızda Reflected XSS Zafiyetinden bahsetmiştik. Stored XSS ise adından anlaşılacağı üzere ziyaret edilen web uygulamasındaki parametre değerine, kullanıcının javascript kodu girerek veritabanına girilen değerin kayıt olmasıdır.

DVWA Stored XSS – {Low Level}

Karşımızda aşağıda görüldüğü üzere bir ziyaretçi defteri mevcut. Bu ziyaretçi defterinde kullanıcının giriş yapabileceği iki tane alan bulunmaktadır. Buraya verileri yazdıktan sonra Sign Guestbook butonuna bastığı zaman yazmış olduğu veriler veritabanına kayıt edilecek ve sonrasında formun altında gönderilen mesajlar listelenecektir.

Bu sayfada zafiyetin olup olmadığını tespit etmek için metin kutularına sırasıyla aşağıdakileri yazalım.

Verileri gönderdikten sonra herhangi bir denetleme mekanizması olmadığı için gönderilen javascript kodu çalışacaktır.

Gönderilen veri POST metodu ile gönderildiği için Reflected XSS zafiyetindeki gibi detaylar accesslog kayıtlarına düşmeyecektir. Zaten nasıl yansıdığını yazımızın sonunda göreceğiz. Artık bu ziyaretçi sayfasını ziyaret eden kullanıcıların karşısına otomatik olarak “Hacked” şeklinde popup açıklacaktır.

Görüldüğü üzere girilen veri herhangi bir filtrelemeden geçmeden olduğu gibi veritabanına kayıt edilmiştir.

Medium seviyesine geçmeden önce kaynak kodlara da göz atacak olursak;

Kullanıcı tarafından veri girişi yapılan alanlarda trim fonksiyonu kullanılarak girilen değerin başındaki ve sonundaki boşlukların silinmesi ,stripslashes() fonksiyonu ile de ters bölü (\) işaretinin silinmesi amaçlanmış.

DVWA Stored XSS – {Medium Level}

Bu zafiyetin orta seviyesinde önce kaynak kodları inceleyerek ne tarz önlemler aldıklarını inceleyelim.

Burada ilk göze çarpan yine reflected xss zafiyetinde olduğu gibi tagı engellenmiş. Yine trim fonksiyonu kullanılmış ve addslashes() fonksiyonu ile de verideki tırnak işaretlerinin önüne / ”backslash” eklenerek etkisiz hale getirilmiş.Ama sadece mesaj içeriği kısmında yapılmış, isim kısmında slash engellenmemiş. Bu nedenle aşadağıdaki javascript kodumuzu isim kısmına yazarak gönderebilirsek sorunu çözebiliriz.

Kaynak kodu görüntülediğimiz de metin kutularında istemci taraflı karakter limiti konulduğunu farkediyoruz. Yani php olarak bir sınırlama (sunucu tarafında) yapılmamış da html ile karakter limiti konulmuş.Bizde burada ismin istendiği veri kutusuna incele diyerek karakter limitini arttırıyoruz. Arttırma işlemini yaptıktan sonra yukarıdaki kodu isim kısmına yazarak başarılı bir şekilde gönderiyoruz.

DVWA Stored XSS – {High Level}

Bu zafiyetin yüksek seviyesinde önce kaynak kodları inceleyerek ne tarz önlemler aldıklarını inceleyelim. Daha önce değindiğimiz önlemlerin dışında, yazısının başında, ortasında, sonunda, herhangi bir yerinde başka karakter bulunursa silme işlemi gerçekleştirilmiştir.

Burada da isim istenen alandaki karakter uzunluğunu html kodları ile düzelterek aşağıdaki kodu yazdığımızda başarılı bir şekilde atlatabiliriz.

DVWA Stored XSS – {impossible Level}

Bu zafiyetin imkansız seviyesinde önce kaynak kodları inceleyerek ne tarz önlemler aldıklarını inceleyelim.

Burada yukarıda bahsedilen güvenlik önlemlerine ek olarak htmlspecialchars ile isim alanında da özel karakterler html için normal karakterlere dönüştürülerek önlem alınmıştır.

Stored XSS Saldırı Sonrasında Oluşan Erişim Log Kayıtları

Erişim log kayıtlarında POST isteklerinden gelen veri (payload) kısmı tutulmamaktadır. Bu yüzden web sunucu log dosyalarında POST isteklerine bakarak saldırı tespit etmeniz mümkün değildir. POST ile gönderilen veriler üzerinde herhangi bir saldırı tespiti yapabilmek için WAF, Load Balancer ve IPS/IDS sistemleri tarafından tutulan log kayıtlarının incelenmesi gerekmektedir. Network üzerinden POST isteğinin detayları incelenerek saldırı izleri tespit edilebilir.

Yukarıda gerçekleştirdiğimiz işlemler neticesinde accesslog’dan örnek bir satır gösterilmiştir.

Faydalı ve Faydalanılan Kaynaklar

  • http://www.includekarabuk.com/dvwatutorial.php
  • https://yazilimportal.com/phpde-g%C3%BCvenlik-%C3%B6nlemleri-1-bd640ca81bd2

Site Footer