CTF

Google XSS Game Çözüm

Öncelikle herkese merhaba. Bu yazımda “xss-game.appspot.com” adresinden erişilebilen Google XSS Game çözümünü yapacağım. XSS açığının birçok sistemde keşfedilmesinden ötürü bu tarz alıştırmalar öğretici olabilmektedir.

1- İlk seviyede en basit düzeyde hiçbir filtreleme olmadan Reflected XSS açığı karşımıza çıkmakta. Klasik payloadımızı çalıştırarak bir sonraki seviyeye basit bir şekilde geçiyoruz.

Payload: <script>alert(333)</script>
google-xss-game-çözüm
google-xss-game-çözüm (1)
google-xss-game-çözüm

2 – İkinci kısımda ise bir yorum alanı görülmekte. Bu alanda Stored XSS açığı bulunmakta. Girilen veriler encode edilmediği durumlarda bu açık bulunabilmektedir. Veritabanına kaydedildiği için oldukça tehlikeli sonuçlar doğurabilir.

Payload: “><img src=x onerror=alert(333);>
google-xss-game
google-xss-game-çözüm

Yorum alanına payloadı yazıp paylaşıyoruz.

google-xss-game-çözüm
google-xss-game-çözüm

Hatayı alıyoruz ve böylece paylaşım yaptığımız sayfaya giren tüm kullanıcılar bu hatayı görecektir.

3 – Bu seviyede ise bir Javascript kodunda yer alan güvenlik açığı bulunmakta. Burada DOM XSS karşımıza çıkmakta.

google-xss-game-çözüm
google-xss-game-çözüm

Kaynak kodunu incelediğimizde en altta tabContent kısmına bir image kodunun eklendiğini görmekteyiz. Ayrıca bu image koduna kullanıcı tarafından alınan num değerinin geldiği görülmekte. Burada yer alan img kodunu kullanarak açığı bulacağız. DOM XSS tipinde bildiğimiz gibi # karakterinden sonra payloadı ekleyeceğiz. ‘ şareti ile payloadı çalışır hale getiriyoruz.

Payload: “’><img src=x onerror=alert(“‘XSS’”);>
google-xss-game-çözüm
google-xss-game-çözüm
google-xss-game-çözüm
google-xss-game-çözüm

4 – Belkide çözmesi düşünmesi en zevkli bölüm bu olabilir. Oldukça zevkliydi benim için beyin fırtınası yaptırıyor.

google-xss-game-çözüm
google-xss-game-çözüm

Burada startTimer isimli fonksiyona aktarılan kullanıcı inputu görülmekte.

google-xss-game-çözüm
google-xss-game-çözüm

Burada çeşitli kombinasyonlar deneyerek sayfayı inceledim. Buradaki mantığı deneyerek anlamaya çalıştım ve sonuca ulaştım. Burada koddan gördüğümüz üzere startTimer fonksiyonunda girdiyi parantezler tek tırnak olarak bize gösteriyor.

google-xss-game-çözüm
google-xss-game-çözüm

‘);alert(333) payloadını girdiğimizde kod içerisinde alert kısmında ‘) kısmının olmaması durumunda kodun çalışabileceğini görüyoruz. Buraya gireceğimiz payload ‘):alert(‘test şeklinde olursa, kod içerisinde payloadımız startTimer(‘’);alert(‘test’); şeklini alarak çalışacaktır.

google-xss-game-çözüm
google-xss-game-çözüm

Payload başarılı bir şekilde çalışıyor ve diğer bölüme geçiyoruz.

5 – Bu seviyede ise bir e-mail input kısmı yer almakta. Sign up kısmına tıklayıp ilerliyoruz.

google-xss-game-çözüm
google-xss-game-çözüm
google-xss-game-çözüm
google-xss-game-çözüm

Bu kısımda e-mail girmemiz gereken bir input kısmı yer almakta.

google-xss-game-çözüm
google-xss-game-çözüm

İnput kısmının kaynak kodlarına baktığımızda kullanıcıdan alınan next parametresinin bir Javascript içerisinde çalıştığını görüyoruz. Buraya girdiğimiz payload encode işlemi olmayacak parametreler kullanıldığında çalışacaktır.

google-xss-game-çözüm
google-xss-game-çözüm

E-mail input kısmına javascript:alert(333) payloadını girdiğimizde çalışacaktır.

6 – Bu seviyede ise kullanıcı tarafından alınan verinin src tagı kısmına direk olarak verilmesi ile oluşan bir zafiyet bulunmakta. Bu şekilde başka bir sayfadan http veya https olmadan başka bir siteden Javascript dosyası çağırılabilir. Burada bize verilen google üzerinden bir Javascript dosyası çağırarak alert alacağız.

google-xss-game-çözüm
google-xss-game-çözüm
google-xss-game-çözüm
google-xss-game-çözüm

Bu kodlar içerisinde görüldüğü gibi http ile bir web sitesinden bir dosya çağırılamamaktadır, engellenmiştir. Challenge da bize verilen #https://www.google.com/jsapi?callback=foo adresi üzerinden bir Javascript dosyası çağırabiliriz.

google-xss-game-çözüm
google-xss-game-çözüm

Evet kod içerisinde engellendiği için http olduğundan dolayı dosyamızı çağıramadık. Burada browser http olmadan //www.google….. şeklinde de bir web sitesinden dosya çağırabilir src kısmında illa http ile çağırılması gerekmez.

google-xss-game-çözüm
google-xss-game-çözüm

Evet hatayı almayı başardık. Burada adresimizi #//www.google.com/jsapi?callback=alert bu şekile sokarak bir web adresinden dosya çağırabildik ve alert ile hatamızı aldık.

Böylece challenge başarılı bir şekilde tamamlanmış oldu. Başka yazılarda görüşmek üzere.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

11 − 9 =

Başa dön tuşu