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.
Ein Proxy ist in diesem Kontext ein Vermittlungsserver, der sich zwischen Ihrem Tool (Nikto) und dem Zielserver befindet. Tools wie Burp Suite, OWASP ZAP oder mitmproxy werden üblicherweise dafür verwendet. Das Routing von Nikto-Traffic über einen Proxy ist eine leistungsstarke Technik für Sicherheitsexperten. Sie ermöglicht es Ihnen, genau zu sehen, welche Anfragen der Scanner sendet und welche Antworten er erhält. Dies ist von unschätzbarem Wert für das Debugging von Scans, das Verständnis des Verhaltens eines Scanners und sogar für die Modifizierung von Traffic "on the fly", um Sicherheitsmaßnahmen zu umgehen.
In diesem Lab lernen Sie, wie Sie einen lokalen Proxy einrichten, Nikto für dessen Verwendung konfigurieren, einen Scan durchführen und den abgefangenen Traffic analysieren. Wir werden mitmproxy als unseren Proxy und einen einfachen lokalen Python-Webserver als unser Ziel verwenden.
Lokalen Proxy wie Burp Suite oder OWASP ZAP einrichten
In diesem Schritt starten wir einen einfachen Webserver, der als unser Scan-Ziel dient, und dann mitmproxy, einen leichtgewichtigen Kommandozeilen-Proxy, um unseren Traffic abzufangen. Alle Operationen werden im Terminal durchgeführt.
Zuerst starten wir einen einfachen Python-Webserver. Dieser Server hostet eine einfache index.html-Datei aus unserem aktuellen Verzeichnis, ~/project. Wir werden ihn im Hintergrund auf Port 8000 ausführen, damit wir dasselbe Terminal weiter nutzen können.
Führen Sie den folgenden Befehl aus:
python3 -m http.server 8000 &
Das & am Ende des Befehls führt den Prozess im Hintergrund aus. Sie sollten eine Ausgabe sehen, die die Prozess-ID anzeigt.
Als Nächstes starten wir unseren Proxy. Wir werden mitmweb verwenden, die webbasierte Schnittstelle für mitmproxy. Diese bietet eine benutzerfreundliche Möglichkeit, den erfassten Traffic anzuzeigen. Sie lauscht standardmäßig auf Port 8080 auf Proxy-Traffic und stellt ihre Weboberfläche auf Port 8081 bereit.
Führen Sie den folgenden Befehl aus, um mitmweb ebenfalls im Hintergrund zu starten:
mitmweb --web-host 0.0.0.0 &
Sie werden einige Ausgaben sehen, während mitmweb startet. Nun haben Sie einen Zielserver, der auf Port 8000 läuft, und einen Proxy, der auf Port 8080 läuft. Sie können den Traffic des Proxys anzeigen, indem Sie einen Browser in der Laborumgebung öffnen und zu http://127.0.0.1:8081 navigieren. Vorerst wird dieser leer sein.
Nikto für die Proxy-Nutzung mit -useproxy konfigurieren
In diesem Schritt lernen Sie, wie Sie Nikto anweisen, seinen Traffic über die gerade gestartete mitmproxy-Instanz zu senden. Nikto verfügt zu diesem Zweck über eine spezielle Kommandozeilenoption, -useproxy.
Die Syntax für diese Option lautet -useproxy http://<proxy_host>:<proxy_port>. Da unser mitmproxy auf dem lokalen Rechner (127.0.0.1) auf Port 8080 läuft, lautet die korrekte URL http://127.0.0.1:8080.
Bevor wir einen vollständigen Scan durchführen, machen wir einen einfachen Test, um sicherzustellen, dass Nikto über den Proxy eine Verbindung zum Zielserver herstellen kann. Wir verwenden die Option -Plugins '@@NONE', die Nikto anweist, eine Verbindung herzustellen und das Server-Banner auszugeben, aber keine Schwachstellen-Tests durchzuführen. Dies ist eine schnelle und effektive Methode, um unsere Proxy-Konfiguration zu überprüfen.
Führen Sie den folgenden Befehl in Ihrem Terminal aus:
nikto -h 127.0.0.1 -p 8000 -useproxy http://127.0.0.1:8080 -Plugins '@@NONE'
Sie sollten eine Ausgabe ähnlich der folgenden sehen, die das Nikto-Banner und Informationen über den Zielserver anzeigt:
- Nikto v2.x.x
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: 127.0.0.1
+ Target Port: 8000
+ Start Time: ...
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.6
+ END TIME: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
Wenn Sie nun die mitmweb-Oberfläche in Ihrem Browser unter http://127.0.0.1:8081 überprüfen, sehen Sie die erste von Nikto erfasste Anfrage. Dies bestätigt, dass die Proxy-Konfiguration korrekt funktioniert.
Einen Scan über den konfigurierten Proxy ausführen
In diesem Schritt, nachdem die Proxy-Konfiguration verifiziert wurde, führen Sie nun einen tatsächlichen Schwachstellenscan mit Nikto durch. Dies wird eine erhebliche Menge an Traffic generieren, der vollständig über mitmproxy geleitet und von diesem protokolliert wird.
Um die Scan-Zeit für dieses Labor angemessen zu halten, verwenden wir die Option -Tuning 1. Die Tuning-Option in Nikto steuert die durchgeführten Testarten. -Tuning 1 konzentriert sich auf "Interesting File / Seen in Log"-Prüfungen, was ein guter Ausgangspunkt ist.
Führen Sie den folgenden Befehl aus, um den Scan zu starten:
nikto -h 127.0.0.1 -p 8000 -useproxy http://127.0.0.1:8080 -Tuning 1
Nikto beginnt nun mit dem Scannen des Zielservers. Sie sehen den Fortschritt und alle Ergebnisse direkt in Ihrem Terminal. Die Ausgabe könnte je nach den Ergebnissen etwa so aussehen:
- Nikto v2.x.x
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: 127.0.0.1
+ Target Port: 8000
+ Start Time: ...
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.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
...
+ /: The server returns the following message when a request for a non-existent page is made: b'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"\n "http://www.w3.org/TR/html4/strict.dtd">\n<html>\n <head>\n <meta http-equiv="Content-Type" content="text/html;charset=utf-8">\n <title>Error response</title>\n </head>\n <body>\n <h1>Error response</h1>\n <p>Error code: 404.</p>\n <p>Message: File not found.</p>\n <p>Error code explanation: 404 - Nothing matches the given URI.</p>\n </body>\n</html>'
...
+ END TIME: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
Während der Scan läuft, können Sie zum mitmweb-Browser-Tab wechseln und die Anfragen in Echtzeit beobachten.
Den Nikto-Traffic in der HTTP-Historie des Proxys beobachten
In diesem Schritt konzentrieren Sie sich auf die Analyse des von mitmproxy erfassten Traffics. Hier wird der wirkliche Wert der Verwendung eines Proxys deutlich. Für diesen Schritt sind keine neuen Befehle erforderlich; Sie verwenden die mitmweb-Oberfläche in Ihrem Browser.
Navigieren Sie zum Browser-Tab, auf dem mitmweb unter http://127.0.0.1:8081 läuft. Sie sollten eine lange Liste von Webanfragen sehen. Jeder Eintrag in dieser Liste ist ein spezifischer Test, den Nikto gegen den Zielserver durchgeführt hat.
Klicken Sie auf eine der Anfragen in der Liste auf der linken Seite. Das rechte Panel wird aktualisiert, um die Details dieser spezifischen Anfrage und ihre entsprechende Antwort anzuzeigen.
Erkunden Sie die Oberfläche:
- Request Tab: Hier sehen Sie die exakte HTTP-Anfrage, die von Nikto gesendet wurde. Achten Sie auf:
- Die Request-Zeile (z. B.
GET /some/test/file.html HTTP/1.1). - Den
Host-Header, der auf unseren Zielserver verweist. - Den
User-Agent-Header, der den Client alsNiktoidentifiziert.
- Die Request-Zeile (z. B.
- Response Tab: Dieser Tab zeigt die vollständige Antwort des Servers. Sie können den HTTP-Statuscode (z. B.
200 OKoder404 Not Found), die Antwort-Header und den Antwort-Body sehen.
Nehmen Sie sich ein paar Minuten Zeit, um verschiedene Anfragen durchzuklicken. Sie werden sehen, wie Nikto versucht, auf gängige administrative Verzeichnisse (wie /admin/) zuzugreifen, nach Backup-Dateien (wie /index.html.bak) sucht und andere Standardprüfungen durchführt. Durch die Beobachtung dieses Traffics erhalten Sie ein tiefes Verständnis dafür, wie ein Schwachstellenscanner funktioniert.
Analysieren, wie sich der Proxy auf die Scan-Ergebnisse auswirkt
In diesem Schritt analysieren Sie, wie die Verwendung eines Proxys einen Scan potenziell beeinflussen kann. Dazu benötigen Sie eine Basislinie zum Vergleich. Sie führen denselben Nikto-Scan erneut aus, diesmal jedoch ohne den Proxy.
Führen Sie denselben Scan-Befehl wie in Schritt 3 aus, lassen Sie jedoch die Option -useproxy weg:
nikto -h 127.0.0.1 -p 8000 -Tuning 1
Beobachten Sie die Ausgabe in Ihrem Terminal. Vergleichen Sie nun die Ergebnisse dieses Scans mit den Ergebnissen des proxysierten Scans aus Schritt 3. In unserer einfachen Laborumgebung, ohne Firewalls oder andere Sicherheitssysteme, sollten die Ergebnisse identisch sein.
Was also ist der Sinn des Proxys?
- Sichtbarkeit (Debugging): Wie Sie im vorherigen Schritt gesehen haben, ist der Hauptvorteil die Sichtbarkeit. Wenn ein Scan fehlschlägt oder unerwartete Ergebnisse liefert, wäre der Proxy der erste Ort, an dem Sie nachsehen, um zu verstehen, was schief läuft. Sie können die rohen Anfragen und Antworten sehen, was für die Fehlerbehebung unerlässlich ist.
- Leistung: Ein Proxy fügt dem Netzwerkverkehr einen zusätzlichen "Hop" hinzu, der eine geringe Latenz einführen kann. Bei sehr großen Scans könnte dies die gesamte Scan-Zeit geringfügig erhöhen.
- Modifikation (Fortgeschritten): Fortgeschrittene Proxys können so konfiguriert werden, dass sie den Traffic modifizieren. Sie könnten beispielsweise eine Regel einrichten, um den
User-Agentvon "Nikto" automatisch in eine gängige Browser-Zeichenkette zu ändern. Dies könnte verwendet werden, um eine einfache Web Application Firewall (WAF) zu umgehen, die Anfragen basierend auf dem Nikto-User-Agent blockiert. Obwohl wir in diesem Labor keine Modifikation durchführen, ist das Verständnis dieser Fähigkeit entscheidend.
Zusammenfassend lässt sich sagen, dass die Hauptwirkung des Proxys in diesem Labor darin bestand, Ihnen eine "Man-in-the-Middle"-Sicht auf den Scan-Prozess zu ermöglichen, was eine grundlegende Fähigkeit für Sicherheitstests ist.
Zusammenfassung
In diesem Labor haben Sie erfolgreich gelernt, wie Sie einen Proxy nutzen können, während Sie einen Web-Schwachstellenscan mit Nikto durchführen.
Sie haben mit der Einrichtung der notwendigen Umgebung begonnen, einschließlich eines einfachen Python-Webservers als Ziel und mitmproxy als Ihrem Abfang-Proxy. Anschließend haben Sie gelernt, die Kommandozeilenoption -useproxy von Nikto zu verwenden, um den gesamten Scan-Traffic über den Proxy zu leiten.
Durch das Ausführen eines Scans und die Beobachtung des Traffics in der mitmweb-Oberfläche erhielten Sie direkte Einblicke in die Arten von Anfragen, die Nikto sendet, und die Antworten, die es erhält. Schließlich haben Sie durch das Ausführen eines Vergleichsscans ohne den Proxy analysiert, wie sich ein Proxy auf einen Scan auswirken kann, und sind zu dem Schluss gekommen, dass seine Hauptrolle in diesem Kontext die Bereitstellung kritischer Sichtbarkeit für Analyse und Debugging ist. Dies ist eine grundlegende Technik, die von Sicherheitsexperten verwendet wird, um ihre Testwerkzeuge besser zu verstehen und zu steuern.


