Pentest & Bug Bounty
  • 🥷Pentest et Bug Bounty
    • 👾Pentest Methodology
    • 💸Bug Bounty Methodology
      • 📓Ecrire un bon rapport
      • ⚖️Aspect Juridique (FR)
  • 👣OSINT / Recon
    • 🧦Sock Puppet
    • 🧠Mindmaps
    • 🏢Entreprise
    • 👀Leaks
    • 👊Manuel / Dorks
      • Google dorks
      • Github dorks
      • Twitter Dorks
      • Shodan Dorks
    • 👥Réseaux sociaux (SOCMINT)
      • 🕵️Telegram OSINT
      • 👻Snapchat OSINT
      • 🤵‍♂️Linkedin OSINT
      • 🗣️Facebook OSINT
      • 🎼Tik tok OSINT
      • 📷Instagram OSINT
      • 🐦Twitter OSINT
      • 🔊Discord OSINT
    • 🖇️Domaines et Sous-domaines
    • 🚪Scan de ports / web
    • ✉️Emails
    • 🔗Réseau
    • 📷Screenshots
    • 📹Live camera
    • 🧔Reconnaissance faciale / images
    • 🌆Images
    • 🗺️Maps
    • 👁️Active Directory
    • ☁️Cloud
    • Autre
  • 🌐Pentest Web
    • ✊Brute force / Fuzzing
    • 💉Injections
      • 🍪XSS
        • PDF injection
      • 📄HTMLi
      • 📃XXE
      • 7️⃣SSTI
      • 🔢SQLi
        • 👫UNION based
        • ⏳Time based
        • 🥽Boolean based / Error Based
        • 📤Out-Of-Band
      • ↩️CRLF
      • 🐚OS injection
      • ☕Log4Shell
      • 🥠CSV
      • 🍻ESI
      • 😎XSLT
      • 💌Injections dans emails
      • 🔀ELi
        • OGNLi
    • ↪️Open redirect
    • 📁Path Traversal / LFI / RFI
    • 🔓Bypass
      • 〰️WAF / Filter bypass
      • 2️2FA
    • ☠️Charges utiles
    • 📚CMS (Content Management System)
      • WordPress
      • Joomla!
      • Magento
      • Drupal
    • 🎭SOP bypass
      • CORS
      • postMessage()
      • JSONP
    • 🖱️Clickjacking
    • ⚙️Insecure deserialization
    • ☣️Web Cache Poisoning / Deception
    • 🤝HTTP Smuggling
    • 👋OAuth
    • ⛔SAML
    • 🗝️JSON Web Token
    • 🎣CSRF
      • 🚀Cross-site WebSocket Hijacking (CSWSH)
    • 🎯IDOR
    • 🕹️SSRF
      • Cloud SSRF
      • Protocol Smuggling
    • ⚙️APIs
      • 🍽️REST
      • 📶GraphQL
    • ❓Mot de passe oublié
    • 🛒Fonctions d'achat et de facturation
    • 👽Broken authentication / register
    • 🏁Panneaux d'administration
    • ⏬Upload features
    • 🔗Broken Link Hijacking
    • 🎮Prise de contrôle de sous-domaine
    • 🛂Prise de contrôle de DNS
    • ☝️One liners
    • 🚧Misconfigurations
    • 🗿Analyse statique
      • PHP
      • Ruby On Rails
      • Perl
      • JAVA
      • Javascript
      • Python
      • Golang
      • .NET
    • 🪣AWS S3
    • 🤖Captcha
    • 🪞Race conditions
    • ☄️.git exposé
    • 💭Business logic
    • 🥡Prototype pollution
    • 💣Dependency confusion
    • 🛑DoS
      • 🤯ReDoS
      • 👏Hash flooding
      • 🧨Cookie bomb
    • Autre
      • Flask
      • Symphony
      • Spring Boot
      • Django
      • Jenkins
  • 🌩️Pentest Cloud
    • IaC (Infrastructure as Code)
      • Terraform
      • Helm
      • Kustomize
    • AWS
      • Enumeration
    • Azure
      • Entra ID
      • Azure Resource Manager (ARM)
        • Enumeration
    • GCP
      • GCP IAM
      • Authentification
      • Enumeration
    • Kubernetes
  • 🕸️Pentest Réseau
    • 🪡Protocoles réseau
    • 📡Wifi
    • 🔋BLE
    • 📍VPN
  • 🗂️Pentest AD
    • 👺GPP
    • ➡️Mouvements latéraux
      • 🔪Pass The Hash
      • 🗡️Over Pass The Hash
    • 📜ADCS
  • 📱Pentest Mobile
    • 🤖Android
      • 👾Méthodologie
      • 🌳Setup environnement
      • 🍇Collecte d'informations
      • 🔠Enumeration des données locales
      • 🔙Reverse engineering
        • 🪢Dé-obfuscation
      • ⛰️Analyse statique (Android)
      • 🐞Debug
      • 🎰Stockage de données non sécurisé
        • 📰Logs
        • 🤝Shared Preferences
        • 🔤Strings
        • 🗄️SQLite DB
        • 🗃️Realm DB
        • 🧠Mémoire
        • 📍Copy/Paste buffer caching
        • ⌨️Keyboard press caching
        • 🔙Backup
        • Carte SD
      • 🌩️Firebase/Appspot misconfig
      • 🔗Deeplinks vulns
        • Interception de contenu
        • WebView hijacking (via deeplink)
        • Invalid Digital assets links
      • 🖼️WebView vulns
        • WebView Hijacking
        • Exfiltration de données
        • RXSS
        • Vol de token
      • Guides outils
        • ⛏️Outil Drozer
          • Injections SQL (Android)
          • Path traversal (Android)
        • 🔬Outil Objection
        • 🪝Outil Frida
        • Outil Medusa / Mango
      • Bypass
        • 📲Contournement de détection d'emulateur
          • 📂Fichiers d'emulateurs
          • 🙋‍♂️Network Operator Name
        • 🦷Contournement des détections de rootage
          • 🧮Root management
          • 🗝️Clé de signature du noyau
          • 🧊Props dangereux
          • 🦸‍♂️Binaire "su"
          • ❌Permissions sur les repertoires
        • ☝️Contournement des protections biometriques
        • 📜SSL pinning bypass
        • Contournement de code PIN
      • 🔳Lecteur de code QR/EAN/Barres...
      • 💔Injection de backdoor
      • 🪧Task hijacking
      • 🎭Overlay attacks
        • Tapjacking
        • Invisible Keyboard
      • 📵Résilience
        • ⌨️Third Party Keyboards
        • ©️Allowed Copy/Paste on sensitive fields
        • 🛤️Background screen caching
        • 🖋️Schémas de signature
        • ⬆️In-App updates
      • 🤯Corruption de Mémoire
    • 🍏iOS
      • 🥅Méthodologie
      • 🧱Setup environnement (iOS)
      • ⏮️Reverse engineering (iOS)
      • 🏔️Analyse statique (iOS)
      • 🧿Contournement de détection de Jailbreak
      • 📌SSL pinning bypass (iOS)
      • 👇Contournement d'authentification biométrique
      • 🐛Contournement d'anti-Hooking/Debugging
      • 🙈Stockage de données non sécurisé (iOS)
        • 💭Mémoire (iOS)
        • 🏓Copy/Paste buffer caching (iOS)
        • 🍪Cookies (iOS)
        • 🗞️Logs (iOS)
        • ⌨️Cache du clavier (IOS)
        • Backup (IOS)
      • 📱Background screen caching
      • 🧑‍🚀WebView vulns (iOS)
      • Deeplinks vulns (iOS)
      • Lecteur de code QR
      • Firebase misc
  • 👷Pentest physique
    • 🔐Crochetage
    • 💳RFID
    • ⚙️Equipements
    • 💾Hardware Hacking
      • 📈UART
      • 🧪JTAG
      • ⚡SWD
      • 🪢SPI
      • 🚌I²C
      • 🔴Fault Injection
      • Side-Channel Attacks
    • 🐣Firmware hacking
  • 🖨️Pentest IoT
    • ⏪Replay de stream camera
    • 🗣️Assistants vocaux
    • 📹Camera IP
    • ⬇️DoS
    • 🖨️Imprimantes
    • 🎬Chromecast
  • 💀Hacking protocols
    • 😩Telnet - port 23
    • 🔐SSH - port 22
    • 📤FTP - port 21
    • ❔Whois - port 43
    • 👉DNS - port 53
    • 🐕‍🦺Kerberos - port 88
    • 💼SNMP - ports 161-162
    • 📨SMB - ports 445-139
    • 📧SMTP - ports 25-587
    • 🎦RTSP - port 554
    • 🔎MS-RPC - ports 135-593
    • ➕Rsync - port 873
    • 🔢MS-SQL - port 1433
    • 🏗️Docker - port 2375
    • 🔡MySQL - port 3306
    • 📝LDAP - ports 389, 636, 3268, 3269
    • 🖥️RDP - port 3389
    • ⌨️VNC - ports 5800,5801,5900,5901
  • 😈Ingénierie sociale
    • 🧠Concepts / Principes / Attaques
    • 🪧Ethique
    • 👤Profils comportementaux
  • 🔓Crack
  • 🛠️Autres outils utiles
    • 🚿Sandbox / Sanitizer
    • 🔤Générateurs de wordlists personnalisées
  • 🌜Post-Exploitation
    • 👔Énumération /Élévation de privilèges
      • 🐧Linux
        • CVE-2022-0847 (Dirty Pipe)
        • CVE 2021-4034 (PwnKit)
        • CVE 2021-3560 (Polkit)
      • 🪟Windows
        • 🖨️PrintNightmare
        • 🖨️SpoolFool
        • 🆔Usurpation de SAMAccountName
        • ⏲️Scheduled task/job (T1573.005)
        • 🐝HiveNightmare
        • 🔑Stored Credentials
        • 🎩SeImpersonatePrivilege
        • 🎒SeBackupPrivilege
        • 🍞Unquoted Service Path
        • 🧩DLL Hijacking
        • ©️SeBackupPrivilege
      • ⛴️Docker
    • 👻Effacement des traces
    • ⚓Persistance / Downloaders
    • 🛡️Defense evasion
    • 📦Exfiltration de Données
  • 🔎Forensic
    • 💡Méthodologie
    • 📺Live forensic
    • 💻Mémoire non volatile
    • 🕊️Mémoire volatile
    • 📄File forensic
