Nikto-Scan zur Fehlerbehebung debuggen

Kali LinuxBeginner
Jetzt üben

Einleitung

Nikto ist ein beliebter Open-Source-Webserver-Scanner, der umfassende Tests gegen Webserver für verschiedene 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.

Obwohl Nikto leistungsstark ist, können Scans manchmal fehlschlagen, unerwartete Ergebnisse liefern oder eine tiefere Untersuchung erfordern. In diesen Situationen sind die Debugging-Funktionen von Nikto von unschätzbarem Wert. Sie ermöglichen es Ihnen, die exakten gesendeten HTTP-Anfragen und die empfangenen Antworten zu sehen, was Ihnen hilft, Netzwerkprobleme, Server-Fehlkonfigurationen oder Probleme mit dem Scan selbst zu identifizieren.

In diesem Lab lernen Sie, wie Sie die Debugging-Optionen von Nikto nutzen, um Ihre Web-Schwachstellen-Scans effektiv zu beheben und zu verstehen.

Scan mit der Option -debug ausführen

In diesem Schritt führen Sie einen grundlegenden Nikto-Scan mit der Option -debug durch. Diese Option liefert eine sehr ausführliche Ausgabe, die die vollständigen Details jeder von Nikto gesendeten Anfrage und der entsprechenden Antwort des Servers anzeigt. Dies ist der erste und wichtigste Schritt zur Fehlerbehebung bei jedem Scan.

Stellen Sie zunächst sicher, dass Sie sich im Verzeichnis ~/project befinden. Wir haben für Sie bereits einen einfachen Webserver eingerichtet, der auf 127.0.0.1 auf Port 8000 läuft und gescannt werden kann.

Führen Sie den folgenden Befehl aus, um Nikto mit der Option -debug gegen den lokalen Webserver auszuführen:

nikto -h http://127.0.0.1:8000 -debug

Sie werden sehen, wie eine große Menge an Ausgaben durchläuft. Dies sind die Debugging-Informationen. Sie enthalten die Standard-Scanergebnisse von Nikto, gemischt mit detaillierten Anfrage- und Antwortdaten.

