Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
LDAPPER — Requêtes LDAP sans prise de tête | Kitploit
Outils/GitHubGitHub/shellster/ldapper
Escalade de PrivilègesReconnaissanceAttaques de Mots de PasseCollecte d'InformationsTests d'IntrusionAuthentification
GitHubshellster/ldapper

LDAPPER

Requêtes LDAP sans prise de tête

Voir le dépôt
11417il y a 1 anVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Introduction

Cet outil a été écrit pour résoudre bon nombre des problèmes que je rencontrais avec ldapsearch et l'interaction avec AD en général. En particulier, cet outil aborde les problèmes suivants que j'ai rencontrés :

  1. Impossibilité de retourner plus d'un millier de résultats depuis AD. Cet outil prend en charge la pagination des enregistrements LDAP et contourne d'autres bugs d'AD pour permettre la récupération d'un nombre arbitraire d'enregistrements.

  2. Impossibilité d'utiliser les identifiants NTLM de manière intuitive pour s'authentifier. Vous pouvez fournir le nom de domaine NETBIOS, le nom d'utilisateur et le mot de passe pour vous authentifier auprès d'un contrôleur de domaine Windows.

  3. Impossibilité de contrôler précisément le nombre d'enregistrements retournés, la vitesse à laquelle ils sont retournés et le nombre d'enregistrements récupérés à la fois. Cet outil vous permet de contrôler tous ces éléments, y compris l'ajout de délais entre chaque appel paginé. De plus, plusieurs DC peuvent être spécifiés pour des requêtes en round-robin.

  4. Impossibilité de retourner les résultats sous des formes facilement assimilables. Cet outil supporte actuellement trois formats :

  • plain : Une version texte agréable et lisible des données avec des sous-éléments indentés.
  • json : Sortie JSON, avec des espaces supplémentaires pour une lisibilité facile.
  • json_tiny : Sortie JSON avec tous les espaces superflus supprimés.
  1. Impossibilité de retourner uniquement les attributs qui vous intéressent. Cet outil vous permet soit de retourner tous les attributs, soit de retourner uniquement ceux que vous voulez.

  2. Impossibilité d'avoir une liste de requêtes pré-établies et couramment utilisées sauvegardées.

Installation

root@kitploit:~
git clone ...
pip install -r requirements.txt

Instructions