Propulsé par GitBook
Sur cette page
  • Contournement d'authentification via signature non vérifiée
  • Contournement d'authentification via signature nulle
  • Brute force du secret
  • Contournement d'authentification via injection d'en-tête jwk
  • Contournement d'authentification via injection d'en-tête jku
  • Contournement d'authentification via manipulation de paramètre kid
  • Autres vecteurs d'attaque
  • Attaques par confusion d'algorithme

Cet article vous a-t-il été utile ?

  1. Pentest Web

JSON Web Token

JWT

Contournement d'authentification via signature non vérifiée

Etapes:

  • Surlignez le payload de votre JWT sur Burp

  • Dans Burp Inspector, changez la valeurs de votre nom d'utilisateur (exp: "username":"user123 => "username":"administrator")

  • Cliquez sur "apply changes"

  • Envoyez la requête

  • Constater que vous êtes connecté en temps que "administrator"

Contournement d'authentification via signature nulle

Etapes:

  • Surlignez le header de votre JWT sur Burp

  • Dans Burp Inspector, changer l'algorithme de chiffrement du token en "none" (exp: "alg":"RS256" => "alg":"none")

  • Cliquez sur "apply changes"

  • Surlignez le payload de votre JWT sur Burp

  • Dans Burp Inspector, changez la valeurs de votre nom d'utilisateur (exp: "username":"user123 => "username":"administrator")

  • Cliquez sur "apply changes"

  • Supprimez la signature (attention: gardez le "." à la fin du payload)

  • Envoyez la requête

  • Constater que vous êtes connecté en temps que "administrator"

