Einleitung
In diesem Lab lernen Sie eine leistungsstarke Technik zur Zielentdeckung kennen, indem Sie die Fähigkeiten von Nmap und Gobuster kombinieren. Nmap ist ein vielseitiger Netzwerkscanner, der zur Erkundung von Hosts und Diensten in einem Computernetzwerk verwendet wird, während Gobuster ein Werkzeug ist, das zum Brute-Force von URIs (Verzeichnissen und Dateien) und DNS-Subdomains eingesetzt wird. Durch die Integration dieser beiden Werkzeuge können Sie den Prozess der Identifizierung potenzieller Webserver innerhalb eines bestimmten Netzwerkbereichs automatisieren und dann systematisch versteckte Verzeichnisse und Dateien auf diesen Servern entdecken. Dieser Ansatz verbessert Ihre Aufklärungsbemühungen erheblich und macht den Entdeckungsprozess effizienter und umfassender.
Verwenden von Nmap zum Scannen eines Netzwerkbereichs nach offenen Web-Ports (80, 443)
In diesem Schritt verwenden Sie Nmap, um einen lokalen Netzwerkbereich nach Hosts zu scannen, die gängige Web-Ports (80 für HTTP und 443 für HTTPS) geöffnet haben. Dies ist die anfängliche Phase der Identifizierung potenzieller Webserver. Wir werden den Netzwerkbereich 172.17.0.0/24 scannen, der typischerweise von Docker für seine internen Netzwerke verwendet wird.
Zuerst stellen wir sicher, dass Nmap installiert ist. Es sollte auf der LabEx VM vorinstalliert sein.
nmap --version
Sie sollten eine Ausgabe ähnlich dieser sehen, die anzeigt, dass Nmap installiert ist:
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
Führen Sie nun den Nmap-Scan aus. Wir verwenden das Flag -p, um die Ports 80 und 443 anzugeben, und -oG, um die Ergebnisse im Grepable-Format auszugeben, das einfacher zu parsen ist.
nmap -p 80,443 -oG nmap_web_scan.txt 172.17.0.0/24
Dieser Befehl scannt den angegebenen Netzwerkbereich nach Hosts mit geöffneten Ports 80 oder 443 und speichert die Ausgabe in nmap_web_scan.txt. Der Scan kann einige Momente dauern, bis er abgeschlossen ist.
Nachdem der Scan abgeschlossen ist, können Sie den Inhalt der Ausgabedatei anzeigen:
cat nmap_web_scan.txt
Sie sehen Zeilen, die erkannte Hosts und ihre offenen Ports anzeigen. Zum Beispiel:
## 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
Parsen der Nmap-Ausgabe zur Erstellung einer Liste von Webserver-URLs
In diesem Schritt parsen Sie die Datei nmap_web_scan.txt, um die IP-Adressen von Hosts mit offenen Web-Ports zu extrahieren und sie in eine Liste von URLs zu formatieren. Diese Liste wird dann als Eingabe für Gobuster verwendet.
Wir verwenden grep und awk, um die Datei nmap_web_scan.txt zu verarbeiten. Das Ziel ist es, Zeilen zu extrahieren, die "offene" Ports 80 oder 443 enthalten, dann die IP-Adresse zu extrahieren und schließlich die URL zu konstruieren (z. B. http://172.17.0.2 oder https://172.17.0.2).
Führen Sie den folgenden Befehl aus, um die Nmap-Ausgabe zu parsen und web_servers.txt zu erstellen:
grep "open" nmap_web_scan.txt | awk '/80\/open/ {print "http://" $2} /443\/open/ {print "https://" $2}' | sort -u > web_servers.txt
Lassen Sie uns diesen Befehl aufschlüsseln:
grep "open" nmap_web_scan.txt: Filtert Zeilen ausnmap_web_scan.txt, die das Wort "open" enthalten, was auf einen offenen Port hinweist.awk '/80\/open/ {print "http://" $2} /443\/open/ {print "https://" $2}': Verarbeitet die gefilterten Zeilen./80\/open/ {print "http://" $2}: Wenn eine Zeile "80/open" enthält, gibt sie "http://" gefolgt vom zweiten Feld ($2), der IP-Adresse, aus./443\/open/ {print "https://" $2}: Wenn eine Zeile "443/open" enthält, gibt sie "https://" gefolgt vom zweiten Feld ($2), der IP-Adresse, aus.- Hinweis: Ein Host kann sowohl Port 80 als auch 443 geöffnet haben, was zu zwei URLs für dieselbe IP führt.
sort -u: Sortiert die URLs und entfernt doppelte Einträge.> web_servers.txt: Leitet die endgültige Ausgabe in eine neue Datei namensweb_servers.txtum.
Sehen Sie sich nun den Inhalt der Datei web_servers.txt an:
cat web_servers.txt
Sie sollten eine Liste von URLs sehen, eine pro Zeile, ähnlich dieser:
http://172.17.0.2
https://172.17.0.2
http://172.17.0.3
Diese Datei enthält nun die Ziele für unseren Gobuster-Scan.
Erstellen eines einfachen Bash-Skripts zur Durchsuchung der URL-Liste
In diesem Schritt erstellen Sie ein Bash-Skript, das jede URL aus web_servers.txt liest und sich auf den Gobuster-Scan vorbereitet. Dieses Skript dient als Automatisierungs-Backbone für unseren kombinierten Nmap- und Gobuster-Workflow.
Zuerst erstellen wir eine neue Skriptdatei namens gobust_scan.sh mit nano:
nano gobust_scan.sh
Fügen Sie den folgenden Inhalt in die Datei gobust_scan.sh ein:
#!/bin/bash
## Definieren der Wortliste für Gobuster
WORDLIST="/usr/share/wordlists/dirb/common.txt" ## Eine gängige Wortliste für Brute-Force-Verzeichnisse
## Überprüfen, ob die Wortliste existiert
if [ ! -f "$WORDLIST" ]; then
echo "Fehler: Wortliste nicht gefunden unter $WORDLIST. Bitte stellen Sie sicher, dass sie existiert."
echo "Möglicherweise müssen Sie das Paket 'dirb' oder 'wordlists' installieren, z. B. sudo apt install dirb"
exit 1
fi
## Überprüfen, ob web_servers.txt existiert
if [ ! -f "web_servers.txt" ]; then
echo "Fehler: web_servers.txt nicht gefunden. Bitte führen Sie zuerst Schritt 2 aus."
exit 1
fi
echo "Starte Gobuster-Scans..."
echo "-------------------------"
## Schleife durch jede URL in web_servers.txt
while IFS= read -r url; do
echo "Scanne $url..."
## Platzhalter für den Gobuster-Befehl - wird im nächsten Schritt hinzugefügt
## gobuster dir -u "$url" -w "$WORDLIST" -o "gobuster_$(echo $url | sed -e 's/http:\/\///g' -e 's/https:\/\///g' -e 's/\//_/g').txt"
echo "Scannen von $url abgeschlossen."
echo "-------------------------"
done < web_servers.txt
echo "Alle Scans abgeschlossen."
Speichern Sie die Datei, indem Sie Strg+X drücken, dann Y zur Bestätigung und Enter, um unter dem aktuellen Dateinamen zu speichern.
Machen Sie das Skript anschließend ausführbar:
chmod +x gobust_scan.sh
Testen Sie nun das Skript, um sicherzustellen, dass es korrekt durch die URLs schleift. Es wird Gobuster noch nicht ausführen, aber es wird für jede URL Meldungen ausgeben.
./gobust_scan.sh
Sie sollten eine Ausgabe ähnlich dieser sehen, die anzeigt, dass das Skript jede URL korrekt liest und verarbeitet:
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.
Dies bestätigt, dass unser Skript bereit ist, den Gobuster-Befehl zu integrieren.
Aufrufen von Gobuster innerhalb des Skripts für jedes erkannte Ziel
In diesem Schritt modifizieren Sie das Skript gobust_scan.sh, um den Gobuster-Befehl zu integrieren. Für jede von Nmap erkannte URL versucht Gobuster, versteckte Verzeichnisse und Dateien mithilfe einer gängigen Wortliste zu finden.
Stellen Sie zunächst sicher, dass Gobuster installiert ist. Es sollte auf der LabEx VM vorinstalliert sein.
gobuster --version
Sie sollten eine Ausgabe ähnlich dieser sehen:
gobuster v3.1.0
Öffnen Sie nun erneut das Skript gobust_scan.sh zur Bearbeitung:
nano gobust_scan.sh
Suchen Sie die Platzhalterzeile:
## gobuster dir -u "$url" -w "$WORDLIST" -o "gobuster_$(echo $url | sed -e 's/http:\/\///g' -e 's/https:\/\///g' -e 's/\//_/g').txt"
Entkommentieren Sie diese Zeile und stellen Sie sicher, dass sie genau so aussieht:
#!/bin/bash
## Definieren der Wortliste für Gobuster
WORDLIST="/usr/share/wordlists/dirb/common.txt" ## Eine gängige Wortliste für Brute-Force-Verzeichnisse
## Überprüfen, ob die Wortliste existiert
if [ ! -f "$WORDLIST" ]; then
echo "Fehler: Wortliste nicht gefunden unter $WORDLIST. Bitte stellen Sie sicher, dass sie existiert."
echo "Möglicherweise müssen Sie das Paket 'dirb' oder 'wordlists' installieren, z. B. sudo apt install dirb"
exit 1
fi
## Überprüfen, ob web_servers.txt existiert
if [ ! -f "web_servers.txt" ]; then
echo "Fehler: web_servers.txt nicht gefunden. Bitte führen Sie zuerst Schritt 2 aus."
exit 1
fi
echo "Starte Gobuster-Scans..."
echo "-------------------------"
## Schleife durch jede URL in web_servers.txt
while IFS= read -r url; do
echo "Scanne $url..."
## Gobuster-Befehl
gobuster dir -u "$url" -w "$WORDLIST" -o "gobuster_$(echo $url | sed -e 's/http:\/\///g' -e 's/https:\/\///g' -e 's/\//_/g').txt"
echo "Scannen von $url abgeschlossen."
echo "-------------------------"
done < web_servers.txt
echo "Alle Scans abgeschlossen."
Speichern Sie das geänderte Skript (Strg+X, Y, Enter).
Führen Sie nun das Skript aus. Dies führt Gobuster für jede URL aus und speichert die Ergebnisse in separaten Dateien.
./gobust_scan.sh
Das Skript führt nun Gobuster für jede URL aus. Sie sehen die Gobuster-Ausgabe direkt in Ihrem Terminal, während es läuft, und es speichert die Ergebnisse auch in Dateien mit Namen wie gobuster_172.17.0.2.txt, gobuster_172.17.0.2_443.txt usw. (die genauen Dateinamen hängen von den URLs ab).
Nachdem das Skript abgeschlossen ist, können Sie die generierten Gobuster-Ausgabedateien auflisten:
ls gobuster_*.txt
Sie sollten Dateien sehen, die den folgenden ähneln:
gobuster_172.17.0.2.txt gobuster_172.17.0.2_443.txt gobuster_172.17.0.3.txt
Konsolidieren der Gobuster-Ergebnisse von allen Zielen
In diesem letzten Schritt konsolidieren Sie alle einzelnen Gobuster-Ausgabedateien zu einem einzigen, umfassenden Bericht. Dies erleichtert die Überprüfung aller gefundenen Verzeichnisse und Dateien auf allen gescannten Webservern.
Wir verwenden den Befehl cat, um alle Dateien, die mit gobuster_*.txt übereinstimmen, in einer einzigen Datei namens all_gobuster_results.txt zusammenzufassen.
cat gobuster_*.txt > all_gobuster_results.txt
Dieser Befehl nimmt den Inhalt aller Dateien, die mit gobuster_ beginnen und mit .txt enden, und kombiniert sie in all_gobuster_results.txt.
Nun können Sie die konsolidierten Ergebnisse anzeigen:
cat all_gobuster_results.txt
Sie sehen eine kombinierte Ausgabe aller Verzeichnisse und Dateien, die Gobuster auf den gescannten Webservern gefunden hat. Die Ausgabe variiert je nach Inhalt der Webserver, könnte aber ungefähr so aussehen:
===============================================================
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)
...
Diese konsolidierte Datei bietet einen einzigen Bezugspunkt für alle gefundenen Web-Assets und schließt Ihren automatisierten Prozess zur Zielerkennung ab.
Zusammenfassung
In diesem Lab haben Sie Nmap und Gobuster erfolgreich kombiniert, um den Prozess der Webserver- und Verzeichniserkennung zu automatisieren. Sie haben zunächst Nmap verwendet, um einen Netzwerkbereich nach offenen Web-Ports zu scannen, und dann dessen Ausgabe analysiert, um eine Liste von Ziel-URLs zu erstellen. Als Nächstes haben Sie ein Bash-Skript entwickelt, das diese URLs durchläuft und Gobuster für jede aufruft, um versteckte Verzeichnisse und Dateien zu finden. Schließlich haben Sie alle Gobuster-Ergebnisse in einem einzigen Bericht zusammengefasst, was einen effizienten und umfassenden Aufklärungsworkflow demonstriert. Dieser integrierte Ansatz ist eine wertvolle Fähigkeit für alle, die sich mit Netzwerksicherheit oder Webanwendungstests beschäftigen.