root@kitploit:~
# python3 ldapper.py
    usage: ldapper.py [-h] --domain DOMAIN --user USER --password PASSWORD
                      --server SERVER [--basedn BASEDN] --search SEARCH
                      [--maxrecords MAXRECORDS] [--pagesize PAGESIZE]
                      [--delay DELAY] [--format {plain,json,json_tiny}]
                      [--encryption {1,2,3}]
                      [--advanced [ADVANCED [ADVANCED ...]]] [--outfile OUTFILE]
                      [--engine {ldap3,impacket}]
                      [attribute [attribute ...]]

    Recherche en ligne de commande AD LDAP qui n'est pas nulle.

    positional arguments:
      attribute             Attributs à retourner (par défaut tous pour une requête personnalisée. Pour les requêtes pré-définies, passez "*" pour obtenir tous les attributs au lieu de ceux par défaut.)

    optional arguments:
      -h, --help            affiche ce message d'aide et quitte
      --domain DOMAIN, -D DOMAIN
                            Domaine
      --user USER, -U USER  Nom d'utilisateur
      --password PASSWORD, -P PASSWORD
                            Mot de passe ou hash au format LM:NTLM
      --server SERVER, -S SERVER
                            IP du DC ou nom résoluble
      --basedn BASEDN, -b BASEDN
                            Le DN de base doit généralement être "dc=", suivi du nom de domaine long avec les points remplacés par ",dc=". Tentera de le dériver du serveur LDAP s'il n'est pas fourni.
      --search SEARCH, -s SEARCH
                            Chaîne de recherche LDAP ou nombre indiquant une recherche personnalisée depuis la liste « Recherches personnalisées ». Utilisez « - » pour lire depuis l'entrée standard.
      --maxrecords MAXRECORDS, -m MAXRECORDS
                            Nombre maximal d'enregistrements à retourner (par défaut 100), 0 signifie tous.
      --pagesize PAGESIZE, -p PAGESIZE
                            Nombre d'enregistrements à retourner à chaque extraction (par défaut 10). Doit être <= max records.
      --delay DELAY, -d DELAY
                            Délai en millisecondes entre les requêtes de pagination (par défaut 0).
      --format {plain,json,json_tiny}, -f {plain,json,json_tiny}
                            Format de sortie (par défaut « plain »), peut être : plain, json, json_tiny
      --encryption {1,2,3}, -n {1,2,3}
                            3) Connexion au port 636 TLS (par défaut) ; 2) Connexion au port 389 sans TLS, mais tentative STARTTLS et repli si nécessaire (pas disponible avec impacket) ; 1) Connexion au port 389, texte clair forcé
      --advanced [ADVANCED [ADVANCED ...]], -a [ADVANCED [ADVANCED ...]]
                            Manière avancée de passer des options pour les recherches pré-définies qui demandent une saisie supplémentaire (pour plusieurs invites, passez les arguments dans l'ordre des invites)
      --outfile OUTFILE, -o OUTFILE
                            Fichier de sortie (si spécifié, la sortie sera redirigée ici au lieu de stdout [Peut éviter les erreurs d'encodage sous Windows])
      --engine {ldap3,impacket}, -e {ldap3,impacket}
                            Choisir le moteur à utiliser (par défaut « ldap3 »). VOIR LES NOTES OPSEC !

    Recherches personnalisées :
              1) Obtenir tous les utilisateurs
                      1.1) Obtenir un utilisateur spécifique (Vous serez invité à saisir le nom d'utilisateur)
              2) Obtenir tous les groupes (et leurs membres)
                      2.1) Obtenir un groupe spécifique (Vous serez invité à saisir le nom du groupe)
              3) Obtenir toutes les imprimantes
              4) Obtenir tous les ordinateurs
                      4.1) Obtenir un ordinateur spécifique (Vous serez invité à saisir le nom de l'ordinateur)
              5) Obtenir les administrateurs du domaine/entreprise
              6) Obtenir les approbations de domaine
              7) Rechercher les délégations SPN non contraintes (Élévation potentielle de privilèges)
              8) Rechercher les comptes où la pré-authentification n'est pas requise. (ASREPROAST)
              9) Rechercher les SPN utilisateur (KERBEROAST)
                      9.1) Rechercher un SPN utilisateur spécifique (Vous serez invité à saisir le User Principal Name)
             10) Afficher tous les mots de passe LAPS LA (que vous pouvez voir)
                     10.1) Rechercher un mot de passe LAPS de poste de travail spécifique (Vous serez invité à saisir le nom du poste de travail)
            *11) Rechercher les attributs de mot de passe en texte clair courants (UserPassword, UnixUserPassword, unicodePwd et msSFU30Password)
             12) Afficher toutes les graines double facteur Quest (si vous y avez accès)
             13) Hachage de mot de passe SSO Oracle « orclCommonAttribute »
            *14) Hachage de mot de passe SSO Oracle « userPassword »
             15) Obtenir les serveurs SCCM
             16) Rechercher les comptes où le mot de passe n'est pas requis. (PasswordNotRequired)

    Les éléments marqués d'un astérisque n'ont jamais été testés dans un environnement où ils pouvaient être vérifiés, donc veuillez me faire savoir s'ils fonctionnent.

Exemple

Pour les besoins de ces exemples, supposons ce qui suit :

root@kitploit:~
NETBIOS NAME: EMP
NOM DE DOMAINE COMPLET : EXAMPLE.LOCAL
IP des DC : 10.0.0.2, 10.0.0.3
NOM D'UTILISATEUR : bob
MOT DE PASSE : password

Récupérer tous les enregistrements en ne retournant que l'attribut cn :

root@kitploit:~
python ldapper.py -D 'EMP' -U 'bob' -P 'password' -S '10.0.0.2,10.0.0.3' -m 0  -s '(cn=*)' cn

Récupérer les détails d'un utilisateur spécifique (vous serez invité à saisir le nom d'utilisateur) :

root@kitploit:~
python ldapper.py -D 'EMP' -U 'bob' -P 'password' -S '10.0.0.2,10.0.0.3' -m 0  -s '1.1'

Récupérer les détails d'un utilisateur spécifique (passer le nom d'utilisateur pour ne pas être invité) :

root@kitploit:~
python ldapper.py -D 'EMP' -U 'bob' -P 'password' -S '10.0.0.2,10.0.0.3' -m 0  -s '1.1' -a 'alice'