Ein kleiner Teil der Ausgabe wird in etwa so aussehen und die rohe HTTP-Kommunikation zeigen:

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    127.0.0.1
+ Target Port:        8000
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.12
+ Der Anti-Clickjacking-Header X-Frame-Options fehlt.
+ Der Header X-Content-Type-Options ist nicht gesetzt. Dies könnte dem User-Agenten ermöglichen, 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)
DEBUG: User-Agent is 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
DEBUG: Request -> 127.0.0.1:8000
GET / HTTP/1.1
Host: 127.0.0.1:8000
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
Accept-Encoding: gzip,deflate
Accept: */*


DEBUG: Response -> 127.0.0.1:8000
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.10.12
Date: ...
Content-type: text/html; charset=utf-8
Content-Length: 36
Last-Modified: ...

DEBUG: Received: <h1>Welcome to the Test Site</h1>

... (viele weitere Zeilen) ...

Diese detaillierte Ansicht ist unerlässlich, um genau zu verstehen, was Nikto testet.

Detaillierte Anfrage- und Antwortinformationen beobachten

In diesem Schritt werden Sie die im vorherigen Schritt generierte Ausgabe genauer betrachten. Die schiere Menge an Debugging-Informationen kann überwältigend sein, daher ist es hilfreich, ein Pager-Tool wie less zur Überprüfung zu verwenden.

Führen wir den Befehl erneut aus, aber diesmal leiten wir die Ausgabe an less weiter. Dies ermöglicht es Ihnen, die Ausgabe Seite für Seite durchzuscrollen.

nikto -h http://127.0.0.1:8000 -debug | less

Sobald die Ausgabe in less erscheint, können Sie die folgenden Tasten zur Navigation verwenden:

  • Pfeiltasten oder j/k zum Scrollen nach oben und unten.
  • Bild auf/Bild ab oder Leertaste zum seitenweisen Blättern.
  • q zum Beenden und Zurückkehren zur Eingabeaufforderung.

Achten Sie beim Scrollen auf diese wichtigen Teile der Debug-Ausgabe für jeden Test:

  • DEBUG: Request ->: Dieser Abschnitt zeigt die exakte gesendete HTTP-Anfrage, einschließlich der Methode (GET, POST usw.), der URI und aller Header.
  • DEBUG: Response ->: Dies zeigt die Antwort-Header des Servers, einschließlich des HTTP-Statuscodes (z. B. 200 OK, 404 Not Found).
  • DEBUG: Received:: Dies zeigt den Körper der HTTP-Antwort vom Server.

Durch die Untersuchung dieser Informationen können Sie überprüfen, ob der Server wie erwartet antwortet, ob eine Firewall Anfragen blockiert oder ob Nikto eine Antwort korrekt interpretiert.

Drücken Sie q, um less zu beenden, wenn Sie mit der Beobachtung fertig sind.

Debug-Ausgabe zur späteren Analyse in eine Datei umleiten

In diesem Schritt lernen Sie, wie Sie die ausführliche Debug-Ausgabe in einer Datei speichern. Bei langen oder komplexen Scans ist die Echtzeitanalyse der Ausgabe unpraktisch. Das Speichern in einer Datei ermöglicht eine Offline-Analyse, Suche und Weitergabe an Teammitglieder.

Nikto's Debug-Informationen werden an den Standard-Fehlerstrom (STDERR) gesendet, während normale Ergebnisse an die Standardausgabe (STDOUT) gehen. Um alles zu erfassen, müssen Sie beide Streams in eine Datei umleiten.

Verwenden Sie den folgenden Befehl, um den Scan auszuführen und die gesamte Ausgabe in einer Datei namens debug_output.txt zu speichern:

nikto -h http://127.0.0.1:8000 -debug > debug_output.txt 2>&1

Lassen Sie uns den Umleitungs-Teil aufschlüsseln:

  • >: Dies ist der Operator zur Umleitung der Standardausgabe. Er sendet STDOUT an debug_output.txt.
  • 2>&1: Dies leitet STDERR (Dateideskriptor 2) an denselben Ort wie STDOUT (Dateideskriptor 1) um, nämlich unsere Datei.

Nachdem der Befehl abgeschlossen ist, überprüfen Sie, ob die Datei erstellt wurde:

ls -l debug_output.txt

Sie sollten die Datei in der Ausgabe aufgelistet sehen:

-rw-r--r-- 1 labex labex ... ... debug_output.txt

Nun können Sie den Inhalt der Datei mit cat oder less untersuchen:

less debug_output.txt

Sie haben nun einen permanenten Datensatz des Scans und seiner Debug-Informationen für eine detaillierte Überprüfung. Drücken Sie q, um less zu beenden.

Verwenden Sie -dbcheck zur Überprüfung der Syntax von Scan-Datenbanken

In diesem Schritt verwenden Sie die Option -dbcheck. Dies ist ein Diagnosewerkzeug, das keinen Scan durchführt, sondern stattdessen die Syntax von Nikto's internen Datenbanken und Plugins überprüft. Wenn Nikto abstürzt, nicht startet oder sich unregelmäßig verhält, ist die Ausführung einer Datenbankprüfung ein guter erster Schritt, um sicherzustellen, dass seine eigenen Dateien nicht beschädigt sind.

Die Datenbanken enthalten die Definitionen für alle Schwachstellenprüfungen, die Nikto durchführt. Ein Syntaxfehler in einer dieser Dateien könnte dazu führen, dass Tests stillschweigend fehlschlagen oder das gesamte Programm abstürzt.

Um die Prüfung durchzuführen, führen Sie den folgenden Befehl aus:

nikto -dbcheck

Nikto wird seine Plugin-Dateien und Datenbanken parsen. Wenn alles korrekt ist, wird die Ausgabe bestätigen, dass keine Fehler gefunden wurden.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ DBCheck: Parsing database '/var/lib/nikto/plugins/db_variables'
+ DBCheck: Parsing database '/var/lib/nikto/plugins/db_tests'
... (viele weitere Zeilen) ...
+ DBCheck: 0 error(s) found in database.

Wenn Fehler gefunden wurden, würde die Ausgabe auf die spezifische Datei und Zeilennummer hinweisen, was Ihnen helfen würde, das Problem zu beheben (oder Nikto bei Bedarf neu zu installieren). Dieser einfache Befehl kann viel Zeit bei der Fehlerbehebung des Tools selbst sparen.

Fehlerbehebung bei fehlgeschlagenen Scans mithilfe der Debug-Ausgabe

In diesem Schritt wenden Sie das Gelernte auf ein praktisches Fehlerbehebungsszenario an. Wir simulieren ein häufiges Problem: einen Scan, der fehlschlägt, weil der Zielhost nicht erreichbar ist. Ohne Debug-Ausgabe ist die Ursache möglicherweise nicht sofort ersichtlich.

Wir werden versuchen, eine nicht existierende IP-Adresse im lokalen Netzwerk, 10.255.255.1, zu scannen. Wir werden auch -maxtime 10s verwenden, um sicherzustellen, dass der Scan schnell beendet wird.

Führen Sie den folgenden Befehl aus:

nikto -h 10.255.255.1 -maxtime 10s -debug

Beobachten Sie die Ausgabe sorgfältig. Da der Host nicht existiert, kann Nikto keine Verbindung herstellen. Die Debug-Ausgabe zeigt diese Verbindungsversuche und Fehler deutlich an.

Sie werden Fehlermeldungen wie diese im Debug-Log sehen:

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          10.255.255.1
+ Target Hostname:    10.255.255.1
+ Target Port:        80
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: No banner retrieved
DEBUG: Request -> 10.255.255.1:80
GET / HTTP/1.1
Host: 10.255.255.1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
Accept-Encoding: gzip,deflate
Accept: */*


