


Comment effectuer un entraînement sur le stand avec l'injection LDAP bee-box
Si l'essence de l'injection SQL est d'épisser des chaînes, alors l'essence de tout ce qui peut être injecté est d'épisser des chaînes. L'injection LDAP ne fait pas exception en tant que type d'injection. Ce qui est plus intéressant, c'est qu'il s'agit d'épisser des parenthèses (injection SQL). Concatène également les parenthèses, mais il est plus conventionnel de dire qu'il concatène les chaînes).
Dans le chapitre sur la configuration de l'environnement, la configuration de l'environnement ldap dans bee-box a été discutée en détail. Le chapitre pratique du stand de tir porte davantage sur le processus de connexion entre php et ldap, l'introduction des fonctions spéciales utilisées dans le milieu, et quelques techniques pour épisser les parenthèses.
Parlons d'abord du processus de connexion du stand de tir LDAP dans bwapp :
Tout d'abord, il s'agit d'une interface de connexion LDAP. L'URL est http://192.168.3.184/bWAPP/ldap_connect.php. . Jetez un œil à ce php directement ce qui est écrit dans le fichier.
Explication détaillée de la fonction LDAP de connexion php
À partir du code 133 du fichier ldap_connect.php, les cinq variables sont $message, $login, $password, $server, $dn.
A quoi sert la première de ces cinq variables ? La seconde est le nom d'utilisateur pour se connecter au serveur LDAP, le troisième mot de passe, la quatrième adresse du serveur et le cinquième nom distinctif (décrit un chemin LDAP complet).
La première instruction if consiste à effacer le formulaire de connexion LDAP, et la seconde instruction if consiste à déterminer si les cinq variables sont nulles. Ce sont toutes des questions triviales. L'accent est mis sur else. déclarations if et else, faisons-les une par une.
Regardez d'abord les trois fonctions ldap_connect, ldap_set_option, ldap_bind avant le premier if, et expliquez tour à tour les fonctions de ces trois fonctions.
ldap_connect : utilisé pour se connecter à la base de données ldap, le format est le suivant
$server = « localhost »
$LDAPCONN=LDAP_Connect($server)
Si la valeur de retour de $LDAPCONN est de type numérique et que le le résultat renvoyé est 0, la connexion échoue. La connexion réussit avec d'autres valeurs.
ldap_set_option($link_identifier, $option, &$retval) : reçoit trois paramètres
$link_identifier
la fonction ldap_connect() renvoie l'identifiant de connexion LDAP (pour déterminer si la connexion LDAP est réussie)
$option peut accepter le valeur Comme suit :
LDAP_OPT_DEREF(int) : Comment gérer les alias lors de la recherche, la plage de valeurs est la suivante : LDAP_DEREF_NEVER(0, valeur par défaut), LDAP_DEREF_SEARCHING(1), LDAP_DEREF_FINDING(2), LDAP_DEREF_ALWAYS(3)
LDAP_OPT_NETWORK_TIMEOUT (int) : secondes d'expiration du réseau, LDAP_NO_LIMIT (0, valeur par défaut) signifie ne jamais expirer.
LDAP_OPT_PROTOCOL_VERSION(int) : Spécifiez la version du protocole LDAP utilisée, la plage de valeurs est la suivante : LDAP_VERSION2 (2, valeur par défaut), LDAP_VERSION3 (3).
LDAP_OPT_REFERRALS(bool) : Indique si la bibliothèque LDAP suit automatiquement les références renvoyées par le serveur LDAP. La plage de valeurs est la suivante : TRUE (1, valeur par défaut), FALSE (0).
&$retval est une variable qui accepte les valeurs d'option
Par exemple, le code dans bwapp :
ldap_set_option($ds,LDAP_OPT_PROTOCOL_VERSION, 3);
La signification de ce code est que si la connexion LDAP réussit, puis précisez LDAP. Le protocole utilisé est la version 3. (Pas besoin d'entrer dans les détails ici, ce sont tous des formats appliqués)
ldap_bind($link_identifier,$bind_rdn,$bind_password)
$link_identifier : l'identifiant de connexion LDAP renvoyé par la fonction ldap_connect() (pour déterminer si le LDAP la connexion est réussie)
$bind_rdn : Utilisez le rdn spécifié, c'est-à-dire le chemin de connexion, tel que cn=admin,dc=bwapp,dc=local
$bind_password : Spécifiez le mot de passe de connexion.
ldap_search($link_identifier, $dn,$filter) : fonction de recherche dans l'annuaire LDAP, renvoie avec succès le descripteur de ressource d'un ensemble de résultats, qui est généralement référencé par d'autres fonctions comme $result_identifier, et renvoie FALSE en cas d'échec.
$link_identifier : l'identifiant de connexion LDAP renvoyé par la fonction ldap_connect() (pour déterminer si la connexion est réussie)
$dn : le DN de l'annuaire dans lequel rechercher
$filter : filtre de recherche. Par exemple, "(objectClass=*)" signifie rechercher toutes les entrées (pour la fonction de lecture, cela signifie tous les attributs).
Code source dans bwapp : ldap_search($ds, $dn,$filter), où $ds=ldap_connect(),
$dn=”DC=bwapp,DC=local”,$filter=(cn=*) (C'est-à-dire cn dans toutes les plages), ces trois paramètres indiquent que la fonction ldap_search indique que tous les répertoires du serveur actuel sont interrogés (par rapport à bwapp).
ldap_count_entries($link_identifier,$search) : Renvoie le nombre de résultats de requête
$link_identifier : L'identifiant de connexion LDAP renvoyé par la fonction dap_connect() (pour déterminer si la connexion est réussie)
$search: = ldap_search( $link_identifier, $ dn, $filter) renvoie le jeu de résultats de la requête.
À ce stade, la fonction a presque été analysée. Décrivons l'idée générale de ce fichier de connexion.
De la ligne 149 à la ligne 163, le code détermine si les différentes valeurs obtenues sont vides. Si elles sont vides, un message d'invite est lancé.
Les lignes 165 à 198 sont utilisées pour déterminer si la connexion a réussi. Les lignes 165 à 184 sont utilisées pour déterminer si le service ldap existe. Les lignes 187 à 198 sont utilisées pour déterminer s'il existe un nom distinctif (équivalent au. nom de la base de données).
De la ligne 200 à la ligne 236 consiste à déterminer si le dn correspondant existe, c'est-à-dire si le chemin ldap correspondant existe. S'il n'existe pas, le message d'invite correspondant sera lancé. S'il existe, appelez ldapi. .php, c'est-à-dire la requête ldap. Après avoir obtenu les résultats de la requête dans ldapi, les résultats sont affichés sous forme de tableau.
Introduction au fichier php des résultats de requête LDAP
L'endroit où le tableau est généré se trouve dans le fichier ldapi.php. Ensuite, regardez le code dans ldapi.php.
Commencez directement à partir de la ligne 231. De la ligne 231 à la ligne 240, comme mentionné ci-dessus, liez le répertoire LDAP. Si vous ne comprenez pas, vous pouvez lire la partie de liaison LDAP ci-dessus
. Si l'annuaire LDAP est lié avec succès, lancez la requête. Le code de requête commence à partir de la ligne 242
De la réception de la valeur du paramètre POST user à l'établissement d'un alias ($search_field_1, $search_field_2, $search_field_3), la réglementation Filtre ($filter) (un filtre est une instruction de requête, similaire à une instruction SQL), les règles de syntaxe sont les suivantes :
Operator | Character | Purpose |
---|---|---|
Signe égal | = | Créez un filtre qui nécessite qu'un certain champ ait une valeur donnée. |
Any | * | représente un champ qui peut être égal à n'importe quelle valeur sauf NULL. |
Parenthèses | ( ) | Filtres séparés pour permettre à d'autres opérateurs logiques de fonctionner. |
Combinez les filtres avec | & | . Toutes les conditions de la série correspondante doivent être vraies. |
ou | | | Combinez les filtres. Au moins une condition de la série correspondante doit être vraie. |
Non | ! | Excluez tout ce qui correspond aux critères de filtre. |
Renvoyer tous les objets pouvant causer des problèmes de chargement :
objectClass=*
Renvoyer tous les objets utilisateur spécifiés comme "personne" :
# 🎜🎜# (&(objectClass=user)(objectCategory=person)) Retourner la liste de diffusion uniquement : (objectCategory=group) Retourner uniquement public dossiers : (objectCategory=publicfolder)Renvoyer tous les objets utilisateur, mais exclure les objets utilisateur dont l'adresse e-mail principale commence par "test" : #🎜 🎜#(&(&(objectClass=user)(objectCategory=person))(!(mail=test*)))
Renvoie tous les objets utilisateur mais exclut l'adresse e-mail principale. Objets utilisateur se terminant par "test" :
(&(&(objectClass=user)(objectCategory=person))(!(mail=*test)))
Renvoie tous les objets utilisateur, mais exclut l'utilisateur objets qui contiennent le mot « test » dans leur adresse e-mail principale :
(&(&(objectClass=user)(objectCategory=person))(!(mail= *test*)))#🎜 🎜#
Renvoie tous les objets utilisateur et objets alias spécifiés comme "personne" et appartenant à un groupe ou une liste de distribution : (| (&(objectClass=user)(objectCategory=person)) (objectCategory=group))Renvoie tous les objets utilisateur spécifiés comme "personne", tous les objets de groupe et tous les contacts, mais exclut les objets avec toute valeur définie comme "extensionAttribute9":#🎜 🎜#(&(|(|((&(objectClass=user)(objectCategory=person))(objectCategory=group))(objectClass=contact) )(!(extensionAttribute9=*)))
#🎜🎜 #Renvoie tous les utilisateurs DN (CN=GRoup,OU=Users,DC=Domain,DC) identifiés comme membres du groupe :#🎜 🎜#(&(objectClass=user)(objectCategory=person)(memberof=CN= Group,CN=Users,DC=Domain,DC=com))
Renvoyer tous les utilisateurs :
Microsoft®Active Directory® Serveur LDAP : (&(objectCategory=person) (objectClass=user))
Serveur OpenLDAP™ : (objectClass=inetOrgPerson)
Serveur LDAP IBM® Notes®Domino : (objectClass=dominoPerson)
#🎜 🎜# Recherchez dans IBM Notes Domino LDAP tous les objets dont l'adresse e-mail est définie comme « personne » ou « groupe » :#🎜 🎜#(&(|(objectClass=dominoPerson)(objectClass=dominoGroup)(objectClass=dominoServerMailInDatabase ))(mail=*))
ActiveDirectory : renvoie tous les utilisateurs valides (non désactivés) avec des adresses e-mail ) Utilisateur :
(&(objectCategory=person)(objectClass= user)(mail=*)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
Renvoie tous les utilisateurs identifiés par le DN du groupe en tant que membres du Groupe_1 ou du Groupe_2.
(&(objectClass=user)(objectCategory=person)(|(memberof=CN=Group_1,cn=Users,DC=Domain,DC=com)(memberof=CN=Group_2,cn= Users,DC=Domain,DC=com)))
Renvoie tous les utilisateurs dont la valeur extensionAttribute1 est "Ingénierie" ou "Ventes"
(&(objectCategory=user)( |(extensionAttribute1=Engineering)(extensionAttribute1=Sales)))
Les règles de syntaxe sont introduites, puis le code à partir de 267 est analysé
#🎜 🎜## 🎜🎜#$ldap_fields_to_find définit un tableau pour faciliter l'impression et la sortie des tableaux et la réception des résultats des requêtes ldap. Utilisez $ldap_fields_to_find comme quatrième paramètre de la fonction ldap_search, indiquant que cet alias est utilisé pour enregistrer le. résultats reçus, c'est-à-dire le formulaire de paire clé-valeur, puis renvoyez le résultat au tableau $info, et enfin mappez chaque clé à chaque variable de la ligne 287 à la ligne 291, et enfin bouclez la sortie et imprimez le tableau à ce stade, la requête est terminée.
Une brève introduction à la syntaxe d'épissage par injection LDAP
Étant donné que les filtres LDAP sont similaires aux instructions de requête SQL, regardez simplement comment écrire des filtres dans bwapp. Regardez directement la variable $filter dans le fichier ldapi.php :
$filter="(|($search_field_1=$search_for)($search_field_2=$search_for)($search_field_3=$search_for)) ";
L'essence de l'instruction sql réside dans l'épissage des guillemets simples, et l'essence de l'instruction ldap réside dans l'épissage des parenthèses.
Maintenant, je veux interroger tous les utilisateurs, entrez simplement * directement dans l'utilisateur, puis $filter deviendra $filter="(|($search_field_1=*)($search_field_2=*) ($search_field_3= *))";
Regardez les résultats dans bwapp
J'ai renvoyé beaucoup d'utilisateurs mais pas assez, depuis que je je veux voir mes administrateurs, alors je vais construire un filtre LDAP comme celui-ci. $filter="(|($search_field_1=*)(objectclass=*)($search_field_2=*)($search_field_3=*))";Par ici I Vous pouvez interroger tous les utilisateurs, y compris les administrateurs. objectclass=* signifie effectuer une recherche tant qu'elle existe, c'est-à-dire globalement. Puis entrez *)(objectclass=* at user)Regardez le résultat, l'administrateur apparaît, l'injection est réussie
#. 🎜 🎜#
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

1. Injection LDAP LDAP (Light Directory Access Portocol) est un protocole d'accès aux annuaires léger basé sur la norme X.500. Il fournit des services et des protocoles pour accéder aux bases de données d'annuaire. Il est souvent utilisé pour former des services d'annuaire avec des bases de données d'annuaire. Le répertoire est une base de données distribuée professionnelle optimisée pour les requêtes, la navigation et la recherche. Il organise les données dans une structure arborescente, similaire au répertoire de fichiers des systèmes Linux/Unix. Les données qui ne sont pas fréquemment modifiées, telles que les certificats publics, les clés de sécurité et les informations sur les appareils physiques de l'entreprise, peuvent être stockées dans l'annuaire. LDAP peut être compris comme un protocole de recherche similaire à SQL et doté d'une syntaxe de requête, mais qui présente également un risque d'attaques par injection. L'injection LDAP fait référence au client

Si l'essence de l'injection SQL est d'épisser des chaînes, alors l'essence de tout ce qui peut être injecté est d'épisser des chaînes. L'injection LDAP ne fait pas exception en tant que type d'injection. Ce qui est plus intéressant, c'est qu'il s'agit d'épisser des parenthèses (l'injection SQL l'est). concatène également les parenthèses, mais il est plus conventionnel de dire qu'il concatène les chaînes). Dans le chapitre sur la configuration de l'environnement, la configuration de l'environnement ldap dans bee-box a été discutée en détail. Le chapitre pratique sur le stand de tir porte davantage sur le processus de connexion entre php et ldap, l'introduction des fonctions spéciales utilisées au milieu et quelques techniques pour épisser les parenthèses. Parlons d'abord du processus de connexion du stand de tir LDAP dans bwapp : Tout d'abord, il s'agit d'une interface de connexion LDAP, l'URL est http://192.168.3.184/bW

