Ders 21 - Reflected XSS (High Level)
Bu yazıda güvenlik düzeyi High seviyesine yükseltilmiş DVWA'da Reflected XSS'e karşı ne gibi bir güvenlik önlemi alındığı incelenecektir ve alınan güvenlik önlemine rağmen yine Reflected XSS saldırısı düzenlenebilir mi sorusuna yanıt aranacaktır.

Dersin Hedefi

Hedefiniz High seviyesindeki güvenliği keşfetmektir.

Reflected XSS'e Karşı Önlem

Geçen derste bahsedilen güvenlik önlemi aşılabilmişti. Şimdi bir de güvenlik High seviyesinde kullanılan güvenlik önlemine bakalım:

<?php 

// Is there any input? 
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) { 
    // Get input 
    $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );

    // Feedback for end user 
    echo "
Hello ${name}
"; } ?>


6. satırda kullanıcıdan gelen veri belirtilen regular expression desenine sahip mi değil mi diye kontrol ediliyor. Desendeki nokta (.) işareti herhangi bir karakter anlamına gelirken noktadan sonraki yıldız (*) işareti ise önceki ifadeden 0 kez ya da daha fazla kez olabilir anlamını gelir. Yani (.*) ile ifade edilen şey 0 ya da daha fazla kez ‘karakter’ gelebilirdir. Kullanılan desene odaklanacak olursak

/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i

Yukarıdaki ifadenin dayandığı syntax şudur:

/pattern/modifiers

pattern desen anlamına gelmektedir. modifiers kısmı ise preg_match() fonksiyonundaki regular expression'ın sonuna bakacak olursanız i harfini almıştır. i harfi aranılan deseni hem büyük harfe göre hem de küçük harfe göre aramaya yarar. Böylece aranılan desene uygun karakter dizisi büyük harf de olsa küçük harf de olsa seçilecektir ve silinecektir. Bir daha desene bakacak olursak

/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i

Dikkat ederseniz (.*) kısımlarını regular expression’dan çıkarırsanız <script kelimesini göreceksiniz. <script’in aralarına konulan (.*) ile yapılmak istenen şudur: “<script yazısının başında, ortasında, sonunda, her yerinde başka karakter olabilir. Böyle bir desen bulursan onu komple sil”. Yani güvenlik medium seviyesinde iken verilmiş aşağıdaki örneğe bir daha göz atacak olursak

<scr<script>ipt>alert('Site Halen XSS Açığına Sahip');</script>

preg_replace() fonksiyonu bu parçalı <scr<script>ipt> ifadesini kendi regular expression’ı ile eşleşmiş bulacaktır. Dolayısıyla <scr<script>ipt> ifadesini komple silecektir.

Sonuç

Geçen derste güvenliği sağlayan str_replace() fonksiyonuna göre Regular Expression çözümü daha kapsamlı bir güvenlik temin etmiştir. Bu güvenliği aşmanın şu şartlar altında bir yolu yoktur.
Bu yazı 22.01.2016 tarihinde, saat 08:29:31'de yazılmıştır. 22.01.2016 tarihi ve 08:55:58 saatinde ise güncellenmiştir.
Yazar : Hasan Fatih ŞİMŞEK Görüntülenme Sayısı : 3234
Yorumlar
Henüz yorum girilmemiştir.
Yorum Ekle
*
* (E-posta adresiniz yayınlanmayacaktır.)
*
*

#Arşiv


#Giriş

ID :
Şifre :