writeup

404 CTF - Write-Up : L'Annuaire des Illustres Scientifiques (LDAP)

22/05/2026 Mis à jour le 08/06/2026

Présentation du Défi

L'objectif de ce défi est d'explorer un annuaire LDAP afin de dénicher une information confidentielle dissimulée dans les attributs d'un objet. La cible est identifiée par l'adresse IP 10.0.10.56.

Étape 1 : Connexion au Réseau et Phase d'Énumération Initiale

Générer un clé API pour l'utiliser par la suite afin de pouvoir télécharger le certificat VPN par la suite.

clé API pour accès vpn

régle ctf

Téléchager clé vpn

Après activation du tunnel VPN fourni par la plateforme du challenge.

une première vérification de la connectivité brute est effectuée :

ping -c 3 10.0.10.56

PS Vous pourrez pinger l'IP mais vous n'aurez plus accès à Internet car vous serez dans un réseau isolé après avoir activé le tunnel VPN.

Identification de l'infrastructure (Root DSE)

Pour comprendre à quel type de serveur LDAP nous faisons face, nous interrogeons la racine de l'annuaire (Root DSE) afin de récupérer les contextes de nommage (Naming Contexts) :

ldapsearch -x -H ldap://10.0.10.56 -s base -b "" namingContexts defaultNamingContext

Retour du serveur :

defaultNamingContext: DC=ctfcorp,DC=local
namingContexts: DC=ctfcorp,DC=local

Recherche sur annuaire ldap

L'analyse de cette réponse indique que la cible n'est pas un simple serveur LDAP générique, mais un contrôleur de domaine Active Directory (AD) dont la racine exacte est DC=ctfcorp,DC=local.

Étape 2 : Configuration de la Résolution de Noms

Les serveurs Active Directory rejettent fréquemment les requêtes globales anonymes ou basées uniquement sur une adresse IP sans point d'entrée valide, provoquant des erreurs de type NameErr: DSID-0310021F (NO_OBJECT).

Pour s'aligner sur la configuration attendue par le serveur, il est nécessaire d'associer l'adresse IP au nom de domaine interne de l'infrastructure.

Modification du fichier /etc/hosts de la machine d'attaque :

sudo nano /etc/hosts

Ajout de la ligne suivante :

10.0.10.56    ctfcorp.local

Étape 3 : Extraction des Données et Capture du Flag

Une fois le domaine résolu et le véritable Base DN identifié, nous exécutons une requête de recherche sur l'ensemble de l'arborescence (-b "DC=ctfcorp,DC=local"). Le filtre (objectClass=*) permet d'extraire tous les objets sans distinction La liste serais trop long pour pouvoir voir le flag donc je vais ajouter l’argument grep à ma commande.

Pour isoler directement la chaîne du flag, la sortie est filtrée via grep :

ldapsearch -x -H ldap://ctfcorp.local -b "DC=ctfcorp,DC=local" "(objectClass=*)" | grep "404CTF"

Résultat obtenu :

description: Joueurs 404CTF 2026
description: 404CTF{M4r13_Cur13_3st_Un3_Pr0!}
sn: 404CTF Player
displayName: 404-debug - 404CTF Player

L'information cachée se trouvait dans l'attribut description d'un compte utilisateur nommé 404-debug.

Flag

404CTF{M4r13_Cur13_3st_Un3_Pr0!}