Nmap NSE Hacking, Teil 7: Portunabhängige Analysen

Nmap NSE Hacking, Teil 7

Portunabhängige Analysen

Marc Ruef
von Marc Ruef
Lesezeit: 5 Minuten

In den bisherigen Teilen dieser Schriftenreihe haben wir uns ausschliesslich auf die Entwicklung von sogenannten portrules konzentriert. Diese definieren, bei welchen Port-Konstellationen ein NSE-Skript ausgeführt wird. Dieses kann pro Host n mal ausgeführt werden, wobei eine maximale Ausführung pro Port auf 1 festgelegt ist.

In siebten Teil werden wir nun sogenannte hostrule-Skripte anschauen. Damit wird die Grundlage für Skripte geschaffen, die unabhängig von Ports ausgeführt werden. Stattdessen werden diese je nach Konstellation eines Hosts und damit maximal 1 mal pro Zielsystem, ausgeführt. Es gibt eine Reihe von Möglichkeiten, die sich mit einem hostrule-Skript erschliessen. Damit werden breitflächige Analysen von Hosts und deren Funktionen möglich:

Eine hostrule kann zum Beispiel so umgesetzt werden, dass nur gewisse IP-Adressbereiche oder spezifische Hostnamen das Durchlaufen des Skripts initiieren lässt. Zum Beispiel könnten sämtliche Systeme, die im letzten Oktett der IP-Adresse die Zahl 1 haben, angegangen werden. Die meisten hostrule-Skripte werden jedoch in jedem Fall ausgeführt, weshalb wir in unserem Beispiel ebenfalls stets true zurückliefern werden:

hostrule = function(host, port)
   return true
end

Danach wird, wie wir dies schon von den Skripten mit portrule gewohnt sind, die entsprechende Action-Funktion ausgeführt. Unser Skript soll sämtliche Ports des Portscans durchgehen und die als offen deklarierten Ports dokumentieren. Hierzu wird in einer for-Schleife sämtliche möglichen Ports durchgegangen.

Um auf die generischen Daten zurückzugreifen, welche durch nmap zusammengetragen wurden, verwenden wir die Library nmap. Mit der Funktion nmap.get_port_state() kann der ermittelte Portstatus extrahiert werden. Diese Funktion erwartet als erstes Argument den Host und als zweites Argument eine Table mit der Port-Definition. Diese besteht aus Portnummer und Protokoll (z.B. tcp). Benutzt der in portstatus abgelegte Portstatus für portstatus.state den String open, wird der identifizierte Port in den String result geschrieben. Und dieser wird am Ende mit return ausgegeben.

action = function(host, port)
      local portdefinition
      local portstatus
      local result = “”

for i=1, 65535, 1 do portdefinition = {number=i, protocol=“tcp”} portstatus = nmap.get_port_state(host, portdefinition) if portstatus ~= nil and portstatus.state "open" then if result “” then result = i else result = result .. “, “ .. i end end end if result ~= “” then return “Open Ports:\n” .. result) end end

Wie definiert, wird dieses Skript auf jeden Host angewendet, der im Rahmen eines Portscans als erreichbar identifiziert wurde. Danach werden die im Rahmen des Portscans von nmap zusammengetragenen Portstatus identifiziert und die offenen Ports ausgegeben:

Host script results:
| openports: Open Ports:
| 21, 22, 80, 443

In diesem spezifischen Beispiel gilt es zu beachten, dass ein nicht gescannter Port jeweils den Status nil besitzt. Wird zum Beispiel nmap mit dem Schalter -p80,443 aufgerufen und die for-Schleife durchläuft sämtliche Ports von 1 bis 65535, dann kann explizit nur für die beiden Ports 80 und 443 ein konkreter Status ermittelt werden.

In dieser siebenteiligen Artikelserie haben wir die Möglichkeiten und Funktionsweise der Nmap Scripting Engine, welche auf der Sprache Lua basiert, kennengelernt. Wir haben unterschiedliche Skripte geschrieben, mit denen auf der Basis der von nmap zusammengetragenen Informationen sowie eigens umgesetzten Netzwerkzugriffen eine erweiterte Auswertung durchgesetzt werden kann. Damit lässt sich nmap zu einem vollumfänglichen Vulnerability Scanner erweitern.

Über den Autor

Marc Ruef

Marc Ruef ist seit Ende der 1990er Jahre im Cybersecurity-Bereich aktiv. Er hat vor allem im deutschsprachigen Raum aufgrund der Vielzahl durch ihn veröffentlichten Fachpublikationen und Bücher – dazu gehört besonders Die Kunst des Penetration Testing – Bekanntheit erlangt. Er ist Dozent an verschiedenen Hochschulen, darunter ETH, HWZ, HSLU und IKF. (ORCID 0000-0002-1328-6357)

Links

Sie wollen die Sicherheit Ihrer Firewall prüfen?

Unsere Spezialisten kontaktieren Sie gern!

×
Cyber Threat Intelligence

Cyber Threat Intelligence

Marc Ruef

3D Printing

3D Printing

Marc Ruef

Contact Tracing App DP3T

Contact Tracing App DP3T

Marc Ruef

Sie wollen mehr?

Weitere Artikel im Archiv

Sie brauchen Unterstützung bei einem solchen Projekt?

Unsere Spezialisten kontaktieren Sie gern!

Sie wollen mehr?

Weitere Artikel im Archiv