Erstellen und Hinzufügen benutzerdefinierter Skripte zu Nmap
In diesem Schritt werden wir lernen, wie man ein benutzerdefiniertes Nmap-Skript erstellt und es zur Nmap-Skriptdatenbank hinzufügt. Nmap ist ein leistungsstarkes Netzwerkscantool, und durch das Hinzufügen benutzerdefinierter Skripte können Sie seine Funktionalität erweitern, um Ihren spezifischen Anforderungen gerecht zu werden. Dies bedeutet, dass Sie während Netzwerkscans einzigartige Aufgaben ausführen können, die von den Standard-Nmap-Skripten nicht abgedeckt werden.
Zunächst erstellen wir ein neues, etwas komplexeres Skript. Dieses Skript wird prüfen, ob ein bestimmter Port geöffnet ist. Ports sind wie Türen in einem Netzwerk; sie ermöglichen es verschiedenen Arten von Netzwerkverkehr, ein Gerät zu betreten oder zu verlassen. Indem wir prüfen, ob ein Port geöffnet ist, können wir herausfinden, ob ein bestimmter Dienst auf einem Gerät läuft.
cat << 'EOF' > /usr/share/nmap/scripts/port-check.nse
description = [[
A script that checks if a specific port is open and reports its status.
]]
author = "LabEx User"
license = "Same as Nmap--See https://nmap.org/book/man-legal.html"
categories = {"discovery", "safe"}
-- The portrule determines when the script should be run
portrule = function(host, port)
return port.protocol == "tcp" and port.state == "open"
end
-- The action section contains the main function of the script
action = function(host, port)
local output = string.format("Port %d is open on host %s", port.number, host.ip)
return output
end
EOF
Im obigen Code definieren wir zunächst eine Beschreibung dessen, was das Skript tut. Dann setzen wir die Autoren- und Lizenzinformationen. Die portrule
-Funktion entscheidet, wann das Skript ausgeführt werden soll. Hier prüft sie, ob der Port das TCP-Protokoll verwendet und geöffnet ist. Die action
-Funktion ist der Hauptteil des Skripts. Sie erstellt eine Nachricht, die angibt, dass ein bestimmter Port auf einem bestimmten Host geöffnet ist.
Beachten Sie, dass wir dieses Skript direkt im Nmap-Skriptverzeichnis (/usr/share/nmap/scripts/
) erstellt haben. Dies ist wichtig, da Nmap nach Skripten in diesem Verzeichnis sucht. Allerdings reicht es nicht aus, das Skript einfach zu erstellen. Nmap muss von diesem neuen Skript wissen, daher müssen wir die Nmap-Skriptdatenbank aktualisieren.
Um die Nmap-Skriptdatenbank zu aktualisieren, führen Sie den folgenden Befehl aus:
sudo nmap --script-updatedb
Die Ausgabe sollte in etwa so aussehen:
Starting Nmap 7.80 ( https://nmap.org )
NSE: Updating rule database.
NSE: Script Database updated successfully.
Nmap done: 0 IP addresses (0 hosts up) scanned in 0.36 seconds
Diese Ausgabe zeigt, dass die Skriptdatenbank erfolgreich aktualisiert wurde. Jetzt überprüfen wir, ob unser Skript zur Nmap-Skriptdatenbank hinzugefügt wurde. Wir können dies tun, indem wir nach unserem Skript in der script.db
-Datei suchen.
grep port-check /usr/share/nmap/scripts/script.db
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
Entry { filename = "port-check.nse", categories = { "discovery", "safe", } }
Dies bestätigt, dass unser Skript erfolgreich zur Nmap-Skriptdatenbank hinzugefügt wurde.
Jetzt erstellen wir noch ein Skript, das zeigt, wie man Bibliotheken in Nmap-Skripten verwendet. Bibliotheken sind vorgefertigter Code, den wir verwenden können, um unsere Skripte leistungsfähiger zu machen. Dieses Skript wird nach HTTP-Headern auf Webservern suchen. HTTP-Header enthalten wichtige Informationen über eine Webseite, wie z. B. den Typ des Servers, das Datum der letzten Änderung usw.
cat << 'EOF' > /usr/share/nmap/scripts/http-headers-check.nse
description = [[
A script that retrieves and displays HTTP headers from web servers.
]]
author = "LabEx User"
license = "Same as Nmap--See https://nmap.org/book/man-legal.html"
categories = {"discovery", "safe"}
local http = require "http"
local shortport = require "shortport"
local stdnse = require "stdnse"
-- The portrule determines when the script should be run
portrule = function(host, port)
return shortport.http(host, port)
end
-- The action section contains the main function of the script
action = function(host, port)
local response = http.get(host, port, "/")
if not response or not response.status then
return "Failed to retrieve HTTP headers"
end
local output = stdnse.output_table()
output["Status"] = response.status
if response.header then
output["Headers"] = {}
for name, value in pairs(response.header) do
output["Headers"][name] = value
end
end
return output
end
EOF
Dieses Skript verwendet mehrere Nmap-Bibliotheken:
http
für das Senden von HTTP-Anfragen. Diese Bibliothek ermöglicht es unserem Skript, mit Webservern zu kommunizieren und Informationen von ihnen zu erhalten.
shortport
für die Bestimmung, ob ein Port wahrscheinlich einen HTTP-Dienst ausführt. Sie hilft uns herauszufinden, ob ein bestimmter Port auf einem Host für Webverkehr verwendet wird.
stdnse
für die Formatierung der Ausgabe. Dies macht die Informationen, die wir vom Webserver erhalten, leichter lesbar.
Lassen Sie uns die Skriptdatenbank erneut aktualisieren, damit Nmap von unserem neuen Skript weiß:
sudo nmap --script-updatedb
Jetzt führen wir unser neues Skript gegen einen Webserver aus. Zu Demonstrationszwecken verwenden wir einen lokalen Webserver auf Port 3001 (der oft von Entwicklungsservern verwendet wird).
nmap --script http-headers-check -p 3001 127.0.0.1
Wenn kein Webserver auf Port 3001 läuft, wird die Ausgabe anzeigen, dass der Port geschlossen oder gefiltert ist. Wenn es einen Webserver gibt, werden Sie die abgerufenen HTTP-Header sehen.
Schließlich führen wir beide unserer benutzerdefinierten Skripte zusammen aus. Auf diese Weise können wir die Ergebnisse beider Skripte auf einmal sehen.
nmap --script "port-check,http-headers-check" -p 22,3001 127.0.0.1
Dieser Befehl führt beide unsere benutzerdefinierten Skripte gegen die Ports 22 und 3001 auf dem localhost aus. Port 22 wird üblicherweise für SSH (Secure Shell)-Verbindungen verwendet.
Die Ausgabe wird anzeigen, ob diese Ports geöffnet sind, und wenn Port 3001 einen HTTP-Dienst ausführt, wird sie die HTTP-Header anzeigen.
Durch das Erstellen und Hinzufügen benutzerdefinierter Skripte zu Nmap können Sie seine Funktionalität erweitern, um spezifische Aufgaben auszuführen, die für Ihre Netzwerkscans und Sicherheitsbewertungen erforderlich sind.