cyber:vulnerabilite:ldap_injection
Différences
Ci-dessous, les différences entre deux révisions de la page.
cyber:vulnerabilite:ldap_injection [2025/08/04 15:27] – créée admin | cyber:vulnerabilite:ldap_injection [2025/08/04 15:35] (Version actuelle) – admin | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== LDAP - Injection ====== | ====== LDAP - Injection ====== | ||
+ | ===== Description ===== | ||
+ | |||
+ | **Les injections LDAP sont une forme d' | ||
+ | |||
+ | **LDAP (Lightweight Directory Access Protocol)** est un protocole utilisé pour interroger une base d' | ||
+ | |||
+ | De la même manière qu'il est parfois possible d' | ||
+ | |||
+ | Les principales différences entre les requêtes LDAP et SQL sont les suivantes : | ||
+ | * **La syntaxe** : les requêtes LDAP et SQL utilisent une syntaxe différente pour interroger leurs sources de données respectives ; | ||
+ | * **Le type de source de données** : LDAP est généralement utilisé pour interroger des annuaires de services, tandis que SQL est utilisé pour interroger des bases de données relationnelles ; | ||
+ | * **Les données renvoyées** : les requêtes LDAP renvoient des objets qui représentent des entités dans l' | ||
+ | * **Les opérations possibles** : LDAP est principalement utilisé pour la recherche et la récupération de données, tandis que SQL permet également la modification et la suppression de données. | ||
+ | |||
+ | ===== Pré-requis d' | ||
+ | |||
+ | Pour exploiter cette vulnérabilité, | ||
+ | |||
+ | ==== Connaissances nécessaires ==== | ||
+ | * Connaissance approfondie du protocole LDAP. | ||
+ | |||
+ | ==== Outils nécessaires ==== | ||
+ | * Utilisation d’outils de type Burp Suite ou curl pour la création/ | ||
+ | * Outils de fuzzing avec des wordlists spécialisées aux requêtes LDAP. | ||
+ | |||
+ | ===== Flux d' | ||
+ | |||
+ | ==== Explorer ==== | ||
+ | |||
+ | Naviguer sur l’application pour identifier les points d' | ||
+ | |||
+ | ==== Expérimenter ==== | ||
+ | |||
+ | Envoyer des requêtes LDAP pour tenter de schématiser la structure de l' | ||
+ | |||
+ | ==== Exploiter ==== | ||
+ | |||
+ | ===== Conséquences potentielles ===== | ||
+ | |||
+ | Une exploitation réussie de ce type de vulnérabilité peut permettre : | ||
+ | * L' | ||
+ | * La modification ou la suppression des informations dans l' | ||
+ | * La création de nouvelles entrées dans l' | ||
+ | |||
+ | ===== Contre-mesures ===== | ||
+ | |||
+ | Les contre-mesures suivantes peuvent être mises en œuvre : | ||
+ | * Filtrer les entrées de l' | ||
+ | * Utiliser des mots de passe forts et uniques pour chaque compte d' | ||
+ | * Configurer les pare-feux et autres dispositifs de sécurité pour bloquer les connexions non autorisées à l' | ||
+ | * Appliquer des contrôles d' | ||
+ | |||
+ | ====== Comment cela fonctionne ====== | ||
+ | Les scénarios suivants peuvent être joués via l’exploitation de cette vulnérabilité : | ||
+ | * Un attaquant utilise une injection LDAP pour accéder à des informations sensibles, telles que les mots de passe et les détails de connexion d'un utilisateur ; | ||
+ | * Un attaquant utilise une injection LDAP pour modifier ou supprimer des informations dans l' | ||
+ | |||
+ | ===== Exemple 1 ===== | ||
+ | |||
+ | Voici l' | ||
+ | |||
+ | <code python> | ||
+ | import ldap | ||
+ | |||
+ | # Connexion au serveur LDAP | ||
+ | ldap_conn = ldap.initialize(" | ||
+ | |||
+ | # Recherche d' | ||
+ | search_filter = " | ||
+ | result = ldap_conn.search_s(" | ||
+ | |||
+ | # Affichage des résultats | ||
+ | for dn, entry in result: | ||
+ | print(entry) | ||
+ | |||
+ | # Fermeture de la connexion | ||
+ | ldap_conn.unbind() | ||
+ | </ | ||
+ | |||
+ | La variable user_input est utilisée pour construire le filtre de recherche LDAP. Si un utilisateur malveillant fournit une entrée malicieuse dans cette variable, il peut alors être en mesure de lister tous les utilisateurs de l' | ||
+ | |||
+ | ===== Exemple 2 ===== | ||
+ | |||
+ | Voici un code vulnérable qui effectue une authentification via un annuaire LDAP : | ||
+ | |||
+ | <code php> | ||
+ | $ldap_server = " | ||
+ | $ldap_dn = " | ||
+ | $username = $_POST[' | ||
+ | $password = $_POST[' | ||
+ | |||
+ | $ldap_conn = ldap_connect($ldap_server); | ||
+ | ldap_set_option($ldap_conn, | ||
+ | |||
+ | $bind = ldap_bind($ldap_conn, | ||
+ | $filter = " | ||
+ | $search = ldap_search($ldap_conn, | ||
+ | |||
+ | $entries = ldap_get_entries($ldap_conn, | ||
+ | </ | ||
+ | |||
+ | Dans le cas ou un utilisateur s' | ||
+ | |||
+ | <code php> | ||
+ | (& | ||
+ | </ | ||
+ | |||
+ | Si un utilisateur malveillant insère le payload " | ||
+ | |||
+ | <code php> | ||
+ | (& | ||
+ | </ | ||
+ | |||
+ | L' | ||
+ | |||
+ | ===== Exemple 3 ===== | ||
+ | |||
+ | Voici un exemple de requête LDAP pour rechercher tous les utilisateurs d'un domaine avec un nom de famille spécifique : | ||
+ | |||
+ | <code php> | ||
+ | (& | ||
+ | </ | ||
+ | |||
+ | Cela renverra tous les utilisateurs dont le nom de famille est " | ||
+ | |||
+ | En comparaison, | ||
+ | |||
+ | <code sql> | ||
+ | SELECT * FROM users WHERE last_name = ' | ||
+ | </ | ||
+ | |||
+ | ====== CWEs ====== | ||
+ | |||
+ | * [[https:// | ||
+ | * The software prepares a structured message for communication with another component, but encoding or escaping of the data is either missing or done incorrectly. As a result, the intended structure of the message is not preserved. | ||
+ | |||
+ | * [[https:// | ||
+ | * The software constructs all or part of an LDAP query using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the intended LDAP query when it is sent to a downstream component. | ||
+ | |||
+ | ====== References ====== | ||
+ | |||
+ | URL : | ||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | ====== Retour fiches vulnérabilités ====== | ||
+ | * [[cyber: | ||
+ | |||
+ | |||
cyber/vulnerabilite/ldap_injection.txt · Dernière modification : 2025/08/04 15:35 de admin