Scans mit Nmap automatisieren

NmapBeginner
Jetzt üben

Einführung

In diesem Lab lernst du, wie du Nmap-Scans mithilfe von Shell-Scripting und Cron-Auftragsplanung automatisieren kannst. Das Lab beginnt mit der Erstellung eines einfachen Shell-Scripts, scan.sh, das einen Nmap SYN-Scanbefehl für die Zieladresse 192.168.1.1 enthält. Anschließend wirst du das Skript ausführbar machen, indem du chmod +x scan.sh verwendest, und es aus der Konsole ausführen.

Das Lab geht weiter, indem du das Skript erweitern, um mehrere Scans zu ermöglichen, indem du einen Texteditor verwendest. Schließlich wirst du das Skript so planen, dass es automatisch mit Cron läuft, indem du es mit crontab -e konfigurierst, und die automatische Ausführung in der Xfce-Konsole überprüfen.

Scan-Skript mit echo "nmap -sS 192.168.1.1" > scan.sh erstellen

In diesem Schritt werden wir ein einfaches Shell-Skript erstellen, das einen Nmap-Scan ausführt. Dieses Skript wird als Grundlage für die Automatisierung von komplexeren Scans später dienen. Wir werden den Befehl echo verwenden, um den Nmap-Befehl in eine Datei namens scan.sh zu schreiben.

Zunächst verstehen wir, was echo macht. Der Befehl echo gibt einfach seine Argumente auf die Standardausgabe aus. Wir können diese Ausgabe mithilfe des >-Operators in eine Datei umleiten.

Der Nmap-Befehl, den wir verwenden werden, lautet nmap -sS 192.168.1.1. Zergliedern wir ihn:

  • nmap: Dies ist der Befehl, um den Nmap-Scanner auszuführen.
  • -sS: Dieser Option wird ein SYN-Scan angegeben, was eine diskrette Methode zum Scannen von Ports ist. Es ist auch als „halb-öffener“ Scan bekannt, da die TCP-Handschlagung nicht abgeschlossen wird.
  • 192.168.1.1: Dies ist die Ziel-IP-Adresse, die wir scannen möchten. Dies ist eine übliche private IP-Adresse, aber Sie müssen sie möglicherweise basierend auf Ihrer Netzwerkkonfiguration anpassen.

Lassen Sie uns nun das Skript erstellen. Öffnen Sie Ihr Terminal im Verzeichnis ~/project (wenn Sie nicht bereits dort sind) und führen Sie folgenden Befehl aus:

echo "nmap -sS 192.168.1.1" > scan.sh

Dieser Befehl wird eine Datei namens scan.sh in Ihrem Verzeichnis ~/project erstellen und den Nmap-Befehl darin schreiben.

Um zu überprüfen, ob die Datei korrekt erstellt wurde, können Sie den Befehl cat verwenden, um ihren Inhalt anzuzeigen:

cat scan.sh

Sie sollten die folgende Ausgabe sehen:

nmap -sS 192.168.1.1

Dies bestätigt, dass das Skript mit dem korrekten Nmap-Befehl erstellt wurde.

Skript mit chmod +x scan.sh ausführbar machen

In diesem Schritt werden wir das Skript scan.sh ausführbar machen. Standardmäßig haben neu erstellte Dateien in Linux keine Ausführberechtigungen. Wir müssen diese Berechtigung explizit erteilen, um das Skript ausführen zu können.

Der Befehl chmod wird verwendet, um die Berechtigungen einer Datei oder eines Verzeichnisses zu ändern. Die Option +x fügt der angegebenen Datei die Ausführberechtigung hinzu.

Navigieren Sie in Ihrem Terminal zum Verzeichnis ~/project (wenn Sie nicht bereits dort sind) und führen Sie folgenden Befehl aus:

chmod +x scan.sh

Dieser Befehl wird der Datei scan.sh die Ausführberechtigung hinzufügen.

Um zu überprüfen, dass das Skript jetzt ausführbar ist, können Sie den Befehl ls -l verwenden, um die Dateiberechtigungen aufzulisten.