1. Présentation Selon mon processus d'apprentissage, je dois connaître le modèle et la vulnérabilité de mon attaque Web. La première fois que j'ai vu LDAP, c'était lors d'un test d'intrusion dans une entreprise publique. j’en ai trouvé un impopulaire (autorisé) et j’ai piqué mon intérêt pour celui-ci. Le concept de LDAP : nom complet : Lightweight Directory Access Protocol (Lightweight Directory Access Protocol), caractéristiques : je ne parlerai pas du protocole, c'est trop ésotérique, on peut le comprendre comme une base de données pour stocker des données, sa particularité est que c'est un arbre Une base de données en forme de

Lors du développement d'applications Web à l'aide de PHP, nous devons souvent utiliser l'authentification LDAP pour protéger l'accès aux applications. Cependant, dans certains cas, lorsque nous essayons d'utiliser la fonctionnalité LDAP de PHP pour implémenter l'authentification, nous pouvons rencontrer le message d'erreur suivant : "PHPFatalerror:Calltoundefinedfunctionldap_bind()". Ce message d'erreur se produit généralement lorsqu'une application appelle la fonction ldap_bind()

Avec l’augmentation des vulnérabilités de sécurité des réseaux, les attaques par injection LDAP sont devenues un risque de sécurité auquel sont confrontés de nombreux sites Web. Afin de protéger la sécurité du site Web et de prévenir les attaques par injection LDAP, certaines mesures de sécurité doivent être utilisées. Parmi eux, Nginx, en tant que serveur Web hautes performances et serveur proxy inverse, peut nous offrir beaucoup de commodité et de protection. Cet article explique comment utiliser Nginx pour empêcher les attaques par injection LDAP. Attaque par injection LDAP L'attaque par injection LDAP est une méthode d'attaque ciblant la base de données LDAP.