+ ERROR: Cannot connect to 10.255.255.1:80 (No route to host)
...

Die Schlüsselbotschaft hier ist ERROR: Cannot connect... (No route to host). Dies sagt Ihnen sofort, dass das Problem nicht bei der Konfiguration des Webservers oder einem Fehler in Nikto liegt, sondern bei einem grundlegenden Netzwerkverbindungsproblem. Der Scan schlägt fehl, weil das Ziel nicht erreichbar ist. Dies zeigt, wie die Option -debug den notwendigen Kontext liefert, um die Ursache eines Problems schnell zu diagnostizieren.

Zusammenfassung

In diesem Lab haben Sie die wesentlichen Techniken für das Debugging und die Fehlerbehebung von Nikto-Webserver-Scans gelernt.

Sie haben mit der Option -debug begonnen, um ausführliche Anfrage- und Antwortdaten anzuzeigen, was Ihnen ein klares Bild von den Aktionen des Scanners vermittelt. Anschließend haben Sie gelernt, wie Sie diese Ausgabe verwalten, indem Sie sie zur Offline-Analyse in eine Datei umleiten. Sie haben auch das Dienstprogramm -dbcheck verwendet, um die Integrität der Nikto-eigenen Datenbankdateien zu überprüfen, ein entscheidender Schritt bei der Fehlerbehebung des Tools selbst. Schließlich haben Sie diese Fähigkeiten auf ein reales Szenario angewendet und schnell ein Netzwerkverbindungsproblem als Ursache für einen fehlgeschlagenen Scan identifiziert.

Mit diesen Fähigkeiten sind Sie nun besser gerüstet, um Probleme zu diagnostizieren und zu beheben und sicherzustellen, dass Ihre Nikto-Scans sowohl effektiv als auch zuverlässig sind.