ls -l scan.sh

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

-rwxr-xr-x 1 labex labex 25 Oct 26 10:00 scan.sh

Die x in der Zeichenfolge -rwxr-xr-x zeigt an, dass die Datei jetzt ausführbar ist. Genauer gesagt bezieht sich das erste rwx auf die Berechtigungen des Besitzers (lesen, schreiben, ausführen), das zweite r-x auf die Berechtigungen der Gruppe und das dritte r-x auf die Berechtigungen für andere Benutzer.

Jetzt, da das Skript ausführbar ist, können wir es im nächsten Schritt ausführen.

Skript mit./scan.sh ausführen

In diesem Schritt werden wir das scan.sh-Skript ausführen, das wir in den vorherigen Schritten erstellt und ausführbar gemacht haben.

Um das Skript auszuführen, verwenden wir das Präfix ./. Dies gibt der Shell die Anweisung, das in das aktuelle Verzeichnis befindliche Skript auszuführen.

In Ihrem Terminal stellen Sie sicher, dass Sie sich im Verzeichnis ~/project befinden, und führen Sie folgenden Befehl aus:

./scan.sh

In Ihrem Terminal sollten Sie die Nmap-Ausgabe sehen. Die Ausgabe variiert je nachdem, ob der Zielhost (192.168.1.1) erreichbar ist und welche Dienste auf ihm laufen. Wenn der Zielhost nicht erreichbar ist, können Sie eine Meldung wie "Host scheint herunterzufahren" sehen. Wenn der Zielhost erreichbar ist, sehen Sie eine Liste der geöffneten Ports und weitere Informationen über das Ziel.

Wichtige Bemerkung: Die IP-Adresse 192.168.1.1 ist eine übliche Standardgateway-Adresse. Wenn dies nicht die richtige Adresse für ein Gerät im Netzwerk ist, kann der Scan möglicherweise keine nützlichen Ergebnisse liefern. Sie können 192.168.1.1 durch die IP-Adresse eines Geräts im Netzwerk ersetzen, das Sie scannen möchten. Stellen Sie jedoch sicher, dass Sie die Erlaubnis haben, das Ziel zu scannen. Das Scannen von Netzwerken ohne Erlaubnis ist illegal und unethisch.

Da die Ausgabe von nmap stark variieren kann, je nachdem, welchem Netzwerk und Ziel es unterzogen wird, können wir die Ausgabe nicht direkt zuverlässig überprüfen. Wir können jedoch überprüfen, dass der Befehl ausgeführt wurde, indem wir die Befehlsgeschichte überprüfen.

Mehrere Scans zum Skript im Xfce-Texteditor hinzufügen

In diesem Schritt werden wir mit dem Xfce-Texteditor weitere Nmap-Scanbefehle unserem scan.sh-Skript hinzufügen. Dadurch können wir mit einem einzelnen Skriptausführungsbefehl mehrere Scans durchführen.

Öffnen Sie zunächst die Datei scan.sh im Xfce-Texteditor. Sie können dies tun, indem Sie mit der rechten Maustaste auf den Desktop klicken, "Terminal hier öffnen" auswählen und dann folgenden Befehl eingeben:

nano scan.sh

Dadurch wird die Datei scan.sh im nano-Texteditor geöffnet.

Derzeit enthält das Skript eine einzige Zeile:

nmap -sS 192.168.1.1

Fügen wir einen weiteren Scanbefehl hinzu. Beispielsweise können wir einen Ping-Scan (-sn) hinzufügen, um zu überprüfen, ob ein anderer Host erreichbar ist:

nmap -sS 192.168.1.1
nmap -sn 192.168.1.2

Sie können beliebig viele Scanbefehle hinzufügen. Fügen wir beispielsweise einen Versionserkennungs-Scan (-sV) für das erste Ziel hinzu:

nmap -sS -sV 192.168.1.1
nmap -sn 192.168.1.2

