Einen grundlegenden Webserver-Scan mit Nikto durchführen

Kali LinuxBeginner
Jetzt üben

Einleitung

Nikto ist ein Open-Source-Webserver-Scanner, der umfassende Tests gegen Webserver für mehrere Elemente durchführt, darunter über 6700 potenziell gefährliche Dateien/Programme, Prüfungen auf veraltete Versionen von über 1250 Servern und versionsspezifische Probleme auf über 270 Servern. Er prüft auch Serverkonfigurationselemente wie das Vorhandensein mehrerer Indexdateien und HTTP-Serveroptionen.

In diesem Lab lernen Sie die Grundlagen der Verwendung von Nikto für einen grundlegenden Scan. Wir beginnen mit der Einrichtung eines einfachen lokalen Webservers als Ziel und verwenden dann Nikto, um ihn zu scannen und die Ergebnisse zu analysieren.

Identifizieren der Ziel-IP-Adresse oder des Hostnamens

In diesem Schritt identifizieren und bestätigen wir die Adresse unseres Ziel-Webservers. Bevor Sie einen Scan durchführen, müssen Sie die IP-Adresse oder den Hostnamen des Ziels kennen. Für dieses Lab hat das Setup-Skript bereits einen einfachen Webserver auf Ihrem lokalen Rechner gestartet.

Im Netzwerk-Kontext kann Ihr eigener Rechner mit dem Hostnamen localhost oder der IP-Adresse 127.0.0.1 angesprochen werden. Diese spezielle Adresse ist eine "Loopback"-Adresse, was bedeutet, dass sie immer auf den lokalen Rechner zurückverweist.

Lassen Sie uns überprüfen, ob unser Webserver läuft und erreichbar ist. Wir können den Befehl curl verwenden, um eine Anfrage an unseren lokalen Server zu senden. Der Server läuft auf Port 8000.

Führen Sie den folgenden Befehl in Ihrem Terminal aus:

curl http://localhost:8000

Sie sollten den HTML-Inhalt unserer einfachen Webseite sehen, was bestätigt, dass der Server aktiv und bereit für den Scan ist.

<h1>Welcome to the Test Server</h1>

Nachdem wir unser Ziel unter localhost:8000 bestätigt haben, können wir mit dem nächsten Schritt fortfahren.

Erstellen des grundlegenden Scan-Befehls mit dem Flag -h

In diesem Schritt lernen wir, wie man einen grundlegenden Nikto-Scan-Befehl erstellt. Nikto hat viele Optionen, aber die grundlegendste ist die Angabe des Zielhosts.

Das Flag -h oder -host wird verwendet, um Nikto mitzuteilen, welchen Server gescannt werden soll. Um sich mit dieser und anderen Optionen vertraut zu machen, können Sie das Hilfemenü von Nikto aufrufen.

Führen Sie den folgenden Befehl aus, um die Hilfeinformationen anzuzeigen:

nikto -Help

Die Ausgabe wird ziemlich lang sein und alle verfügbaren Optionen auflisten. Scrollen Sie durch sie oder verwenden Sie die Suchfunktion Ihres Terminals, um die Option -h zu finden. Sie werden eine Beschreibung ähnlich dieser sehen:

...
-h, -host       Zielhost/IP/SSL-Name
...

Da unser Server nicht auf dem Standard-HTTP-Port (80) läuft, müssen wir auch die Portnummer angeben. Dies können wir mit dem Flag -p oder -port tun.

Basierend darauf wäre der Befehl zum Scannen unseres lokalen Servers auf Port 8000 nikto -h localhost -p 8000. Diesen Befehl werden wir im nächsten Schritt ausführen.

Ausführen des Scans gegen den Zielserver

In diesem Schritt führen Sie den Nikto-Scan mit dem von uns erstellten Befehl aus. Dies initiiert den Scanvorgang, bei dem Nikto eine Reihe von Anfragen an den Zielserver sendet, um potenzielle Probleme zu ermitteln.

Führen Sie nun den Scan gegen Ihren lokalen Webserver aus.

nikto -h localhost -p 8000

Sobald Sie den Befehl ausführen, beginnt Nikto mit dem Scan. Zuerst werden einige grundlegende Informationen über das Ziel angezeigt, und dann beginnt es mit der Ausführung seiner Tests. Der Vorgang kann einige Augenblicke dauern. Sie sehen die Ergebnisse in Echtzeit direkt in Ihrem Terminal ausgegeben.

