Burp Suite Kullanarak XSS (Cross Site Scripting) Zafiyet Tespiti

Cross site scripting (XSS), web güvenlik açığı. HTML kodlarının arasına istemci tabanlı kod gömülmesi yoluyla kullanıcının tarayıcısında istenen istemci tabanlı kodun çalıştırılabilmesi olarak tanımlanır.[1] XSS açıklıkları bulunduğu yere göre değer kazanır ve stored, reflected ve dom based olmak üzere üç çeşidi bulunmaktadır.


Bir sistemde XSS zaafiyetinin tespiti için, sistemin kullanıcıdan girdi alabileceği yerler tespit edilir. Ardından tespit edilen yerlere veri girişi yapılır. Bu veri web uygulamanın kaynak kodları arasında yerini alıyorsa, payloadlar denenmeye başlanır. Burada anlatılmak istenen Burp suite aracı kullanarak iki farklı örnekle açıklanmıştır.

Örnek 1. Kullanıcı, web uygulama üzerinde arama yapmak isterse, arama kutusunu kullanarak sisteme veri girişi yapar.


1.png



Arama kutusuna “searching xss vulnerability …” yazıldığında, yazılan bu verinin html kodlar arasında yerini aldığı yukarıdaki resimde rahatça görülebilir. Kaynak kod incelenip, uygun payload yazılmadan önce, geliştiricinin html taglerini engelleyip engellemediği, arama kutusuna html tag yazılarak test edilir.



Örnekte, test için arama kutusuna “searching xss vulnerability …” yazılmıştır. Dönen değerde tagi tarayıcı tarafından yorumlanarak, yazı tipi kalınlaştırılmıştır. HTML taginin yorumlanması, geliştiricinin XSS ‘e karşı önlem almadığını ve sistemin XSS istismarına açık olduğunu belirtmektedir.
2.png



XSS zaafiyetinin varlığından emin olunduktan sonra girdinin yorumlandığı kısmın kaynak kodu incelenerek uygun payload yazılır ve çalıştırılır. Eğer bir hata ile karşılaşılırsa ya WAF veya türevi koruyucu bir sistem vardır ya da    geliştirici kısıtlayıcı önlemler almıştır.



HTML kaynak kodu:



Arama Sonuçları “searching xss vulnerability …”



Arama kutusuna yazılan veri, herhangi bir etiket (tag) içerisinde bulunmuyor dolayısıyla etiketi direk kullanılabilir. Bu örnekte  “alert(1)” payload’ı denenecektir. Bu şekilde bir girdi sonucunda tarayıcı sonucu aşağıdaki şekilde yorumlayacaktır.



Arama Sonuçları “ale rt(1)”


Ekran görüntüsü aşağıdaki gibi olacaktır.
3.png



Örnek 2.


“.$_GET[“url”].” ‘>Xss Link

“; ?>

Yukarıda belirtilen kod parçacığına sahip xss.php dosyasına get metodu ile alınan “url” parametresi, HTML kod içine hiçbir filtreye tabi olmadan dahil ediliyor. Bu parametre değerinin href özelliği içinden çıkarılıp normal HTML tag gibi yorumlanması için payload ‘> ile başlamaladır. Örnek,



‘>pro mpt(1)Xss Link

“; ?>

Yukarıda da görüldüğü gibi script etiketi artık href içinde string ifade gibi değil, HTML etiket olarak yorumlanmaktadır. Sonuç aşağıdaki gibidir.
4.png



WAF olduğu durumda ya da geliştirici kısıtlamaları varsa, payload yazarken çeşitli bypass yöntemleri kullanılır. Geliştirici “script,alert,onload …” gibi kelimelerin kullanılmasını yasaklamış olabilir. Bunun bypass etmek için “promt()” payloadı gibi, yazılacak payload büyük küçük harfler kullanılarak denenir. WAF atlatmak için payloadlar encode edilmelidir. Bu yazıda bypass yöntemleri anlatılmayacağından sadece bu kadarına değinilmiştir.



Burp Aracı ile XSS (Cross Site Scripting) İstismarı



Burp Suite sızma testlerinde sıklıkla kullanılan bir web proxy uygulamasıdır. [2] XSS istismarında  wordlist ile payload denemek için kullanılır. Bu işlem Burp Suite’in Intruder eklentisi aracılığıyla gerçekleştirilir.



Yukarıda gösterilen Örnek 1. de script,alert kelimeleri geliştirici tarafından  engellenmiştir. Bu engel büyük harf kullanılarak atlatılabilir. Test için ufak bir wordlist hazırlanmıştır.
< script >a lert(1)
< script >pro mpt(1)
< Script >pro mpt(1)
< sCript >Ale rt(1)
< ScriPt >pro mpt(1)
< scRipt > al ert(2)


Örnek 1. üzerinde uygulanan işlemler aşağıda adım adım anlatılmaktadır.



1. Burp Suite çalıştırılır ve web tarayıcı proxy olarak 127.0.0.1:8080 kullanacak şekilde ayarlanır.   



Firefox/Iceweasel için, Edit > Preferences > Advanced > Network > Settings > Manual Proxy Configuration (127.0.0.1:8080) > OK



2. Hedef sisteme tarayıcıdan erişilip istek Burp Suite proxy sekmesinde görülür. Sağ tıklayıp “send to Intruder” ile HTTP isteği Intruder eklentisine gönderilir. Positions sekmesinde payloadların deneneceği parametre aşağıdaki şekilde görüldüğü § karakterleri ile işaretlenir.



Örnek 1. de arama kutusuna yazılan değerler s1 parametresine karşılık geldiğinden  s1 parametresi işaretlenmiştir.



5.png



3. Payloads sekmesine geçilerek, wordlist intruder’e yüklenir.
6.png



4. Burp Suite menüsünden Intruder altında bulunan “Start Attack” seçilerek, saldırı başlatılır. Çıktı aşağıdaki gibidir.
7.png



Yukarıdaki şekilde, dikkat edilirse sadece 5. payloaddan dönen sayfanın boyutu diğerlerinden farklıdır. 5. payload hedef sistemin XSS zaafiyetinin payloadı olarak kullanılabilir. Test sonucu aşağıdaki şekildeki gibidir. Uygun payload: “pro mpt(1)



8.png




XSS payload wordlistleri bulabileceğiniz siteler aşağıda verilmiştir:


Ceylan BOZOĞULLARINDAN


Kaynaklar



[1] Cross Site Scripting tanımı, website: http://tr.wikipedia.org/wiki/Cross_site_scripting,
      Erişim tarihi: 09/07/2014



[2] Burp Suite tanımı, website: http://blog.bga.com.tr/2013/06/web-uygulama-guvenlik-testlerinde-burp.html, Erişim tarihi: 09/07/2014