Brute Force sur les sous-domaines

FIKARA BILALFIKARA BILAL
5 min read

Le brute-force de sous-domaines est une méthode utilisée pour découvrir des sous-domaines associés à un domaine principal. Elle consiste à essayer une liste de mots pour évaluer des sous-domaines potentiels afin de vérifier leur réel existence. Ces sous-domaines peuvent parfois révéler des services, des applications vulnérables. Nous décrirons quelques outils utilisés pour cette technique.

Ffuf

Fast fuzzer (ffuf) est un outil outil open-source de fuzzing et de force brute, écrit en langage Go, utilisé pour découvrir des ressources web telles que des fichiers, des répertoires, et des sous-domaines. Le fuzzing est une méthode qui consiste à envoyer des données aléatoires, mal formées ou anormales à un système pour tester ses réponses, ce qui pourrait conduire à la découverte de vulnérabilités.

Un article décrivant l’outil ffuf au complet est disponible ici. Dans ce présent article, nous décrirons juste son utilisation dans le brute force de sous-domaines pour découvrir des sous-domaines associés à un domaine principal

La documentation officielle de ffuf se retrouve sur GitHub.

Pour installer ffuf, utilisez la commande suivante:

git clone https://github.com/ffuf/ffuf
cd ffuf
go get
go build
#La commande suivante rend ffuf disponible depuis nimporte quelle répertoire
sudo ln -s ~/go/bin/ffuf /usr/sbin/ffuf

Options

  • ffuf -h : l’option -h permet de lister toutes les options de ffuf

  • ffuf -u http://FUZZ.site.com -w [wordlists/common.txt]

    • l’option -u permet de spécifier l’URL à analyser. Cette option est obligatoire. La commande remplacera le terme “FUZZ“ dans l’URL par chaque mot de la liste et envoie une requête http à cette URL. Le paramètre FUZZ est placé ici, avant le domaine principal indiquant l’endroit où ffuf remplacera chaque mot de la liste pour tester des sous-domaines. Cela permettra donc de découvrir les sous-domaines potentiels.

    • l’option -w spécifie le chemin du fichier contenant la liste de mots à utiliser pour le fuzzing (option obligatoire)

    • Chaque requête envoyée retournera donc un statut http de la réponse. En fonction de ce que l’on cherche à découvrir, un statut peut avoir une interprétation différente. Si par exemple on veut accéder à une page qui n’existe pas, mais on obtient un statut 200, cela indique une faille ou une mauvaise configuration.

Avec cette requête, on obtient un statut 200 qui indique donc que le chemin http://ffuf.me/cd/basic/class existe sur le serveur. Le fichier development.log existe aussi sur ce même serveur.

Subzy

Subzy est un outil utilisé pour détecter et prendre le contrôle (subdomain takeover) de sous-domaines vulnérables. Il s’utilise généralement lorsque des sous-domaines pointent vers des services inactifs ou mal configurés, favorisant ainsi une exploitation. Cet outil vérifie les sous-domaines pour voir s’ils sont configurés pour des services ne sont plus en usage.

Une documentation officielle se retrouve sur GitHub.

Pour installer Subzy, utilisez la commande suivante:

go install -v github.com/PentestPad/subzy@latest

Options

  • subzy -h : l’option -h permet de voir la liste de toutes les options de Subzy

  • subzy run -h: affiche les détails de la commande run de Subzy, qui détaille les options disponibles pour exécuter des vérifications de sous-domaines.

  • subzy run --target [URL] --output [STRING] --https

    • l’option --target permet de spécifier un ou plusieurs domaines, séparés par une virgule.

    • l’option --output spécifie un fichier de sortie en format JSON des résultats

    • l’option --https force l’utilisation du protocole https pour les requêtes. Il est désactivé par défaut. Cela signifie que si un sous-domaine est spécifié sans protocole http://site.com, il sera testé avec https://site.com.

  • subzy run --targets [PATH/TO/FILE] --hide_fails --verify_ssl

    • l’option --targets permet de spécifier un fichier contenant une liste de sous-domaines à tester.

    • l’option --hide_fails permet de masquer les résultats échoués. Seuls ceux qui réussissent (vulnérables) sont affichés.

    • l’option --verify_ssl permet de ne pas vérifier les sites avec des certificats SSL non sécurisés