Beobachten der Echtzeit-Ausgabe während des Scans

In diesem Schritt untersuchen wir die vom Nikto-Scan generierte Ausgabe. Während des Scans berichtet Nikto über seine Ergebnisse. Jedes Ergebnis ist typischerweise mit einem Pluszeichen (+) versehen.

Die Ausgabe aus dem vorherigen Schritt sollte ähnlich wie die folgende aussehen. Beachten Sie, dass die Versionsnummern und Zeiten variieren werden.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        8000
+ Start Time:         2023-10-27 10:30:00 (GMT0)
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.12
+ Der Anti-Clickjacking-Header X-Frame-Options ist nicht vorhanden.
+ Der Header X-XSS-Protection ist nicht definiert. Dieser Header kann den User-Agenten zum Schutz vor einigen Formen von XSS anleiten.
+ Der Header X-Content-Type-Options ist nicht gesetzt. Dies könnte dem User-Agenten erlauben, den Inhalt der Website anders als den MIME-Typ darzustellen.
+ Keine CGI-Verzeichnisse gefunden (verwenden Sie '-C all', um die Überprüfung aller möglichen Verzeichnisse zu erzwingen)
+ Erlaubte HTTP-Methoden: GET, HEAD, OPTIONS
+ OSVDB-3233: /: HTTP TRACE-Methode ist aktiv, was darauf hindeutet, dass der Host anfällig für XST ist
...
+ 1 Host(s) getestet

Nehmen Sie sich einen Moment Zeit, um die Ausgabe durchzulesen. Sie können sehen, dass Nikto die Server-Software identifiziert, nach wichtigen Sicherheitsheadern (wie X-Frame-Options) sucht, erlaubte HTTP-Methoden auflistet und potenzielle Schwachstellen meldet. Diese Informationen sind entscheidend für das Verständnis der Sicherheitslage eines Servers.

Identifizieren des Server-Banners und der Versionsinformationen

In diesem Schritt konzentrieren wir uns auf eine der wichtigsten Informationen, die Nikto liefert: das Server-Banner. Ein Server-Banner ist eine Textzeichenfolge, die vom Webserver in seinen Antwortheadern gesendet wird und typischerweise die Server-Software und ihre Version identifiziert.

Angreifer nutzen diese Informationen, um bekannte Schwachstellen zu finden, die mit einer bestimmten Softwareversion verbunden sind. In Ihren Scanergebnissen aus dem vorherigen Schritt sollten Sie eine Zeile sehen, die mit + Server: beginnt.

+ Server: SimpleHTTP/0.6 Python/3.10.12

Diese Zeile teilt uns mit, dass der Webserver SimpleHTTP/0.6 ist, der auf Python/3.10.12 läuft.

Um das Isolieren spezifischer Informationen aus einer größeren Ausgabe zu üben, können Sie den Scan erneut ausführen und den Befehl grep verwenden, um die Ergebnisse zu filtern und nur die Zeile anzuzeigen, die "Server" enthält.

Führen Sie den folgenden Befehl aus:

nikto -h localhost -p 8000 | grep Server

Dieser Befehl leitet die Ausgabe von Nikto an grep weiter, das dann nur die Zeilen filtert und anzeigt, die das Wort "Server" enthalten. Dies ist eine sehr nützliche Technik zum Parsen großer Log-Dateien oder Befehlsausgaben. Ihre Ausgabe sollte die einzelne Zeile sein, die den Server identifiziert.

+ Server: SimpleHTTP/0.6 Python/3.10.12

Zusammenfassung

In diesem Lab haben Sie erfolgreich einen grundlegenden Webserver-Scan mit Nikto durchgeführt. Sie haben gelernt, wie man ein Ziel identifiziert, einen grundlegenden Scan-Befehl mit den Flags -h und -p erstellt und ihn ausführt. Sie haben auch geübt, die Echtzeit-Ausgabe zu beobachten und spezifische Informationen, wie das Server-Banner, mit Tools wie grep zu isolieren.

Dies ist erst der Anfang dessen, was Nikto leisten kann. Es verfügt über eine riesige Auswahl an Optionen für gezieltere und tiefere Scans, einschließlich SSL-Prüfungen, Abfragen der Schwachstellendatenbank und verschiedener Ausgabeformate. Sie sind nun mit dem grundlegenden Wissen ausgestattet, um diese erweiterten Funktionen zu erkunden und Ihre Fähigkeiten im Bereich Web-Sicherheitstests zu verbessern.