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.
Während Nikto problemlos Standard-HTTP-Websites scannen kann, erfordert das Scannen von Websites, die SSL/TLS (HTTPS) verwenden, eine spezielle Option. In diesem Lab lernen Sie, wie Sie Nikto zum Scannen einer SSL/TLS-aktivierten Website verwenden. Wir werden zu Testzwecken einen lokal gehosteten, sicheren Webserver verwenden. Sie lernen, wie Sie einen SSL-Scan initiieren, ihn auf einen bestimmten Port richten und die SSL-bezogenen Informationen in den Scan-Ergebnissen interpretieren.
Ziel-Website über HTTPS identifizieren
In diesem Schritt bestätigen wir, dass unser sicherer Ziel-Webserver läuft und zugänglich ist. Das Setup-Skript für dieses Lab hat bereits einen einfachen Python-Webserver gestartet, der SSL/TLS verwendet. Er lauscht auf localhost auf Port 4433.
Um zu überprüfen, ob der Server läuft, können wir den curl-Befehl verwenden. Da unser Server ein selbstsigniertes Zertifikat verwendet (das von keiner Zertifizierungsstelle vertrauenswürdig ist), müssen wir das Flag -k oder --insecure mit curl verwenden, um anzuweisen, trotz des nicht vertrauenswürdigen Zertifikats fortzufahren.
Führen Sie den folgenden Befehl in Ihrem Terminal aus:
curl -k https://localhost:4433
Sie sollten den HTML-Inhalt der Hauptseite des Servers sehen, was bestätigt, dass der Server aktiv ist und Inhalte über HTTPS bereitstellt.
<html><body><h1>Welcome to the Secure Test Server!</h1></body></html>
Nachdem wir nun bestätigt haben, dass unser Ziel betriebsbereit ist, können wir mit dem Scannen fortfahren.
Das Flag -ssl zur Aktivierung des SSL-Modus verwenden
In diesem Schritt lernen wir, warum das Flag -ssl für das Scannen von HTTPS-Sites unerlässlich ist. Standardmäßig versucht Nikto, Ziele über Standard-HTTP auf Port 80 zu scannen. Wenn Sie es auf einen Port richten, der eine SSL/TLS-Verbindung erwartet, ohne die Verwendung von SSL anzugeben, schlägt der Scan fehl, da der anfängliche Kommunikations-Handshake falsch ist.
Versuchen wir, Nikto gegen unseren sicheren Server auf Port 4433 ohne das Flag -ssl auszuführen, um dieses Verhalten zu beobachten.
nikto -h localhost -p 4433
Sie sehen eine Ausgabe, die darauf hinweist, dass kein Webserver gefunden wurde, oder Sie erhalten möglicherweise eine Fehlermeldung. Dies liegt daran, dass Nikto versucht, HTTP mit einem Port zu sprechen, der auf HTTPS lauscht.
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 4433
---------------------------------------------------------------------------
+ Start Time: ...
---------------------------------------------------------------------------
+ ERROR: No web server found on localhost:4433
---------------------------------------------------------------------------
+ 0 host(s) tested
Dies verdeutlicht die Notwendigkeit des Flags -ssl. Dieses Flag weist Nikto ausdrücklich an, seine Webanfragen in eine SSL/TLS-Schicht einzubetten, wodurch es mit sicheren Servern kommunizieren kann. Im nächsten Schritt werden wir dieses Flag verwenden, um einen ordnungsgemäßen Scan durchzuführen.
Scan gegen das HTTPS-Ziel ausführen
In diesem Schritt führen Sie einen ordnungsgemäßen Schwachstellenscan gegen unseren sicheren Webserver mit dem Flag -ssl durch. Durch die Kombination der Flags -h (Host), -p (Port) und -ssl können wir Nikto anweisen, sich mit dem richtigen Host und Port zu verbinden und eine SSL/TLS-Verbindung zu verwenden.
Führen Sie den folgenden Befehl in Ihrem Terminal aus, um den Scan zu starten:
nikto -h localhost -p 4433 -ssl
Nikto wird nun mit dem Scan beginnen. Da unser Server ein selbstsigniertes Zertifikat verwendet, wird Nikto wahrscheinlich eine Warnung anzeigen, dass der Zertifikatsaussteller nicht vertrauenswürdig ist, was in diesem Fall erwartet wird. Der Scan wird dann fortgesetzt.
Die Ausgabe wird in etwa wie folgt aussehen:
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 4433
+ SSL Info: Self-signed certificate.
+ Start Time: ...
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.12
+ 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
...
+ 1 host(s) tested
Sie haben nun erfolgreich eine SSL-fähige Website mit Nikto gescannt.
SSL-spezifische Prüfungen in der Ausgabe beobachten
In diesem Schritt analysieren wir die Ausgabe des vorherigen Scans, um Informationen zu identifizieren, die spezifisch für SSL/TLS-Verbindungen sind. Wenn das Flag -ssl verwendet wird, scannt Nikto nicht nur auf allgemeine Web-Schwachstellen, sondern liefert auch Details zur SSL/TLS-Zertifikat und -Konfiguration des Servers.
Wenn Sie in der Ausgabe des Befehls aus dem vorherigen Schritt zurückscrollen, finden Sie Informationen zum SSL-Zertifikat. Um diese Informationen zu isolieren, können Sie den Scan erneut ausführen und grep verwenden, um die Ausgabe zu filtern. Suchen wir nach der Zeile "Subject" des Zertifikats.
nikto -h localhost -p 4433 -ssl | grep "Subject"
Dieser Befehl führt den Scan erneut aus, zeigt aber nur Zeilen an, die das Wort "Subject" enthalten.
+ Subject: C=US, ST=California, L=MountainView, O=LabEx, OU=IT, CN=localhost
Diese Zeile zeigt die Details, die im SSL-Zertifikat des Servers eingebettet sind, wie z. B. das Land (C), den Bundesstaat (ST) und den Common Name (CN). Diese Informationen können bei der Überprüfung der Identität eines Servers während einer Sicherheitsbewertung nützlich sein. Nikto prüft auch auf Cipher-Informationen und andere SSL-bezogene Schwachstellen und liefert so ein vollständigeres Bild der Konfiguration des sicheren Servers.
SSL-Modus auf einem Nicht-Standard-Port erzwingen
In diesem Schritt untersuchen wir, wie Nikto dazu "gezwungen" werden kann, SSL auf jedem Port zu verwenden, auch auf einem, der normalerweise unverschlüsselten Datenverkehr verarbeitet. Dies ist nützlich, um falsch konfigurierte Dienste zu identifizieren, die möglicherweise HTTPS auf einem ungewöhnlichen Port wie 8080 ausführen.
Zuerst müssen wir den vorhandenen Server stoppen und einen neuen auf Port 8080 starten.
## Stoppen des vorherigen Servers
pkill -f "python3 /home/labex/project/https_server/server.py"
## Erstellen einer neuen Serverkonfiguration für Port 8080
cat << EOF > /home/labex/project/https_server/server_8080.py
import http.server
import ssl
import os
os.chdir(os.path.dirname(os.path.abspath(__file__)))
server_address = ('0.0.0.0', 8080)
httpd = http.server.HTTPServer(server_address, http.server.SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket,
server_side=True,
certfile='cert.pem',
keyfile='key.pem',
ssl_version=ssl.PROTOCOL_TLS)
httpd.serve_forever()
EOF
## Starten des neuen Servers im Hintergrund und Warten einer kurzen Zeit
python3 /home/labex/project/https_server/server_8080.py &> /dev/null &
sleep 3
Nun läuft unser sicherer Server auf Port 8080. Ohne das Flag -ssl würde Nikto annehmen, dass dies ein Standard-HTTP-Port ist. Durch die Einbeziehung von -ssl zwingen wir es, einen TLS-Handshake zu initiieren.
Führen Sie den Scan gegen Port 8080 aus:
nikto -h localhost -p 8080 -ssl
Die Ausgabe wird ähnlich wie bei den vorherigen Scans sein und bestätigt, dass Nikto erfolgreich über SSL/TLS eine Verbindung zu einem Nicht-Standard-Port hergestellt und seine Tests durchgeführt hat.
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 8080
+ SSL Info: Self-signed certificate.
...
Dies bestätigt Ihre Fähigkeit, Nikto zum Scannen von SSL/TLS-Diensten auf beliebigen Ports zu verwenden.
Zusammenfassung
In diesem Lab haben Sie den grundlegenden Prozess des Scannens von SSL/TLS-fähigen Websites mit Nikto kennengelernt. Sie haben mit der Identifizierung und Verifizierung eines Ziel-HTTPS-Servers begonnen. Anschließend haben Sie aus erster Hand erfahren, warum es fehlschlägt, Nikto einfach auf einen HTTPS-Port zu richten, und gelernt, dass das Flag -ssl erforderlich ist, um die SSL/TLS-Kommunikation zu aktivieren.
Sie haben erfolgreich einen Scan gegen einen sicheren Server ausgeführt, die Ausgabe auf SSL-spezifische Informationen wie Zertifikatsdetails analysiert und schließlich gelernt, wie Sie den SSL-Modus auf einem Nicht-Standard-Port erzwingen können. Diese Fähigkeit ist entscheidend für die Durchführung gründlicher Sicherheitsbewertungen moderner Webanwendungen, die für ihre Sicherheit auf HTTPS angewiesen sind.


