Nedir Bu XSS ?-
-
Siteler Arası Betik Çalıştırma(Cross-Site Scripting - XSS) saldıları, kötü niyetli kullanıcıların web sitelerinin çeşitli input(veri giriş) yerlerinden site içerisine enjekte edilen betik dili kodlarının sisteme verdiği açıktır.
XSS Saldırılarının Türleri Nelerdir?
1 - Reflected XSS:
Reflected XSS, XSS türlerinin en basitidir. Veri giriş ya da URL alanlarına Javascript kodlarını girerek yanıtları ekrana yansıtarak verdirilir.
Bir Reflected XSS senaryosu:
-
http://forum-golge.net/chat?message=Merhaba+Gencler-
<p> Siz: Merhaba Gençler </p>
Web uygulaması, veriler üzerinde herhangi bir filtreleme vb. işlem yapmaz,bu sebeple bir saldırgan çok kolay bir şekilde aşağıdaki gibi bir saldırı oluşturabilir:
http://forum-golge.net/chat?message=<script>/*Zararlı+Kod*/</script>
<p> Siz: <script>/*Zararlı Kod*/</script> </p>
Web uygulamasını kullanan herhangi bir kullanıcıya atılacak olan bu URL saldırganın yazdığı zararlı kod parçacığını aktifleştirecektir.Bu noktada saldırgan tarafından yazılan zararlı kod saldırganın belirlediği kodlar çerçevesinde eylem gösterebilir.
Bunlar:
Kullanıcı oturum bilgilerini çalma, Bilgisayarınız da çeşitli eylemler gerçekleştirme, Kullanıcının kamerasını açma, Kullanıcın erişimi olan herhangi bir veriyi alma gibi
2 - Stored XSS:
Stored XSS, İnput(veri giriş) yerlerinden alınan verilerin hiç bir filtreleme gibi işlemlerin yapılmadan database(veritabanı) kaydedilmesiyle oluşur ve Reflected XSS'e göre çok daha tehlikelidir.Çünkü, Reflected XSS sadece URL bağlantısını attığınız kişiye yansıyarak sadece onu etkilemekte ama Stored XSS database(veritabanı) kaydedildiği için database(veritabanı) kullanan tüm web uygulama ve kullanıcılara zarar vermekte.
Stored XSS için bir senaryo görelim:
<p> Merhaba arkadaşlar,nasılsınız </p>
Uygulama dijital bir platform ve bu platform da bir adet gönderi yayınlanıyor.Veriyi hiç bir filtreleme yapmadan database(veritabanı) kaydediliyor ve bunu diğer kullanıcılar normal olarak görüyor.
<p><script>/*Zararlı Bir Kod*/</script></p>
Şimdi ise veritabanına filtrelemeden geçmemiş bir zararlı kod kaydediliyor.Bu koda denk gelen kullanıcılar kodun işlemine maruz kalıyor.
3 - DOM Based XSS:
DOM(Document Object Model)’da meydana gelen saldırıdır. Reflected ve Stored XSS saldılarında saldırıyı görmek mümkünken aynı şey DOM Based XSS saldırısında mümkün değildir.Reflected ve Stored XSS saldılarına nazaran DOM Based saldırılarda # karakterini en başa kullanarak zararlı koda başlıyoruz. Çünkü # karakterinden sonra yazılan hiçbir şey HTTP trafiğinde gözükmemekte dolayısıyla server’a gönderilmemektedir. Bu durumda özellikle Stored’a nazaran işlevsel açıdan daha tehlikeli bir saldırı yapmakta.
Aşağıdaki kodları içeren şu sayfayı düşünelim
-
http://www.ornekgolge.net/deneme.html-
<script>
document.write("<b>Geçerli URL</b> : " +
document.baseURI);
</script>
http://www.ornekgolge.net/deneme.html#<script>alert("Merhaba Gölge");</script>
şeklin de HTTP isteği yolladığımızda Javascript kodumuzun çalışması için yeterli olur.Çünkü document.write fonksiyonuyla URL'ye ne yazarsanız sayfa da onu ekrana yazar. Sayfanın kaynağını incelediğimiz de
<script>alert("Merhaba Gölge");</script>
kodunu göremeyiz.Sebebi olan olayın DOM tarafında gerçekleşmesi.-
Neden XSS Saldırıları Yapılmakta ?-
XSS güvenlik açığını farkedip sömürmek isteyen saldırgalar genelde şunları yapabilir:
1. Kullanıcının gerçekleştirebileceği herhangi bir eylemi gerçekleştirmek.
2. Kullanıcının erişebildiği tüm verileri okumak.
3. Kullanıcının oturum açma bilgilerini ele geçirmek.
4. Web sitesin de kalıcı zarar vermek
5. Virüsleri web sitesine enjekte etmek
XSS Saldırıları Nasıl Engellenebilir ?
1 - HTTPOnly ve Secure Flaglerinin Belirtilmesi
HTTPOlny ve Secure Flagleri web uygulamaları oluşturulurken ilk aşamalarında php cofigure php sürümüne uygun şekilde belirtilmelidir.
Bu flagler oturum çalma saldırılarını engelleyecektir
Bu sebeple web uygulama geliştiricileri henüz ilk aşamada bu flagleri belirtmelidir aksi taktirde manuel şekilde filtrelenmiş olan payloadlar saldırganlar tarafından bypass edilebilir
2 - Allowlist Değerleri
Kullanıcı girişini belirli bir izin listesiyle sınırlayın. Bu uygulama, sunucuya yalnızca bilinen ve güvenli değerlerin gönderilmesini sağlar.
3 - Girişlerde HTML'i Önleyin ve Kısıtlayın
Zengin içerik için HTML gerekli olsa da, güvenilir kullanıcılarla sınırlandırılmalıdır.
4 - Sanitize Değerleri
Bir sayfada kullanıcı tarafından oluşturulan içeriği kullanırken, güvenli olmayan karakterleri ilgili entity’ler ile değiştirerek bunun HTML içeriğiyle sonuçlanmamasını sağlayın. Entity’ler normal bir karakterle aynı görünüme sahiptir, ancak HTML oluşturmak için kullanılamaz.
5 - WAF Kullanın
Web sitenize yönelik saldırıları engellemek için bir güvenlik duvarı kullanabilirsiniz. Bu yöntem, kötü niyetli istekler web sitenize ulaşmadan önce XSS, RCE veya SQLi gibi saldırıları engeller. Ayrıca DDOS gibi büyük ölçekli saldırılara karşı koruma avantajına da sahiptir.
Şimdi ise DVWA Zafiyetli Makinesinde XSS Bölümünü İnceleyelim
Reflected XSS
-
-
Görmüş olduğumuz üzere bir adet input(veri giriş) yeri bulunmakta
Buraya yazdığımız yazı hem ekrana hem de URL'de ?name= yerine gelmekte
Bir de kaynak kodunda nereye geldiğini görelim.
-
-
Bir de </pre> yazarak ne olacağını görelim. Bakalım Javascript kodunu yazmamızı engelleyecek herhangi bir filtreleme var mı
-
-
-
Evet görmüş olduğunuz üzere dostlar yazmış olduğumuz </pre> html kodu sistem de olan </pre> kodunu devre dışı bırakmakta
Bu da burada herhangi bir filtreleme olmadığını ve Javascript kodu çalıştırabileceğimiz anlamına gelmekte
Bir deneyelim bakalım
-
-
-
Evet sitede alert kodunu çalıştırmayı başardık
Stored XSS
-
-
Evet site bizden bir isim bir de mesaj istiyor
Biz de isim ve mesaj alanını dolduruyoruz
Şimdi de bir kaynak kodlarına bakalım yazdığımız veriler nereye işleniyor
-
-
Evet şimdi ise basit bir html kod girelim bakalım burada da bir filtreleme ile karşılacakmıyız
-
-
-
Evet yazmış olduğumuz html kodu sayfa kaynağında çalışır vaziyette olduğu gözükmekte
Şimde de sayfaya alert verdirtmeye çalışalım
-
-
-
Evet dostlar siteye alert verdirtmeyi başardık
Sayfayı yenilersek tekrar gelicek mi ?
-
-
Yazdığımız alert kodu database(veritabanı) kaydedildiği için yenilesek bile alert kodumuz gelicektir.-
Siteler Arası Betik Çalıştırma(Cross-Site Scripting - XSS) saldıları, kötü niyetli kullanıcıların web sitelerinin çeşitli input(veri giriş) yerlerinden site içerisine enjekte edilen betik dili kodlarının sisteme verdiği açıktır.
XSS Saldırılarının Türleri Nelerdir?
1 - Reflected XSS:
Reflected XSS, XSS türlerinin en basitidir. Veri giriş ya da URL alanlarına Javascript kodlarını girerek yanıtları ekrana yansıtarak verdirilir.
Bir Reflected XSS senaryosu:
-
http://forum-golge.net/chat?message=Merhaba+Gencler-
<p> Siz: Merhaba Gençler </p>
Web uygulaması, veriler üzerinde herhangi bir filtreleme vb. işlem yapmaz,bu sebeple bir saldırgan çok kolay bir şekilde aşağıdaki gibi bir saldırı oluşturabilir:
http://forum-golge.net/chat?message=<script>/*Zararlı+Kod*/</script>
<p> Siz: <script>/*Zararlı Kod*/</script> </p>
Web uygulamasını kullanan herhangi bir kullanıcıya atılacak olan bu URL saldırganın yazdığı zararlı kod parçacığını aktifleştirecektir.Bu noktada saldırgan tarafından yazılan zararlı kod saldırganın belirlediği kodlar çerçevesinde eylem gösterebilir.
Bunlar:
Kullanıcı oturum bilgilerini çalma, Bilgisayarınız da çeşitli eylemler gerçekleştirme, Kullanıcının kamerasını açma, Kullanıcın erişimi olan herhangi bir veriyi alma gibi
2 - Stored XSS:
Stored XSS, İnput(veri giriş) yerlerinden alınan verilerin hiç bir filtreleme gibi işlemlerin yapılmadan database(veritabanı) kaydedilmesiyle oluşur ve Reflected XSS'e göre çok daha tehlikelidir.Çünkü, Reflected XSS sadece URL bağlantısını attığınız kişiye yansıyarak sadece onu etkilemekte ama Stored XSS database(veritabanı) kaydedildiği için database(veritabanı) kullanan tüm web uygulama ve kullanıcılara zarar vermekte.
Stored XSS için bir senaryo görelim:
<p> Merhaba arkadaşlar,nasılsınız </p>
Uygulama dijital bir platform ve bu platform da bir adet gönderi yayınlanıyor.Veriyi hiç bir filtreleme yapmadan database(veritabanı) kaydediliyor ve bunu diğer kullanıcılar normal olarak görüyor.
<p><script>/*Zararlı Bir Kod*/</script></p>
Şimdi ise veritabanına filtrelemeden geçmemiş bir zararlı kod kaydediliyor.Bu koda denk gelen kullanıcılar kodun işlemine maruz kalıyor.
3 - DOM Based XSS:
DOM(Document Object Model)’da meydana gelen saldırıdır. Reflected ve Stored XSS saldılarında saldırıyı görmek mümkünken aynı şey DOM Based XSS saldırısında mümkün değildir.Reflected ve Stored XSS saldılarına nazaran DOM Based saldırılarda # karakterini en başa kullanarak zararlı koda başlıyoruz. Çünkü # karakterinden sonra yazılan hiçbir şey HTTP trafiğinde gözükmemekte dolayısıyla server’a gönderilmemektedir. Bu durumda özellikle Stored’a nazaran işlevsel açıdan daha tehlikeli bir saldırı yapmakta.
Aşağıdaki kodları içeren şu sayfayı düşünelim
-
http://www.ornekgolge.net/deneme.html-
<script>
document.write("<b>Geçerli URL</b> : " +
document.baseURI);
</script>
http://www.ornekgolge.net/deneme.html#<script>alert("Merhaba Gölge");</script>
şeklin de HTTP isteği yolladığımızda Javascript kodumuzun çalışması için yeterli olur.Çünkü document.write fonksiyonuyla URL'ye ne yazarsanız sayfa da onu ekrana yazar. Sayfanın kaynağını incelediğimiz de
<script>alert("Merhaba Gölge");</script>
kodunu göremeyiz.Sebebi olan olayın DOM tarafında gerçekleşmesi.-
Neden XSS Saldırıları Yapılmakta ?-
XSS güvenlik açığını farkedip sömürmek isteyen saldırgalar genelde şunları yapabilir:
1. Kullanıcının gerçekleştirebileceği herhangi bir eylemi gerçekleştirmek.
2. Kullanıcının erişebildiği tüm verileri okumak.
3. Kullanıcının oturum açma bilgilerini ele geçirmek.
4. Web sitesin de kalıcı zarar vermek
5. Virüsleri web sitesine enjekte etmek
XSS Saldırıları Nasıl Engellenebilir ?
1 - HTTPOnly ve Secure Flaglerinin Belirtilmesi
HTTPOlny ve Secure Flagleri web uygulamaları oluşturulurken ilk aşamalarında php cofigure php sürümüne uygun şekilde belirtilmelidir.
Bu flagler oturum çalma saldırılarını engelleyecektir
Bu sebeple web uygulama geliştiricileri henüz ilk aşamada bu flagleri belirtmelidir aksi taktirde manuel şekilde filtrelenmiş olan payloadlar saldırganlar tarafından bypass edilebilir
2 - Allowlist Değerleri
Kullanıcı girişini belirli bir izin listesiyle sınırlayın. Bu uygulama, sunucuya yalnızca bilinen ve güvenli değerlerin gönderilmesini sağlar.
3 - Girişlerde HTML'i Önleyin ve Kısıtlayın
Zengin içerik için HTML gerekli olsa da, güvenilir kullanıcılarla sınırlandırılmalıdır.
4 - Sanitize Değerleri
Bir sayfada kullanıcı tarafından oluşturulan içeriği kullanırken, güvenli olmayan karakterleri ilgili entity’ler ile değiştirerek bunun HTML içeriğiyle sonuçlanmamasını sağlayın. Entity’ler normal bir karakterle aynı görünüme sahiptir, ancak HTML oluşturmak için kullanılamaz.
5 - WAF Kullanın
Web sitenize yönelik saldırıları engellemek için bir güvenlik duvarı kullanabilirsiniz. Bu yöntem, kötü niyetli istekler web sitenize ulaşmadan önce XSS, RCE veya SQLi gibi saldırıları engeller. Ayrıca DDOS gibi büyük ölçekli saldırılara karşı koruma avantajına da sahiptir.
Şimdi ise DVWA Zafiyetli Makinesinde XSS Bölümünü İnceleyelim
Reflected XSS
-
Görmüş olduğumuz üzere bir adet input(veri giriş) yeri bulunmakta
Buraya yazdığımız yazı hem ekrana hem de URL'de ?name= yerine gelmekte
Bir de kaynak kodunda nereye geldiğini görelim.
-
Bir de </pre> yazarak ne olacağını görelim. Bakalım Javascript kodunu yazmamızı engelleyecek herhangi bir filtreleme var mı
-
Evet görmüş olduğunuz üzere dostlar yazmış olduğumuz </pre> html kodu sistem de olan </pre> kodunu devre dışı bırakmakta
Bu da burada herhangi bir filtreleme olmadığını ve Javascript kodu çalıştırabileceğimiz anlamına gelmekte
Bir deneyelim bakalım
-
Evet sitede alert kodunu çalıştırmayı başardık
Stored XSS
-
Evet site bizden bir isim bir de mesaj istiyor
Biz de isim ve mesaj alanını dolduruyoruz
Şimdi de bir kaynak kodlarına bakalım yazdığımız veriler nereye işleniyor
-
Evet şimdi ise basit bir html kod girelim bakalım burada da bir filtreleme ile karşılacakmıyız
-
Evet yazmış olduğumuz html kodu sayfa kaynağında çalışır vaziyette olduğu gözükmekte
Şimde de sayfaya alert verdirtmeye çalışalım
-
Evet dostlar siteye alert verdirtmeyi başardık
Sayfayı yenilersek tekrar gelicek mi ?
-
Yazdığımız alert kodu database(veritabanı) kaydedildiği için yenilesek bile alert kodumuz gelicektir.-