Brute force du secret

Si le JWT utilise un chiffrement faible tel que HS256 il est possible de bruteforce le secret de la signature avec hashcat comme ceci:

$ hashcat -a 0 -m 16500 <jwt> <wordlist>

Une fois le secret trouvé, on peut alors générer de nouveaux token comme on le souhaite.

On peut utiliser l'extension JWT Editor de Burp Suite pour ce faire.

Ressource:

Contournement d'authentification via injection d'en-tête jwk

JWK (JSON Web Key) est un format standardisé permettant de représenter les clés sous forme d'objet JSON.

Prérequis: Extension JWT Editor de Burp Suite

Etapes:

  • Allez dans l'onglet d'extension JWT Editor Keys

  • Cliquez sur "New RSA key" > "Generate" > "OK"

  • Interceptez la requête voulu

  • Allez dans l'onglet "JSON Web Token"

  • Changez votre nom d'utilisateur par celui de votre cible dans le payload

  • Cliquez sur "Attack" > "Embedded JWK"

  • Sélectionnez la clé RSA précédemment générée puis lancez l'attaque

  • Remarquez qu'un paramètre "jwk" contenant votre clé a été ajouté au payload

  • Envoyez la requête et retournez sur votre navigateur

  • Remarquez que vous êtes maintenant connecté sur compte de votre cible