Récupérer les 100 premiers SPN Kerberos utilisateur, pas plus de cinq à la fois, avec deux secondes entre chaque demande de page au format JSON compact :

root@kitploit:~
python ldapper.py -D 'EMP' -U 'bob' -P 'password' -S '10.0.0.2,10.0.0.3' -m 100 -p 5 -d 2000 -f json_tiny -s '(&(objectcategory=user)(serviceprincipalname=*))' serviceprincipalname userprincipalname

Récupérer manuellement tous les enregistrements pour les imprimantes et afficher tous les attributs associés :

root@kitploit:~
python ldapper.py -D 'EMP' -U 'bob' -P 'password' -S '10.0.0.2,10.0.0.3' -m 0  -s '(objectClass=printQueue)'

Rechercher les délégations SPN non contraintes sans effort :

root@kitploit:~
python ldapper.py -D 'EMP' -U 'bob' -P 'password' -S '10.0.0.2,10.0.0.3' -m 0  -s 4

Avertissements OPSEC

  1. Lors de l'utilisation du moteur Impacket sans fournir de baseDN, l'outil tentera une authentification SMB et une connexion au contrôleur de domaine pour acquérir le nom NETBIOS du domaine, afin d'en déduire le baseDN. Ce comportement peut entraîner une détection dans un environnement hautement sensible. Soit n'utilisez pas Impacket dans un tel environnement, soit spécifiez toujours le baseDN.

  2. Impacket effectuera soit une connexion LDAPS complète, soit une connexion entièrement non chiffrée. Il ne peut pas utiliser STARTTLS pour le moment, donc si une connexion LDAP en texte clair risque d'être détectée, soit tentez uniquement une connexion TLS complète, soit n'utilisez pas le moteur Impacket.

  3. Impacket n'offre pas le meilleur contrôle sur la vitesse de récupération des enregistrements. Par conséquent, l'option « --delay » n'est que partiellement implémentée. Si le délai de récupération des enregistrements est critique, n'utilisez pas le moteur Impacket.

Références

Kerberoast : https://adsecurity.org/?p=2293

ASREPRoast : http://www.harmj0y.net/blog/activedirectory/roasting-as-reps/

Abus de délégation non contrainte : http://www.harmj0y.net/blog/activedirectory/the-most-dangerous-user-right-you-probably-have-never-heard-of/

Oracle absurde : https://blogs.oracle.com/mwilcox/entry/clarifying_ovd-ad_eus_password et http://onlineappsdba.com/index.php/2014/03/03/what-hashing-algorithm-oid-uses-to-store-user-password-ssha-or-md5/

Données de jeton second facteur Qwest/Defender/Oneidentity : http://support-public.cfm.quest.com/43565_Defender_5.9_AdminGuide.pdf

Mots de passe en texte clair courants : https://www.blackhillsinfosec.com/domain-goodness-learned-love-ad-explorer/

Journal des modifications

Version 1.7

  1. Vérifier les comptes qui n'ont pas besoin de mot de passe, grâce à @nyxgeek.

Version 1.6

  1. Ajout d'Impacket comme alternative à LDAP3 car LDAP3 ne fonctionne pas toujours (et Impacket non plus).

  2. Suppression de la sélection multiple de serveurs LDAP car cette fonctionnalité n'est pas vraiment nécessaire et n'existe pas vraiment dans Impacket.

  3. Tout a été refactorisé.

Version 1.5

  1. Correction d'un bug mineur de pagination qui pouvait empêcher le retour de certains enregistrements.

Version 1.4

  1. Ajout de la fonctionnalité de recherche SCCM.

  2. Ajout de l'option de fichier de sortie.

  3. Correction de quelques problèmes de format de sortie.

Version 1.3

  1. Ajout de la possibilité de recevoir la requête LDAP depuis l'entrée standard.

  2. Encadrement automatique de la requête entre parenthèses si l'utilisateur ne l'a pas déjà fait.

  3. Correction d'un bug de support Python 2.

Projets futurs

Si vous avez des énumérations de recherche courantes que vous utilisez, faites-le moi savoir afin que je puisse les ajouter à la liste.

  1. Peut-être créer un chercheur/analyseur hors ligne des données précédemment récupérées ?

...

Crédit et Contact

Écrit par Shelby Spencer (shellster). Contactez-moi pour les bugs ou les demandes de fonctionnalités.

Télécharger l’outil