Jetzt wird das Skript zunächst einen SYN-Scan mit Versionserkennung auf 192.168.1.1 durchführen und anschließend einen Ping-Scan auf 192.168.1.2.

Wichtige Bemerkung: Vergessen Sie nicht, 192.168.1.1 und 192.168.1.2 durch die IP-Adressen von Geräten im Netzwerk zu ersetzen, die Sie scannen möchten, und stellen Sie sicher, dass Sie die Erlaubnis haben, diese zu scannen.

Um die Änderungen zu speichern, drücken Sie Strg+X, dann Y, um zu bestätigen, und anschließend Enter, um die Datei zu speichern.

Wenn Sie nun das Skript mit ./scan.sh ausführen, werden alle hinzugefügten Nmap-Befehle ausgeführt.

Scan mit cron planen, indem crontab -e verwendet wird

In diesem Schritt werden wir unser scan.sh-Skript so planen, dass es automatisch mit cron ausgeführt wird. cron ist ein zeitbasierter Job-Scheduler in Linux-ähnlichen Betriebssystemen. Es ermöglicht es Ihnen, Befehle oder Skripte für bestimmte Zeiten, Daten oder Intervalle auszuführen.

Um eine Aufgabe mit cron zu planen, verwenden wir den Befehl crontab. Der Befehl crontab -e öffnet die Crontab-Datei in einem Texteditor (in der LabEx-Umgebung ist dies normalerweise nano).

Geben Sie im Terminal folgenden Befehl ein:

crontab -e

Wenn Sie crontab zum ersten Mal verwenden, werden Sie möglicherweise dazu aufgefordert, einen Editor auszuwählen. Wählen Sie nano aus, indem Sie die entsprechende Zahl auswählen.

Die Crontab-Datei enthält eine Liste von Cron-Jobs, jeder auf einer separaten Zeile. Jede Zeile besteht aus sechs Feldern:

minute hour day_of_month month day_of_week command
  • minute: Die Minute innerhalb der Stunde, zu der der Job ausgeführt werden soll (0-59).
  • hour: Die Stunde des Tages, zu der der Job ausgeführt werden soll (0-23).
  • day_of_month: Der Tag des Monats, zu dem der Job ausgeführt werden soll (1-31).
  • month: Der Monat des Jahres, zu dem der Job ausgeführt werden soll (1-12).
  • day_of_week: Der Tag der Woche, zu dem der Job ausgeführt werden soll (0-6, wobei 0 Sonntag ist).
  • command: Der Befehl, der ausgeführt werden soll.

Beispielsweise, um das scan.sh-Skript alle Minute auszuführen, fügen Sie der Crontab-Datei die folgende Zeile hinzu:

* * * * * /home/labex/project/scan.sh

Diese Zeile bedeutet:

  • *: Jede Minute
  • *: Jede Stunde
  • *: Jeden Tag des Monats
  • *: Jeden Monat
  • *: Jeden Tag der Woche
  • /home/labex/project/scan.sh: Der auszuführende Befehl (der vollständige Pfad zu unserem Skript)

Wichtig: Im realen Leben ist es im Allgemeinen keine gute Idee, Scans alle Minute auszuführen, da dies den Netzwerkverkehr und die Zielgeräte belasten kann. Im Rahmen der Tests in diesem Labor ist es jedoch akzeptabel, ihn alle Minute auszuführen.

Um die Änderungen zu speichern, drücken Sie Strg+X, dann Y, um zu bestätigen, und anschließend Enter, um die Datei zu speichern.

Sie sollten eine Meldung wie "crontab: installing new crontab" sehen. Dies bedeutet, dass der Cron-Job erfolgreich geplant wurde.

Cron-Jobs werden normalerweise im Hintergrund ausgeführt und geben keine Ausgabe aus. Um die Ausgabe des scan.sh-Skripts zu sehen, können Sie sie in eine Datei umleiten. Beispielsweise können Sie den Cron-Job-Eintrag wie folgt ändern, um die Ausgabe in eine Datei namens scan.log im Verzeichnis ~/project umzuleiten:

