Introduction
Dans ce laboratoire, vous apprendrez une technique puissante pour la découverte de cibles en combinant les capacités de Nmap et Gobuster. Nmap est un scanner réseau polyvalent utilisé pour découvrir les hôtes et les services sur un réseau informatique, tandis que Gobuster est un outil utilisé pour le brute-force des URI (répertoires et fichiers) et des sous-domaines DNS. En intégrant ces deux outils, vous pouvez automatiser le processus d'identification des serveurs web potentiels dans une plage réseau donnée, puis découvrir systématiquement les répertoires et fichiers cachés sur ces serveurs. Cette approche améliore considérablement vos efforts de reconnaissance, rendant le processus de découverte plus efficace et complet.
Utiliser Nmap pour scanner une plage réseau à la recherche de ports Web ouverts (80, 443)
Dans cette étape, vous utiliserez Nmap pour scanner une plage réseau locale à la recherche d'hôtes sur lesquels les ports Web courants (80 pour HTTP et 443 pour HTTPS) sont ouverts. C'est la phase initiale d'identification des serveurs Web potentiels. Nous allons scanner la plage réseau 172.17.0.0/24, qui est généralement utilisée par Docker pour ses réseaux internes.
Tout d'abord, assurons-nous que Nmap est installé. Il devrait être pré-installé sur la VM LabEx.
nmap --version
Vous devriez voir une sortie similaire à celle-ci, indiquant que Nmap est installé :
Nmap version 7.80 ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.3.3 openssl-1.1.1f libpcre-8.39 libpcap-1.9.1 nmap-libdnet-1.12 ipv6
Compiled without:
Available nsock engines: epoll poll select
Maintenant, exécutez le scan Nmap. Nous utiliserons l'option -p pour spécifier les ports 80 et 443, et -oG pour exporter les résultats au format Grepable, plus facile à analyser.
nmap -p 80,443 -oG nmap_web_scan.txt 172.17.0.0/24
Cette commande va scanner la plage réseau spécifiée à la recherche d'hôtes avec les ports 80 ou 443 ouverts et enregistrer la sortie dans nmap_web_scan.txt. Le scan peut prendre quelques instants pour se terminer.
Une fois le scan terminé, vous pouvez afficher le contenu du fichier de sortie :
cat nmap_web_scan.txt
Vous verrez des lignes indiquant les hôtes découverts et leurs ports ouverts. Par exemple :
## Nmap 7.80 scan initiated Mon Jan 1 00:00:00 2024 as: nmap -p 80,443 -oG nmap_web_scan.txt 172.17.0.0/24
Host: 172.17.0.2 () Ports: 80/open/tcp//http///, 443/open/tcp//https///
Host: 172.17.0.3 () Ports: 80/open/tcp//http///
## Nmap done at Mon Jan 1 00:00:00 2024 -- 256 IP addresses (2 hosts up) scanned in 5.00 seconds
Analyser la sortie Nmap pour créer une liste d'URL de serveurs Web
Dans cette étape, vous allez analyser le fichier nmap_web_scan.txt pour extraire les adresses IP des hôtes avec des ports Web ouverts et les formater en une liste d'URL. Cette liste sera ensuite utilisée comme entrée pour Gobuster.
Nous utiliserons grep et awk pour traiter le fichier nmap_web_scan.txt. L'objectif est d'extraire les lignes contenant les ports 80 ou 443 "ouverts", puis d'extraire l'adresse IP, et enfin de construire l'URL (par exemple, http://172.17.0.2 ou https://172.17.0.2).
Exécutez la commande suivante pour analyser la sortie Nmap et créer web_servers.txt :
grep "open" nmap_web_scan.txt | awk '/80\/open/ {print "http://" $2} /443\/open/ {print "https://" $2}' | sort -u > web_servers.txt
Décomposons cette commande :
grep "open" nmap_web_scan.txt: Filtre les lignes du fichiernmap_web_scan.txtqui contiennent le mot "open", indiquant un port ouvert.awk '/80\/open/ {print "http://" $2} /443\/open/ {print "https://" $2}': Traite les lignes filtrées./80\/open/ {print "http://" $2}: Si une ligne contient "80/open", elle affiche "http://" suivi du deuxième champ ($2), qui est l'adresse IP./443\/open/ {print "https://" $2}: Si une ligne contient "443/open", elle affiche "https://" suivi du deuxième champ ($2), qui est l'adresse IP.- Remarque : Un hôte peut avoir à la fois les ports 80 et 443 ouverts, ce qui générera deux URL pour la même adresse IP.
sort -u: Trie les URL et supprime les doublons.> web_servers.txt: Redirige la sortie finale vers un nouveau fichier nomméweb_servers.txt.
Maintenant, affichez le contenu du fichier web_servers.txt :
cat web_servers.txt
Vous devriez voir une liste d'URL, une par ligne, similaire à ceci :
http://172.17.0.2
https://172.17.0.2
http://172.17.0.3
Ce fichier contient maintenant les cibles pour notre scan Gobuster.
Écrire un script Bash simple pour parcourir la liste d'URL
Dans cette étape, vous allez créer un script Bash qui lira chaque URL du fichier web_servers.txt et se préparera pour le scan Gobuster. Ce script servira de colonne vertébrale d'automatisation pour notre flux de travail combiné Nmap et Gobuster.
Tout d'abord, créons un nouveau fichier de script nommé gobust_scan.sh en utilisant nano :
nano gobust_scan.sh
Collez le contenu suivant dans le fichier gobust_scan.sh :
#!/bin/bash
## Définir la liste de mots pour Gobuster
WORDLIST="/usr/share/wordlists/dirb/common.txt" ## Une liste de mots courante pour le brute-force de répertoires
## Vérifier si la liste de mots existe
if [ ! -f "$WORDLIST" ]; then
echo "Erreur : Liste de mots introuvable à l'adresse $WORDLIST. Veuillez vous assurer qu'elle existe."
echo "Vous devrez peut-être installer le paquet 'dirb' ou 'wordlists', par exemple : sudo apt install dirb"
exit 1
fi
## Vérifier si web_servers.txt existe
if [ ! -f "web_servers.txt" ]; then
echo "Erreur : web_servers.txt introuvable. Veuillez exécuter l'étape 2 en premier."
exit 1
fi
echo "Démarrage des scans Gobuster..."
echo "-------------------------"
## Parcourir chaque URL dans web_servers.txt
while IFS= read -r url; do
echo "Scan de $url..."
## Placeholder pour la commande Gobuster - sera ajouté à l'étape suivante
## gobuster dir -u "$url" -w "$WORDLIST" -o "gobuster_$(echo $url | sed -e 's/http:\/\///g' -e 's/https:\/\///g' -e 's/\//_/g').txt"
echo "Scan de $url terminé."
echo "-------------------------"
done < web_servers.txt
echo "Tous les scans sont terminés."
Enregistrez le fichier en appuyant sur Ctrl+X, puis Y pour confirmer, et Entrée pour enregistrer sous le nom de fichier actuel.
Ensuite, rendez le script exécutable :
chmod +x gobust_scan.sh
Maintenant, testons le script pour nous assurer qu'il parcourt correctement les URL. Il n'exécutera pas encore Gobuster, mais il affichera des messages pour chaque URL.
./gobust_scan.sh
Vous devriez voir une sortie similaire à celle-ci, indiquant que le script lit et traite correctement chaque URL :
Starting Gobuster scans...
-------------------------
Scanning http://172.17.0.2...
Finished scanning http://172.17.0.2.
-------------------------
Scanning https://172.17.0.2...
Finished scanning https://172.17.0.2.
-------------------------
Scanning http://172.17.0.3...
Finished scanning http://172.17.0.3.
-------------------------
All scans completed.
Cela confirme que notre script est prêt à intégrer la commande Gobuster.
Appeler Gobuster dans le script pour chaque cible découverte
Dans cette étape, vous allez modifier le script gobust_scan.sh pour intégrer la commande Gobuster. Pour chaque URL découverte par Nmap, Gobuster tentera de trouver des répertoires et fichiers cachés en utilisant une liste de mots courante.
Tout d'abord, assurons-nous que Gobuster est installé. Il devrait être pré-installé sur la VM LabEx.
gobuster --version
Vous devriez voir une sortie similaire à ceci :
gobuster v3.1.0
Maintenant, ouvrez à nouveau le script gobust_scan.sh pour le modifier :
nano gobust_scan.sh
Localisez la ligne de remplacement (placeholder) :
## gobuster dir -u "$url" -w "$WORDLIST" -o "gobuster_$(echo $url | sed -e 's/http:\/\///g' -e 's/https:\/\///g' -e 's/\//_/g').txt"
Décommentez cette ligne et assurez-vous qu'elle ressemble exactement à ceci :
#!/bin/bash
## Définir la liste de mots pour Gobuster
WORDLIST="/usr/share/wordlists/dirb/common.txt" ## Une liste de mots courante pour le brute-force de répertoires
## Vérifier si la liste de mots existe
if [ ! -f "$WORDLIST" ]; then
echo "Erreur : Liste de mots introuvable à l'adresse $WORDLIST. Veuillez vous assurer qu'elle existe."
echo "Vous devrez peut-être installer le paquet 'dirb' ou 'wordlists', par exemple : sudo apt install dirb"
exit 1
fi
## Vérifier si web_servers.txt existe
if [ ! -f "web_servers.txt" ]; then
echo "Erreur : web_servers.txt introuvable. Veuillez exécuter l'étape 2 en premier."
exit 1
fi
echo "Démarrage des scans Gobuster..."
echo "-------------------------"
## Parcourir chaque URL dans web_servers.txt
while IFS= read -r url; do
echo "Scan de $url..."
## Commande Gobuster
gobuster dir -u "$url" -w "$WORDLIST" -o "gobuster_$(echo $url | sed -e 's/http:\/\///g' -e 's/https:\/\///g' -e 's/\//_/g').txt"
echo "Scan de $url terminé."
echo "-------------------------"
done < web_servers.txt
echo "Tous les scans sont terminés."
Enregistrez le script modifié (Ctrl+X, Y, Entrée).
Maintenant, exécutez le script. Cela exécutera Gobuster pour chaque URL et enregistrera les résultats dans des fichiers séparés.
./gobust_scan.sh
Le script exécutera maintenant Gobuster pour chaque URL. Vous verrez la sortie de Gobuster directement dans votre terminal pendant son exécution, et il enregistrera également les résultats dans des fichiers nommés comme gobuster_172.17.0.2.txt, gobuster_172.17.0.2_443.txt, etc. (les noms de fichiers exacts dépendent des URL).
Une fois le script terminé, vous pouvez lister les fichiers de sortie Gobuster générés :
ls gobuster_*.txt
Vous devriez voir des fichiers similaires à :
gobuster_172.17.0.2.txt gobuster_172.17.0.2_443.txt gobuster_172.17.0.3.txt
Consolider les résultats de Gobuster de toutes les cibles
Dans cette dernière étape, vous allez consolider tous les fichiers de sortie Gobuster individuels en un seul rapport complet. Cela facilite l'examen de tous les répertoires et fichiers découverts sur tous les serveurs web scannés.
Nous utiliserons la commande cat pour concaténer tous les fichiers correspondant à gobuster_*.txt dans un seul fichier nommé all_gobuster_results.txt.
cat gobuster_*.txt > all_gobuster_results.txt
Cette commande prendra le contenu de tous les fichiers commençant par gobuster_ et se terminant par .txt et les combinera dans all_gobuster_results.txt.
Maintenant, vous pouvez afficher les résultats consolidés :
cat all_gobuster_results.txt
Vous verrez une sortie combinée de tous les répertoires et fichiers que Gobuster a trouvés sur les serveurs web scannés. La sortie variera en fonction du contenu des serveurs web, mais elle pourrait ressembler à ceci :
===============================================================
Gobuster v3.1.0
...
[+] Found: /index.html (Status: 200)
[+] Found: /css (Status: 301)
[+] Found: /js (Status: 301)
...
===============================================================
Gobuster v3.1.0
...
[+] Found: /admin (Status: 301)
[+] Found: /login.php (Status: 200)
...
Ce fichier consolidé fournit un point de référence unique pour tous les actifs web découverts, complétant ainsi votre processus automatisé de découverte de cibles.
Résumé
Dans ce laboratoire, vous avez combiné avec succès Nmap et Gobuster pour automatiser le processus de découverte de serveurs web et de répertoires. Vous avez commencé par utiliser Nmap pour scanner une plage réseau à la recherche de ports web ouverts, puis vous avez analysé sa sortie pour créer une liste d'URL cibles. Ensuite, vous avez développé un script Bash pour parcourir ces URL, appelant Gobuster pour chacune afin de trouver des répertoires et fichiers cachés. Enfin, vous avez consolidé tous les résultats de Gobuster en un seul rapport, démontrant un flux de travail de reconnaissance efficace et complet. Cette approche intégrée est une compétence précieuse pour toute personne impliquée dans la sécurité réseau ou les tests d'applications web.
