Selam,
Web uygulama güvenliği üzerine kendini geliştirmek isteyen insanların karşısına çıkan deneme ortamlarından biridir Web For Pentester-I . Kendi sitesinden ISO imajını indirerek sanal bir makina olarak kendi ağınızda çalıştırabilirsiniz. Bu yazıda Web For Pentester-I içindeki XSS sorularının çözümlerini inceleyeceğiz.

Example 1

İlk aşamada karşımızda resimdeki gibi bir sayfa bulunmaktadır. Daha derinden incelemek amacıyla sayfanın kaynak kodunu incelediğimizde karşımızda

bulunmaktadır. Yani burada bizden URL parametresi olarak aldığı __hacker__ değeri direkt olarak sayfanın kaynak koduna eklemekte olduğunu görmekteyiz. Bu parametre üzerinden XSS için zararlı kodumuzu gönderdiğimizde gerekli çıktıyı elde etmekteyiz.

/xss/example1.php?name=<script>alert("AUCC");</script>

Example 2

Bu aşamada aynı şekilde girdiğimiz değeri kaynak koda göndermektedir fakat içerdiğinde bunları girdiden kaldırmaktadır.

Bu korumayı aşmak için “script” etiketlerimizde ufak bir değişiklik yapmamız gerekmektedir. Bu değişikliği de birer harfini büyülterek sağladık ve bu aşamayı tamamladık.

<sCript>alert("AUCC");</scriPt>

Example 3

Bu aşamada ise koruma olarak herhangi bir __script__ etiketi gördüğü anda onu kaldırmaktaydı ama bunu sadece bir kere yapmaktaydı. Bu korumayı aşmak için iç içe şekilde iki kere __script__ etiketi verdiğimizde aşamayı tamamlamaktayız.

<sc<script>ript>alert("AUCC");</sc</script>ript>

Burada içerde bir bütün olarak görülen __script__ etiketlerini siliyor fakat dışarısında yarım olarak kalanları algılayamayıp silmiyor ve iç kısımdakiler silindiğinde kaynak koda gidecek tekrar bir __script__ etiketimiz bulunuyor.

Example 4

Bu aşamada __script__ etiketinin kullanımı tamamıyla engellenmiş durumdadır. Hiç bir şekilde kabul etmeyip hata mesajı vermektedir.

Fakat XSS’i sadece “script” etiketleri içersinde yollamak zorunda değiliz. Bunu sağlamak için farklı etiketlerimizde bulunmaktadır. Bunlardan bir tanesi “body” etiketidir. Bu etiket içersinde “onload” özelliğiyle de bir fonksiyon çağırarak bu aşamayı tamamlayabiliriz.

<body onload=alert("AUCC");>

Example 5

Bu sorumuzda bir önceki sorumuzun aksine tamamen __script__ etiketini engellemek yerine __alert__ fonksiyonunu çalıştırırken hata vermektedir.

Ve kaynak kodunu incelediğimizde __script__ etiketlerini barındığını görmekteyiz. Bu yüzden bizim script etiketi dahilinde çalıştırabileceğimiz farklı bir fonksiyonun işimizi göreceğini düşünerekten, __prompt__ fonksiyonunu kullanarak bu aşamamızı da tamamlıyoruz.

<script>window.prompt("AUCC");</script>

Example 6

Bu aşamamızda sayfayı ilk açtığımız şeklinde direk kaynak kodunu incelediğimizde karşımıza resimdeki gibi bir içerik çıkmaktadır.

Burada bizim URL’de parametre olarak verdiğimiz değeri __script__ etiketleri içerisinde bir değişkene yazmaktadır, direkt olarak bize script etiketinin içine yazma imkanı tanınmıştır ve bu aşamayı tamamlamak için yeterlidir.

";alert("AUCC");"

Example 7

Aynı şekilde 6. aşamadaki gibi bize __script__ etiketinin içine yazma imkanı tanınmış fakat farklılık olarak bu sefer yerine kullanılmıştır değişkene atanırken. Bir önceki aşamadaki girdiğimiz zararlı kod parçasında ufak bir değişik ile bu aşamayı da tamamlıyoruz.

';alert('AUCC');'

Example 8

Bu aşamada durum biraz farklılaşıyor. Direkt olarak kullanıcıdan URL üzerinden parametreyi almak yerine bir form aracılığıyla alıp sayfaya döndürmektedir ve aldığı girdiyi de bir güzel encode etmektedir.

Fakat ek olarak bir şey dikkatimizi çekmektedir ki buda girdi aldıktan sonra formun tekrar kullanıcıya döndürülmesi ve bu da PHP_SELF fonksiyonu ile sağlanmıştır. PHP_SELF fonksiyonu o an çalıştırılan kodun URL’den yolunun alınıp tekrar kaynak kod içersinde yazılmasını sağlamaktadır. Bunun bize sağladığı imkandan yararlanarak zararlı kodumuzu URL üzerinden sayfamıza gönderip bu aşamayı tamamlıyoruz.

/xss/example8.php/"><script>alert("AUCC");</script>

Example 9

Burada karşımızda DOM XSS bulunmaktadır. URL’de gördüğümüz # sembolden sonrası html dosyasındaki bir objede değişiklik yapmamıza imkan tanımaktadır.

/xss/example9.php#<script>alert("AUCC");</script>


Uygar Demircioğlu