* * * * * /home/labex/project/scan.sh > /home/labex/project/scan.log 2>&1

Der Teil > /home/labex/project/scan.log leitet die Standardausgabe in die Datei scan.log um, und 2>&1 leitet die Standardfehlerausgabe in die selbe Datei um.

Automatisierung im Xfce-Terminal überprüfen

In diesem Schritt werden wir überprüfen, ob das scan.sh-Skript von cron automatisch ausgeführt wird. Da wir das Skript so geplant haben, dass es alle Minute ausgeführt wird, sollten wir Anzeichen seiner Ausführung sehen.

Wenn Sie die Ausgabe des Skripts in eine Datei umgeleitet haben (z.B. scan.log), können Sie den Inhalt dieser Datei überprüfen, um zu sehen, ob das Skript läuft. Geben Sie im Terminal folgenden Befehl ein:

tail /home/labex/project/scan.log

Dieser Befehl wird die letzten Zeilen der Datei scan.log anzeigen. Wenn das Skript richtig läuft, sollten Sie in der Datei die Ausgabe der Nmap-Scans sehen, die alle Minute aktualisiert wird.

Wenn Sie die Ausgabe nicht in eine Datei umgeleitet haben, werden Sie keine scan.log-Datei haben. In diesem Fall können Sie jetzt eine erstellen und die Cron-Job-Ausgabe darauf umleiten. Bearbeiten Sie die Crontab erneut:

crontab -e

Und ändern Sie den Cron-Job-Eintrag zu:

* * * * * /home/labex/project/scan.sh > /home/labex/project/scan.log 2>&1

Speichern Sie die Crontab-Datei. Dann warten Sie eine oder zwei Minuten und überprüfen Sie die scan.log-Datei erneut mit tail /home/labex/project/scan.log.

Wenn Sie immer noch keine Ausgabe sehen, kann es ein Problem mit dem Skript oder dem Cron-Job geben. Überprüfen Sie Folgendes noch einmal:

  • Stellen Sie sicher, dass das scan.sh-Skript ausführbar ist (chmod +x scan.sh).
  • Stellen Sie sicher, dass der Cron-Job-Eintrag in der Crontab-Datei korrekt ist (crontab -l, um die Cron-Jobs aufzulisten).
  • Stellen Sie sicher, dass der vollständige Pfad zum Skript im Cron-Job-Eintrag verwendet wird (/home/labex/project/scan.sh).
  • Überprüfen Sie auf Fehler im Skript selbst.

Wichtig: Da der Cron-Job alle Minute ausgeführt wird, wird die scan.log-Datei schnell wachsen. Sie sollten den Cron-Job möglicherweise entfernen, nachdem Sie überprüft haben, dass er richtig funktioniert, um die Festplattenplatzbelegung zu vermeiden. Sie können den Cron-Job entfernen, indem Sie die Crontab-Datei bearbeiten (crontab -e) und die Zeile, die Sie hinzugefügt haben, löschen.

Zusammenfassung

In diesem Labor haben wir gelernt, wie man Nmap-Scans mit Shell-Skripten und cron automatisieren kann. Zunächst haben wir ein einfaches Shell-Skript namens scan.sh erstellt, das einen Nmap SYN-Scanbefehl für eine bestimmte IP-Adresse enthält. Anschließend haben wir chmod +x scan.sh verwendet, um das Skript ausführbar zu machen, was uns ermöglicht, es direkt aus dem Terminal auszuführen.

Als Nächstes haben wir das Skript erweitert, um mehrere Scans mit einem Texteditor zu erstellen. Schließlich haben wir das Skript so geplant, dass es automatisch mit cron ausgeführt wird, eine Cron-Job-Konfiguration mit crontab -e vorgenommen und die Automatisierung im Xfce-Terminal überprüft. Dies hat gezeigt, wie man Netzwerkscanningstasks für regelmäßige Überwachungen oder Sicherheitsbewertungen automatisieren kann.