Aller au contenu
  1. Posts/

Comment utiliser DNSChef pour résoudre les problèmes de connectivité de Bloodhound liés aux timeouts LDAP

·398 mots·2 mins
Lacroix Raphaël (Chepycou)
Auteur
Lacroix Raphaël (Chepycou)
Bonjour, bienvenue sur mon blog. Je suis Raphaël LACROIX, je développe diverses applications pendant mon temps libre, allant du très inutile au parfois utile. Je fais aussi beaucoup de Capture The Flag et de défis de cybersécurité.
Sommaire

À quoi ce billet de blog est-il consacré ?
#

Pas besoin d’introduire Bloodhound et son ingesteur bloodhound.py.

Cependant, au cours des derniers mois, j’ai rencontré plusieurs problèmes avec Bloodhound, notamment via des proxies (comme Ligolo) ou à cause d’erreurs étranges de routage ou de résolution DNS. Ces problèmes surviennent lorsque l’adresse IP du serveur LDAP n’est pas renvoyée à notre outil ou lorsque l’adresse en question n’est pas celle que nous souhaitons (une adresse publique que nous pouvons atteindre plutôt qu’une adresse privée).

Une manière de résoudre ce problème est de coder en dur l’IP dans le code source de Bloodhound, comme je l’ai vu faire par Ippsec.

Une autre méthode, un peu moins “sales”, est d’utiliser DNSChef. Voici ce que je vais illustrer dans cet article.

Qu’est-ce que DNSChef ?
#

DNSChef est un proxy DNS hautement configurable (appelé “Fake DNS”) destiné aux Testeurs de Pénétration et aux Analystes de Malware. Il nous permet de falsifier les réponses DNS de manière configurée. Conçu à l’origine en tant qu’outil de recherche de malwares, nous pouvons l’utiliser à nos fins.

Par exemple, si nous souhaitons que toutes les requêtes DNS de type A renvoient <IP1> comme réponse, nous pouvons exécuter :

dnschef.py --fakeip <IP1>

et modifier notre /etc/resolv.conf pour qu’il pointe vers DNSChef (127.0.0.1).

Comment utiliser DNSChef pour arrêter les timeouts LDAP ?
#

L’outil est très personnalisable, donc nous pouvons analyser quelles requêtes échouent dans notre Bloodhound (en utilisant le mode_verbose et/ou en faisant tourner Wireshark en parallèle) et les configurer dans notre fichier de configuration DNSChef, dont la syntaxe est détaillée dans le readme.

Par défaut, il existe un fichier dnschef.ini que nous pouvons utiliser comme point de départ pour créer notre configuration. Voici un exemple concret avec les domaines pwnme.local et pwnmemore.localdont les IP des DC sont respectivement 10.10.1.42 et 10.10.2.42.

Nous exécutons notre DNSChef en utilisant notre fichier de configuration comme suit :

python dnschef.py --file dnschef.ini

Voici la partie intéressante du fichier de configuration :

# fichier
[A]     # Requêtes pour des enregistrements d’adresses IPv4
dc01.pwnme.local=10.10.1.42
dc02.pwnmemore.local=10.10.2.42

[SRV]
; FORMAT : priorité poids port cible
*.*.*.*.pwnme.local=0 5 5060 dc01.pwnme.local
*.*.*.*.pwnmemore.local=0 5 5060 dc02.pwnmemore.local

Et maintenant, dans un autre terminal, nous pouvons exécuter Bloodhound :

bloodhound-python --zip -c All -d pwnmemore.local -u 'mary_littlelamb' -p 'YouLostTheGame' -dc dc02.pwnmemore.local -ns 127.0.0.1

Ressources supplémentaires :