Le message [NOT VULNERABLE] indique que les sous-domaines 00.paydiant.com et 11.paydiant.com ne sont pas vulnérables à une prise de contrôle avec l’outil Subzy.

Gobuster

Gobuster est outil écrit en langage Go utilisé pour le brute-force de répertoires et de sous-domaines. L’outil utlilise des listes mots qui peuvent être personnalisées afin de découvrir des sous-domaines cachés ou non référencés publiquement d'un domaine cible. Cet outil se distingue par sa rapidité par rapport aux autres outils.

La documentation officielle se retrouve sur GitHub.

Pour installer Gobuster, utilisez la commande suivante:

go install github.com/OJ/gobuster/v3@latest

Options

  • gobuster -h permet de lister toutes les options de Gobuster

  • Il existe plusieurs modes pour utiliser l’outil gobuster

    • dns pour énumérer des sous-domaines DNS pour identifier des sous-domaines d'un domaine.

      • dir énumère les répertoires/fichiers pour découvrir des chemins sur un serveur web.

      • fuzz utilise le fuzzing sur les URLs en remplaçant le mot-clé FUZZ dans l'URL, les en-têtes et le corps de la requête pour tester différentes entrées.

      • tftp utilise l’énumération des serveurs TFTP (Trivial File Transfer Protocol)

  • gobuster [MODE] -h permet de lister les options de chaque mode

  • gobuster dir -u http://site.com -t 7 -w /PATH/TO/FILE -x php,html

    • l’option dir indique le mode utilisé, l’énumération de répertoires/fichiers

    • l’option -u spécifie l’URL cible

    • l’option -t permet de définir le nombre de threads à utiliser pour rendre l'exploration plus rapide.

    • l’option -x indique à l’outil d’explorer uniquement les répertoires avec les extensions spécifiées

    • l’option -w spécifie le chemin vers la liste de mots à utiliser.

  • gobuster dns -d site.com -q -w /PATH/TO/FILE -i

    • l’option dns indique qu’il s’agit d’un brute force de sous-domaines

    • l’option -d spécifie le domaine cible

    • l’option -q active le mode silencieux pour réduire la sortie à l’écran et l’information inutile

    • l’option -i permet d’afficher les adresses IPs

En exécutant la commande gobuster dns hackerone.com -i -w common.txt, on voit que plusieurs sous-domaines ont été trouvés, avec des adresses IPs associées. La liste de mots a été utilisée pour tester les sous-domaines potentiels. Chaque entrée est ajoutée à hackerone.com pour vérifier si le sous-domaine existe.

La commande gobuster fuzz -u https://hackerone.com/FUZZ -w common.txt utilise le mode fuzzing pour tester différentes entrées sur le site spécifié. Le paramètre FUZZ sera remplacé par les mots de la liste fournie. On voit que les certaines ressources demandées n’ont pas été trouvées sur le serveur qui a répondu avec un statut d’erreur 404.

On pourrait donc essayer de filtrer les résultats et ignorer le statut 404 avec l’option -b ou --excludestatuscodes .

Plusieurs autres outils peuvent être utilisés dans ce cas, comme Sublist3r, Subfinder, Ammas et surtout OneForAll.

À noter, qu’il est important de rappeler que l'utilisation de cet outil doit toujours se faire dans un cadre légal.

0
Subscribe to my newsletter

Read articles from FIKARA BILAL directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

FIKARA BILAL
FIKARA BILAL

As a newcomer to the cybersecurity industry, I'm on an exciting journey of continuous learning and exploration. Join me as I navigate, sharing insights and lessons learned along the way