Brute Force sur les sous-domaines


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 ffufffuf -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 Subzysubzy 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ésultatsl’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 GobusterIl 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 modegobuster 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/fichiersl’option
-u
spécifie l’URL ciblel’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éesl’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-domainesl’option
-d
spécifie le domaine ciblel’option
-q
active le mode silencieux pour réduire la sortie à l’écran et l’information inutilel’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.
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