🖥️
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
  • JWT Nedir?
  • Nasıl Test Edilir?
  • Doğrudan Verileri Değiştir
  • Algoritma Değiştir
  • Zayıf Anahtar (HS256)
  • JWK Header Injection (RS256)
  • JKU Header Injection (RS256)
  • KID Header Path Traversal (HS256)
  • Public Key ile Algorithm Confusion (RS256)
  • Public Key Olmadan Algorithm Confusion (RS256)
  • Otomatize Araçlar
  • Kaynaklar

Was this helpful?

  1. Web Application Pentesting

JWT

PreviousPrototype pollutionNextActive Directory Services

Last updated 22 hours ago

Was this helpful?

JWT Nedir?

JSON Web Token'ları (JWT), sistemler arasında kriptografik olarak imzalanmış JSON verilerinin gönderilmesi için standartlaştırılmış bir formattır. Teorik olarak her türlü veriyi içerebilirler, ancak en yaygın olarak kimlik doğrulama, oturum işleme ve erişim kontrol mekanizmalarının bir parçası olarak kullanıcılar hakkında bilgi göndermek için kullanılırlar.

Klasik session token'ların aksine, bir sunucunun ihtiyaç duyduğu tüm veriler JWT'nin kendi içinde client-side olarak saklanır. Bu, JWT'leri kullanıcıların birden fazla arka uç sunucusuyla sorunsuz bir şekilde etkileşime girmesi gereken yüksek oranda dağıtılmış web siteleri için popüler bir seçim haline getirir.

JWT saldırıları, bir kullanıcının kötü niyetli bir hedefe ulaşmak için sunucuya değiştirilmiş JWT'ler göndermesini içerir. Genellikle bu amaç, kimliği zaten doğrulanmış olan başka bir kullanıcının taklit edilmesi yoluyla kimlik doğrulama ve erişim kontrollerini atlamaktır.

Nasıl Test Edilir?

Doğrudan Verileri Değiştir

Eğer anahtar kontrolü yapılmıyorsa jwt içindeki verileri değiştirmeyi deneyebiliriz.

Algoritma Değiştir

Algoritmayı none yaparak verileri değiştirmeyi deneyebiliriz.

Zayıf Anahtar (HS256)

hashcat -a 0 -m 16500 <JWT> jwt.secrets.list

JWK Header Injection (RS256)

Embedded JWK saldırısı deneyebiliriz. Extension'da var.

JKU Header Injection (RS256)

Embed Collaborator Payload ile jku header ekliyoruz. Sonrasında bir RSA key oluşturuyoruz. Burada oluşan keyi aşağıdaki şekilde bir dosyada paylaşıyoruz.

{
    "keys": [
        {
           <PAYLOAD>
        }
    ]
}

Sonrasında bu dosyanın adresini jku başlığına yazıyoruz. Son olarak anahtar ile JWT'yi imzalıyoruz.

KID Header Path Traversal (HS256)

Öncelikle simetrik bir anahtar oluştuyoruz ve k değerini AA== yapıyoruz.

Sonrasında JWT'nin kid değerini aşağıdaki değerlerden biri yapıyoruz ve JWT'yi oluşturduğumuz anahtar ile imzalıyoruz.

/dev/null
../../../dev/null

Public Key ile Algorithm Confusion (RS256)

Öncelikle sunucunun public key değerini bulmamız gerek. Bunun için /jwks.json dizinine bakabiliriz.

Sonrasında burdaki değerler ile bir RSA key oluşturuyoruz ve PEM olarak kopyalıyoruz.

Şimdi bir simetrik key oluşturuyoruz ve k değerinine PEM değerinin base64 halini yazıyoruz.

Sonrasında JWT'yi bu simetrik key ile alg değerini değiştirerek imzalıyoruz.

Public Key Olmadan Algorithm Confusion (RS256)

Bu yöntem için bir kullanıcıya iki kere giriş yapıyoruz ve iki farklı JWT alıyoruz ve komutu çalıştırıyoruz.

docker run --rm -it portswigger/sig2n <token_1> <token_2>

Çıkan Tampered JWT'leri teker teker deniyoruz. Eğer çalışırsa onun üstündeki x509 anahtarını alıyoruz ve simetrik anahtar olarak keydediyoruz.

Bu anahtar ile JWT'yi imzalayabiliriz.

Otomatize Araçlar

python3 jwt_tool.py -M at \
    -t "https://example.com/" \
    -rh "Authorization: Bearer <JWT>" \
    -rc "session=<JWT>"

Kaynaklar

Jwt-List:

Burp Extension:

JWT Tool:

Portswigger:

🕸️
https://github.com/wallarm/jwt-secrets/blob/master/jwt.secrets.list
https://github.com/portswigger/json-web-tokens
https://github.com/ticarpi/jwt_tool
https://portswigger.net/web-security/jwt