Vulnerability: Stored Cross Site Scripting (XSS) Çözümleri

Sefa Ozan
4 min readApr 11, 2021

--

Herkese merhaba, DVWA lablarını çözdüğümüz serinin üçüncüsüne hoş geldiniz. XSS ile ilgi daha daha çok bilgi için daha önceden yazdığım blog’a şuradan ulaşabilirsiniz.

Vakit kaybetmeden çözümlere geçelim.

#KOLAY

Bir önceki yazımı okuduysanız fark etmişsinizdir ki ben her zaman XSS aramaya testdeneme'">< ile başlarım.

Name kısmını doldururken uygulama testdeneme'">< yazmama izin vermedi. Muhtemelen client side‘ da karakter uzunluğu kontrolü yapıyorlar.

NOT : Client-side‘ da yapılan yasaklamalar, kısıtlamalar çok rahatlıkla Burp Suite aracı ile atlatılabilir.

Hangi karakterlerin HTML encode’landığını görmek için Name alanını ile deneme'">< değiştirip Sign Guestbook’a basıyorum.

Sayfanın kaynağını görüntülediğimizde input olarak girdiğimiz büyüktür, küçüktür karakterleri HTML içerisinde HTML encode’lanmadığını yani tag olarak kullanıldığını görüyoruz.

O halde, ister Name kısmına ister de Message kısmına <script>alert(1)</script> yazmamız yeterli olacaktır.

Her şey iyi güzel de, Name kısmına Javascript kodumuz sığmıyor diyebilirsiniz. Haklısınız

O halde Client-side korumaları nasıl atlatabileceğimize geçelim.

Öncelikle Burp Suite aracı sayesinde requestimizi yakalıyoruz.

NOT : Yukarıda gördüğünüz txtName ve mtxMessage’daki değerler; girdiğiniz inputların URL-Encode’lanmış halidir.

Yakaladığımız requesti Repeater’a gönderiyoruz.

NOT : Ctrl+Shift+U ile URL-Decode yapıp değiştirmek istediğiniz alanı daha rahat görebilirsiniz. Ayrıca Ctrl+U ile de seçtiğiniz alanı URL-Encode yapabilirsiniz.

Send’e basıp değiştirdiğimiz requestimizi gönderiyoruz.

Gördüğünüz gibi iki farklı pop-up çıktı. Bu da demek oluyor her iki javascript kodumuz da çalıştı.

proof of concept
proof of concept

#ORTA

Aynı taktikle XSS aramaya devam ediyoruz.

Sayfanın kaynağını incelediğimizde, Message kısmına yazdığımız testdeneme'">< ‘deki büyüktür ve tek tırnak sembolleri HTML encode’lanmasına rağmen Name kısmına yazdığımız deneme'"><hala duruyor.

Bir önceki örnekte görmüştük biz o alanı da kontrol edebiliyoruz. Burp suite ile requesti yakalayıp Repeater’a gönderiyorum.

txtName kısmını <script>alert(1)</script> ile değiştirdikten sonra Send’e basıyoruz.

proof of concept

#ZOR

Aynı taktikle XSS aramaya devam ediyoruz.

Sayfanın kaynağını incelediğimizde manzaranın bir önceki örnek ile aynı olduğunu anlıyoruz. Message kısmına yazdığımız > < karakterleri HTML-Encodelandığı için o kısma bir müdahale edemeyiz.

Bir önceki örnekte de yaptığımız gibi Burp Suite ile requesti yakalıyoruz ve Repeater’a gönderiyoruz.

Bir önceki örnekte de yaptığımız gibi txtName kısmını <script>alert(1)</script> ile değiştirip send’e basıyoruz.

Sayfanın kaynağını incelediğimizde görüyoruz ki yazdığımız javascript kodundan eser kalmamış.

O halde biz de payload’ımızı değiştirip tekrar deneriz. Tag ve event’lerin tam listesine buradan ulaşabilirsiniz.

Payload’ımızı yazıp URL-Encode’ladıktan sonra Send’e basıyoruz.

proof of concept

Bir sonraki yazımda görüşmek üzere …

--

--

Sefa Ozan
Sefa Ozan

No responses yet