Einleitung
Nikto ist ein beliebter 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.
Beim Scannen von Webservern, insbesondere über langsame oder unzuverlässige Netzwerke oder gegen Server, die stark ausgelastet sind, können Anfragen lange dauern, bis sie abgeschlossen sind. Standardmäßig wartet Nikto 10 Sekunden auf eine Antwort. Wenn ein Server langsamer als dies ist, kann Nikto Timeout-Fehler melden und den Scan nicht ordnungsgemäß abschließen.
In diesem Lab lernen Sie, wie Sie die Option -timeout von Nikto verwenden, um die Anforderungs-Timeout-Periode zu steuern. Dies ermöglicht es Ihnen, das Verhalten von Nikto anzupassen, um langsame oder nicht reagierende Webserver erfolgreich zu scannen.
Identifizieren eines langsamen oder nicht reagierenden Webservers
In diesem Schritt lernen Sie, wie Sie feststellen, ob ein Webserver langsam ist. Bevor Sie Timeouts in einem Scan-Tool anpassen, ist es entscheidend, zuerst die typische Antwortzeit des Servers zu messen. Eine einfache Methode hierfür ist der Befehl curl.
Wir haben im Hintergrund einen Webserver gestartet, der absichtlich langsam ist; er wartet 5 Sekunden, bevor er eine Antwort sendet. Verwenden wir curl, um zu messen, wie lange es dauert, eine Antwort von ihm zu erhalten. Das Flag -w ermöglicht es uns, die Ausgabe zu formatieren, und %{time_total} ist eine Variable, die die Gesamtzeit für die Transaktion speichert.
Führen Sie den folgenden Befehl in Ihrem Terminal aus, um die Antwortzeit des lokalen Servers, der auf Port 8000 läuft, zu messen:
curl -o /dev/null -s -w 'Total time: %{time_total}\n' http://localhost:8000
Sie sehen eine Ausgabe, die der folgenden ähnelt. Die Zeit wird aufgrund der künstlichen Verzögerung, die wir im Server hinzugefügt haben, etwas über 5 Sekunden liegen.
Total time: 5.00...
Dies bestätigt, dass der Server langsam ist und länger als einige Sekunden zum Antworten benötigt. Diese Information ist entscheidend für die Festlegung eines geeigneten Timeouts in Nikto.
Verwenden der Option -timeout, um ein kurzes Timeout in Sekunden festzulegen
In diesem Schritt lernen Sie die Option -timeout von Nikto kennen. Mit dieser Option können Sie die Anzahl der Sekunden angeben, die Nikto auf den Abschluss einer einzelnen Anfrage wartet, bevor es aufgibt und diese als Timeout markiert. Der Standardwert beträgt 10 Sekunden.
Um zu verstehen, wie sich Nikto bei einem falsch konfigurierten Timeout verhält, werden wir absichtlich einen Wert festlegen, der für unseren langsamen Server zu kurz ist. Da wir wissen, dass der Server etwa 5 Sekunden zum Antworten benötigt, setzen wir ein Timeout von 2 Sekunden. Dies führt dazu, dass der Scan mit Timeout-Fehlern fehlschlägt, was wir im nächsten Schritt beobachten werden.
Zuerst bestätigen wir die Existenz und Beschreibung der Option -timeout mithilfe des Hilfemenüs von Nikto. Sie können die Ausgabe von nikto -Help an grep weiterleiten, um die spezifische Option zu finden.
nikto -Help | grep timeout
Die Ausgabe zeigt Ihnen die Option -timeout und ihre Beschreibung:
-timeout <secs> Timeout für Anfragen (Standard 10 Sekunden)
Dies bestätigt die Verwendung der Option. Im nächsten Schritt werden wir sie in einem echten Scan anwenden.
Scannen ausführen und potenzielle Timeout-Fehler beobachten
In diesem Schritt führen Sie den Nikto-Scan mit dem von uns festgelegten kurzen Timeout-Wert aus. Dies zeigt, was passiert, wenn das Timeout für den Zielserver nicht ausreicht.
Führen Sie den folgenden Befehl aus, um den lokalen Server mit einem Timeout von 2 Sekunden zu scannen. Das Flag -h gibt den Host an und -p den Port.
nikto -h localhost -p 8000 -timeout 2
Während des Scans sehen Sie mehrere Fehlermeldungen, die auf der Konsole ausgegeben werden. Nikto versucht, Anfragen zu stellen, aber da der Server 5 Sekunden zum Antworten benötigt, wird das 2-Sekunden-Timeout jedes Mal überschritten.
Die Ausgabe wird mit Fehlern gefüllt sein, die diesem ähneln:
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 8000
+ Start Time: ...
---------------------------------------------------------------------------
+ Server: No banner retrieved
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ ERROR: Connection timed out
+ ERROR: Connection timed out
... (viele weitere Fehler) ...
Die wiederholten Meldungen ERROR: Connection timed out sind ein klares Zeichen dafür, dass der Timeout-Wert zu niedrig ist. Die Scan-Ergebnisse sind unzuverlässig, und viele Tests werden wahrscheinlich übersprungen.
Erhöhen Sie den Timeout-Wert für einen zuverlässigeren Scan
In diesem Schritt beheben Sie das Problem aus dem vorherigen Schritt, indem Sie einen geeigneten Timeout-Wert festlegen. Um einen zuverlässigen Scan zu gewährleisten, muss das Timeout länger sein als die längste erwartete Antwortzeit des Servers.
Aus unserem curl-Test in Schritt 1 wissen wir, dass der Server etwa 5 Sekunden zum Antworten benötigt. Um sicherzugehen, sollten wir einen kleinen Puffer hinzufügen. Wir setzen das Timeout auf 7 Sekunden. Dies gibt dem Server genügend Zeit, die Anfrage zu verarbeiten und eine Antwort zu senden.
Führen Sie den Nikto-Scan erneut aus, diesmal jedoch mit einem Timeout von 7 Sekunden:
nikto -h localhost -p 8000 -timeout 7
Diesmal sollten Sie ein anderes Ergebnis sehen. Der Scan wird ohne die Fehlermeldungen "Connection timed out" fortgesetzt. Nikto kann nun ordnungsgemäß mit dem Server kommunizieren und seine Tests durchführen.
Die Ausgabe wird eher einem normalen, erfolgreichen Scan ähneln:
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 8000
+ Start Time: ...
---------------------------------------------------------------------------
+ Server: Python/3.10.6 http.server/0.6
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ No CGI directories found (use '-C all' to force check all possible dirs)
+ "robots.txt" not found.
...
Beachten Sie das Fehlen von Timeout-Fehlern und das Vorhandensein eines Server-Banners. Dies deutet darauf hin, dass der Scan nun zuverlässig läuft.
Ermitteln eines optimalen Timeout-Werts für das Zielnetzwerk
In diesem Schritt besprechen wir die Strategie zur Ermittlung eines optimalen Timeout-Werts. Während wir in unserer kontrollierten Umgebung eine bekannte Verzögerung verwendet haben, kennen Sie in einem realen Szenario nicht die genaue Antwortzeit.
Das Finden des optimalen Timeouts ist ein Kompromiss:
- Zu kurz: Führt zu Timeout-Fehlern und einem unzuverlässigen Scan (wie in Schritt 3 gesehen).
- Zu lang: Kann den Scan unnötig verlangsamen, wenn der Server tatsächlich schnell ist. Wenn Sie beispielsweise ein Timeout von 30 Sekunden für einen Server festlegen, der normalerweise in 1 Sekunde antwortet, warten Sie bei jeder tatsächlich fehlgeschlagenen Anfrage 30 Sekunden, was den gesamten Scan verlangsamt.
Eine gute Strategie ist:
- Führen Sie eine Basis-Messung mit
pingodercurldurch, um die allgemeine Latenz zu verstehen. - Beginnen Sie mit einem Timeout, der einige Sekunden länger ist als Ihre Basis-Messung.
- Wenn Sie immer noch Timeout-Fehler sehen, erhöhen Sie den Wert schrittweise, bis der Scan reibungslos läuft.
Für unseren Server funktionierte ein Timeout von 7 Sekunden gut. Lassen Sie uns einen letzten Scan mit einem etwas großzügigeren Timeout von 10 Sekunden (dem Nikto-Standard) durchführen und auch die Option -maxtime einführen, die die Gesamtdauer des Scans begrenzt. Dies ist nützlich, um sicherzustellen, dass ein Scan auf einer sehr großen Website nicht stundenlang läuft.
nikto -h localhost -p 8000 -timeout 10 -maxtime 60s
Dieser Befehl weist Nikto an, bis zu 10 Sekunden auf jede Anfrage zu warten und den gesamten Scan abzubrechen, wenn er länger als 60 Sekunden dauert. Diese Kombination gibt Ihnen die Kontrolle sowohl über die einzelnen Anfrage-Timings als auch über die gesamte Scan-Dauer.
Zusammenfassung
In diesem Lab haben Sie gelernt, wie Sie Request-Timeouts in Nikto effektiv verwalten können, eine entscheidende Fähigkeit für die Durchführung zuverlässiger Web-Schwachstellen-Scans.
Sie haben damit begonnen, einen langsamen Webserver zu identifizieren, indem Sie den curl-Befehl verwendet haben, um seine Antwortzeit zu messen. Anschließend haben Sie die -timeout-Option von Nikto erkundet, diese zunächst auf einen zu niedrigen Wert gesetzt, was zu Verbindungsfehlern führte. Anschließend haben Sie das Timeout auf einen geeigneten Wert erhöht, wodurch der Scan erfolgreich abgeschlossen werden konnte.
Schließlich haben Sie die Strategie zur Ermittlung eines optimalen Timeout-Werts kennengelernt, indem Sie die Zuverlässigkeit und Effizienz des Scans abgewogen haben, und Sie wurden mit der verwandten Option -maxtime zur Steuerung der gesamten Scan-Dauer vertraut gemacht. Die richtige Konfiguration dieser Einstellungen stellt sicher, dass Ihre Nikto-Scans sowohl gründlich als auch zeitnah sind.