Contournement d'authentification via injection d'en-tête jku

JKU (JWK Set URL) est un URI qui fait référence à une ressource pour un ensemble de clés publiques encodées en JSON, dont l'une correspond à la clé utilisée pour signer numériquement le JWS (JSON Web Signature)

Prérequis: Extension JWT Editor de Burp Suite

Etapes:

  • Allez dans l'onglet d'extension JWT Editor Keys

  • Cliquez sur "New RSA key" > "Generate" > "OK"

  • Interceptez la requête voulu

  • Allez dans l'onglet "JSON Web Token"

  • Changez votre nom d'utilisateur par celui de votre cible dans le payload

  • Cliquez sur "Attack" > "Embedded JWK"

  • Sélectionnez la clé RSA précédemment générée puis lancez l'attaque

  • Remarquez qu'un paramètre "jwk" contenant votre clé a été ajouté au payload

  • Copier le contenu du paramètre "jwk" et supprimer le paramètre ainsi que son contenu

{
        "kty": "RSA",
        "e": "AQAB",
        "kid": "daf86875-f562-4b2d-9a62-0f13f8ed77d2",
        "n": "qCjZDCcGtvsnLxro6OxWapUxUIqO4NP0WKWAmOcNUn-VKr0C4sVnNjx9AkpREfDU9GhUuvLqjxQYjRt9JjE5dkOi3W43kwCHm-zbVaI2Bjt0_XpyBGi1INiD1lrNl9UWo5PykdwN3j_ByJ9tiDVgrHUmuLXV3THju7XluPlQ5B-c7nZQx0zqMqYnihFSKeUuZwIL0KIPAEwVZpCg0WBOgHIaSDybuuKw5sAUQ4W9SuVTNXZ1DEOB7fRAE6eidRPMxUNS9sAcOEWohhe3ZYCQO0tNVM5asn3YUQBMHlxsu317YydnM4AS82Y61eu7Vr-nnf-lIpTEco00U_LL9dcb4Q"
 }
  • Ecrivez votre exploit sur votre serveur d'attaque avec les données copiées

