Nmap NSE Hacking, Teil 7: Portunabhängige Analysen

Nmap NSE Hacking, Teil 7

Portunabhängige Analysen

Marc Ruef
by Marc Ruef
time to read: 5 minutes

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.

About the Author

Marc Ruef

Marc Ruef has been working in information security since the late 1990s. He is well-known for his many publications and books. The last one called The Art of Penetration Testing is discussing security testing in detail. He is a lecturer at several faculties, like ETH, HWZ, HSLU and IKF. (ORCID 0000-0002-1328-6357)

Links

You want to test the security of your firewall?

Our experts will get in contact with you!

×
Specific Criticism of CVSS4

Specific Criticism of CVSS4

Marc Ruef

scip Cybersecurity Forecast

scip Cybersecurity Forecast

Marc Ruef

Voice Authentication

Voice Authentication

Marc Ruef

Bug Bounty

Bug Bounty

Marc Ruef

You want more?

Further articles available here

You need support in such a project?

Our experts will get in contact with you!

You want more?

Further articles available here