Bir XSS saldırısı şu örüntüyü kırar: Input -> Output == Cross-Site Scripting
Uygulama girdiyi doğrulamıyorsa/geçerlemiyorsa (validation) ve bizim kontrolümüzde çıktı üretiyorsa bir XSS zaafiyeti bulduk demektir.
Reflected XSS (Type 1; Non-persistent XSS):
XSS açıklığının en yaygın türüdür.
Tanım: Bir web uygulaması bu açıklığı barındırdığı zaman, talep ile gönderilen doğrulanmamış girdiyi istemciye geçirir.
Yaygın yöntem:
- Bir tasarım adımı vardır: saldırgan bir URL oluşturur ve test eder.
- Bir sosyal mühendislik adımı vardır: Saldırgan kurbanı bu URL'i kendi browser'ında açmaya ikna eder.
- Son adım: saldırgan kodun çalıştırılması - kurbanın kimlik doğrulaması ile tabi.
Genellikle saldırganın kodu Javascript kodu ile yazılır; bazen ActioScript ya da VBScript gibi farklı scripting dilleri ile de yazılır.
Saldırgan genelde işini key logger yükleyerek, kurbanın cookie'lerini çalarak, clipboard'u çalarak ya da sayfanın içeriği ile oynayarak kolaylaştırır.
Karakter encoding önemli bir konudur. Bazen uygulama "<script>" öbeğini filtreliyor fakat "%3cscript%3e" öbeğini geçiriyor olabilir; burada büyük-küçük karakterleri yerine URL encoding kullanılmış oldu.
Black Box Test:
En az 3 fazı vardır:
- Girdi vektörlerinin belirlenmesi/keşfi.
- Tüm girdi vektörlerinin potensiyel zaafiyetlerinin analizi. XSS zaafiyeti analizi için girdi vektörlerine özel hazırlanmış, büyük ihtimal zararsız fakat zaafiyeti açıkça gösterecek şekilde cevapları (response) tetikleyen veriler girilir. Veri bir web uygulama fuzzer ile üretilebilir ya da manuel hazırlanabilir.
- Önceki fazda raporlanan tüm zaafiyetler için uygulamada ciddi etkileri olacak saldırılar gerçekleştirilir.
http://example.com/index.php?user=<script>alert(123)</script>