{
  "keys": [
    {
        "kty": "RSA",
        "e": "AQAB",
        "kid": "daf86875-f562-4b2d-9a62-0f13f8ed77d2",
        "n": "qCjZDCcGtvsnLxro6OxWapUxUIqO4NP0WKWAmOcNUn-VKr0C4sVnNjx9AkpREfDU9GhUuvLqjxQYjRt9JjE5dkOi3W43kwCHm-zbVaI2Bjt0_XpyBGi1INiD1lrNl9UWo5PykdwN3j_ByJ9tiDVgrHUmuLXV3THju7XluPlQ5B-c7nZQx0zqMqYnihFSKeUuZwIL0KIPAEwVZpCg0WBOgHIaSDybuuKw5sAUQ4W9SuVTNXZ1DEOB7fRAE6eidRPMxUNS9sAcOEWohhe3ZYCQO0tNVM5asn3YUQBMHlxsu317YydnM4AS82Y61eu7Vr-nnf-lIpTEco00U_LL9dcb4Q"
    }
  ]
}
  • Copiez l'URL vers votre exploit et l'ajouter dans le header du JWT dans un paramètre "jku"

  • Remplacer le "kid" par celui dans l'exploit

  • Remplacer votre nom d'utilisateur par celui de votre victime

  • Cliquez sur "Sign" et sélectionnez la clé RSA utilisée pour l'exploit

  • Vérifiez que l'option "Don't modify header" est cochée puis cliquez sur "OK"

Vous devriez à la fin avoir un JWT qui ressemble à ceci:

Header

{
    "kid": "daf86875-f562-4b2d-9a62-0f13f8ed77d2",
    "alg": "RS256"
    "jku": "https://evil.com/exploit"
}

Payload

{
    "username": "<target_username>",
    ...
}
  • Finalement, envoyez la requête et constatez que vous êtes connecté en tant que <target_username>

Contournement d'authentification via manipulation de paramètre kid

Prérequis: Extension JWT Editor de Burp Suite

Etapes:

  • Allez dans l'onglet JWK Editor Keys

  • Cliquez sur "New Symmetric Key" > "Generate"

  • Modifiez le paramètre "k" par un byte null encodé en base64 (signature nulle)