LDAP (LightweightDirectoryAccessProtocol) est un protocole permettant d'accéder aux services d'annuaire distribués. Il peut être utilisé pour des tâches telles que l'authentification des utilisateurs, l'autorisation, la maintenance des comptes et le stockage des données. Dans les applications PHP, LDAP peut être utilisé comme un puissant mécanisme d'authentification pour fournir de puissantes fonctions d'authentification et d'autorisation aux applications. Cet article explique comment utiliser LDAP pour l'authentification des utilisateurs en PHP. Le contenu spécifique comprend : Installation et configuration.

Alors que les problèmes de sécurité des réseaux reçoivent de plus en plus d’attention, de plus en plus de programmeurs commencent à y prêter attention et à apprendre comment empêcher le code d’être attaqué. Parmi elles, les méthodes d'attaque courantes incluent l'injection SQL, XSS, CSRF, etc. Cependant, il existe une autre méthode d’attaque courante qui est sous-estimée : les vulnérabilités par injection LDAP. Cet article présentera le principe de cette méthode d'attaque et comment utiliser PHP pour prévenir les vulnérabilités d'injection LDAP. Introduction à LDAP LDAP (LightweightDirectoryAccessProtocol)

À mesure que l’échelle de l’entreprise et ses besoins commerciaux continuent de croître, la gestion et l’autorisation des groupes d’utilisateurs sont devenues un élément essentiel. LDAP (Lightweight Directory Access Protocol), en tant que protocole de service d'annuaire largement utilisé dans les réseaux d'entreprise, constitue un moyen efficace de mettre en œuvre la gestion et l'autorisation des groupes d'utilisateurs. Cet article explique comment utiliser PHP et LDAP pour implémenter la gestion et l'autorisation des groupes d'utilisateurs. 1. Qu'est-ce que LDAP LDAP est un protocole d'accès à l'annuaire léger largement utilisé comme protocole de service d'annuaire dans les réseaux d'entreprise. LDAP est basé sur client/serveur
