XSS’in en basit haldeki tanımını Cross Site Scripting adlı yazımda yapmıştım. Şimdi gelin bazı özellikleriyle aynı, bazı özellikleriyle de farklı olan XSS çeşitlerini incelemeyelim.
Reflected XSS
Kullanıcıdan aldığı parametreyi basitçe yeniden düzenleyerek kullanıcıya yansıtmasıyla kolayca tespit edilebilir.
Örneğin aşağıdaki resimdeki parametreye bakarsak hacker ifadesi tekrardan ekrana basılmış.
Acaba hacker ifadesini değişsek, yerinede bir java script kodu yerleştirsek ne olur ? Sonuç:
Bir site de Reflected XSS olması kullanıcısını şöyle kötü bir duruma sokabilir.
Bu örnekte Attacker neden direkt User’a kötü kodu yollamamıştır? Çünkü attacker’ın amacı user’ın oturum bilgisini çalmak olduğundan ve oturum bilgisi de sadece daha önce oturum açtığı domain ile aynı domain ise (bknz: Same Origin Policy) çerez başlık bilgisine eklendiğinen böyle bir yol izlenmelidir. Bir diğer önemli nokta ise burada etkilenen sadece saldırgan bağlantısını tıklayan kullanıcıdır.
Stored XSS
Reflected XSS’de saldırganımız kullanıcıya bir şekilde gönderdiği zararlı bağlantıyı tıklatmak zorundaydı. Burada ise yukarıdaki şekildeki uygulamaya saldırgan bir şekilde bir zararlı kod yerleştirse (stored ismi burdan gelmektedir) ve buraya uğrayan herhangi bir kullanıcı giriş yaptığında bu zararlı kod çalışıp saldırganın oturum bilgisini çalabilir. Anlattığımız senaryo şu şekildeydi:
DOM XSS
Bir web sayfasına girdiğinizde sağ tıklayıp kaynağı görüntüle dediğinizde HTML kodlarını görürsünüz. Çünkü tarayıcının sunduğu arayüz HTML’dir. Bu HTML içerisindeki objeler ile diller arasındaki köprü bağını DOM dediğimiz erişilebilen nesneler sağlar.
DOM XSS açıklığı bulunan uygulamada saldırgan yolladığı bağlantıyı kurbana yollar ve kurban bu bağlantıya tıkladığında uygulama sunucusu kurbana cevap döner. Ve yukarıdaki örneklerde de olduğu gibi oturum bilgisi çalınabilir. Buradaki püf nokta reflected xss’in aksine objelerden üzerinden oturum bilgisinin çalınabilmesidir.