{
    "kty": "oct",
    "kid": "86d1d9cb-1284-48fa-b29f-bdeeba2a6814",
    "k": "AA=="
}
  • Interceptez la requête voulu

  • Allez dans l'onglet "JSON Web Token"

  • Remplacer le paramètre "kid" par un path traversal (vers dev/null afin d'ignorer le "kid"

Exemple:

{
    "kid": "../../../../../../../dev/null",
    "alg": "HS256"
}
  • Modifiez votre nom d'utilisateur par celui de votre cible

  • Cliquez sur "Sign", sélectionnez la clé symétrique généré précédemment, vérifiez que l'option "Don't modify" header est cochée puis cliquez sur "OK"

  • Finalement, envoyez la requête et constatez que vous êtes connecté au compte de votre cible

Notez que si le serveur stock ses clés de vérification dans une base de données, le paramètre "kid" peut potentiellement devenir un vecteur d'attaque par injection SQL

Autres vecteurs d'attaque

Attaques par confusion d'algorithme

Etapes généralement suivies:

  • Obtenir la clé publique du serveur

  • Convertir la clé dans un format approprié

  • Créer un JWT malveillant en manipulant le payload et en changeant l'algorithme de chiffrement en HS256

  • Signer le jeton en HS256 avec la clé publique comme secret

Les serveurs exposent parfois leurs clés publiques en tant qu'objets JSON Web Key (JWK) via un point de terminaison standard mappé sur /jwks.jsonou /.well-known/jwks.json, par exemple. Ceux-ci peuvent être stockés dans un tableau de JWK appelé keys. C'est ce qu'on appelle un ensemble JWK.

Pour que l'attaque fonctionne, la version de la clé que vous utilisez pour signer le JWT doit être identique à la copie locale du serveur. En plus d'être dans le même format, chaque octet doit correspondre, y compris tous les caractères non imprimables.

Exemple pour une clé au format X.509 PEM:

Etapes:

  • Trouvez la clé publique du serveur (via l'endpoint jwks.json par exemple)

  • Copiez l'objet jwk dans le tableau "keys"

{
    "kty":"RSA",
    "e":"AQAB",
    "use":"sig",
    "kid":"013acf5d-65af-4aa8-8527-898bac386146",
    "alg":"RS256",
    "n":"z5YvN4498LC-kwchA9Kzp60DOzIS3a3ckOKGE47YV9xPiw-msN5xeJHiG3-F-A9as_ioRFZGp4YZ7aCU5kGz_ILLPBq7ePKmvJ8-rCL2jtKHASG-sjL1qGE0ItgIbgNnhEGtHPDpc_Cd9c9OzzhM3VNNqRdVi5WRBttxBzAZj8iJASQTelOcLY4Ve6bIGg3qos-DUAqke5m9MVaxIPg8IzDy8HsWk2-olzTKB9y0xkIb-a3l9j62yIWu6qBT1ZzlFXLa0P4oOQi-LJ1MS-Z7k87VyltIQlbFCQUA67OBCfiQlhqsr_ibXkYJwAshSt0lMifXDGb2tt9K4AcOJhgsnQ"
}
  • Allez dans l'onglet "JWK Editor Keys"

  • Cliquez sur "New RSA Key" > Collez l'objet JWK dans le champ "Key"

  • Cliquez sur "OK" puis faites un clic droit sur la clé puis sélectionnez "Copy Public Key as PEM"

  • Allez dans l'onglet "Decoder" puis encodez la clé publique PEM en base64

  • Copiez le résultat puis retournez dans l'onglet "JWT Editor Key"

  • Cliquez sur "New Symmetric Key" > "Generate"

  • Echangez le contenu du paramètre "k" par la clé PEM encodé

  • Cliquez sur "OK"

  • Interceptez la requête voulu

  • Allez dans l'onglet "JSON Web Token"

  • Modifiez le paramètre "alg" du header en "HS256" si ce n'est pas déjà le cas

  • Echangez votre nom d'utilisateur par celui de votre cible

  • Signez votre JWT avec la clé symétrique générée précédemment (en vérifiant que l'option "Don't modify header" est cochée

  • Enfin, envoyez la requête et remarquez que vous êtes connecté au compte de votre cible

Dans le cas où il vous serait trop difficile de trouver la clé publique du serveur, il existe des outils permettant de la bruteforce.

PrécédentSAMLSuivantCSRF

Dernière mise à jour il y a 21 jours

Cet article vous a-t-il été utile ?

Le paramètre cty (Content Type) est parfois utilisé pour déclarer un type de média pour le contenu dans la charge utile JWT. Ceci est généralement omis de l'en-tête, mais la bibliothèque d'analyse sous-jacente peut le prendre en charge de toute façon. Si vous avez trouvé un moyen de contourner la vérification de signature, vous pouvez essayer d'injecter un en-tête cty pour changer le type de contenu en text/xmlou application/x-java-serialized-object, ce qui peut potentiellement activer de nouveaux vecteurs pour les attaques ou de.

x5c(Chaîne de certificats X.509) - Parfois utilisé pour transmettre le certificat de clé publique X.509 ou la chaîne de certificats de la clé utilisée pour signer numériquement le JWT. Ce paramètre d'en-tête peut être utilisé pour injecter des certificats auto-signés, similaires aux attaques par vue précédemment. Ressources:

ressource:

🌐
🗝️
https://portswigger.net/web-security/jwt/working-with-jwts-in-burp-suite#adding-new-signing-keys
XXE
désérialisation
https://talosintelligence.com/vulnerability_reports/TALOS-2017-0293
https://mbechler.github.io/2018/01/20/Java-CVE-2018-2633/
https://github.com/silentsignal/rsa_sign2n
injection d'en-tête jwk