Nmap NSE Top Ten Webserver Scripts

Marc Ruef und Stefan Friedli

An den diesjährigen Hashdays hat Marc Ruef eine Präsentation mit dem Titel Nmap NSE Scripting for IT Security Professionals gehalten. Dabei wurde das von uns für umfangreiche Netzwerküberprüfungen genutzte Framework vorgestellt. Am Schluss des Talks wurde darauf verwiesen, dass wir einen Teil unserer genutzten Nmap NSE Skripte sowie den Ruby-Parser veröffentlichen werden. Die Funktionsweise dieser sowie der empfohlene Ablauf sind in den Slides festgehalten.

Name Typ Grösse
Nmap NSE Hacking for IT Security Professionals ppt 2971 KBytes
Nmap NSE Top Ten Webserver Scripts tar.gz (NSE/Lua) 4422 Bytes
Nmap xml2csv Parser tar.gz (Ruby) 14977 Bytes

Beschreibung

Die enthaltenen NSE-Skripte helfen bei der Auswertung von Webservern. Die nachfolgende Liste zeigt die Top Ten dessen auf. Einige der Skripte benötigen die Aktivierung der Version Detection mit dem Schalter -sV, um die benötigten Informationen zusammentragen zu können.

ID Titel Version Detection
1 Web Server Identification empfohlen
2 Web Server Banner Grabbing optional
3 Web Server robots.txt Enumeration optional
4 Web Server HTTP Fingerprinting erforderlich
5 Web Server Default Install Page optional
6 Web Server X-Powered-By optional
7 Web Server OPTIONS Support optional
8 Web Server ETag Enumeration optional
9 Web Server NTLM Authentication optional
10 Web Server HTTP/1.1 Pipelining Support optional

Installation

Um die NSE-Skripte zu installieren, entpacken Sie das tar.gz-Archiv. Es gibt zwei unterschiedliche Unterordner, die entsprechend innerhalb des Nmap-Hauptordners berücksichtigt werden müssen:

  • nmap/nselib/scipreporting_hashdays.lua – Output Wrapper
  • nmap/scripts/scip_nse_topten_webserver/*NSE Scripts

Die jeweiligen Dateien müssen in die entsprechenden Ordner der lokalen Nmap-Installation kopiert werden.

Nutzung

Die Ausführung von Nmap erfolgt in gewohnter Weise, wobei durch den Schalter --script=scip_nse_topten_webserver die Top Ten Skripte ausgeführt werden können:

C:\>nmap -sV —script=scip_nse_topten_webserver www.scip.ch -p80

Starting Nmap 5.21 ( http://nmap.org ) at 2010-11-18 11:23 Westeuropõische Normalzeit
Nmap scan report for example.scip.ch (192.168.0.101)
Host is up (0.00s latency).
rDNS record for 192.168.0.101: example.scip.ch
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd | web_server_identification: sID{1}, | sAccuracy{80}, | sTesttype{Exploiting}, | sTestsource{Application Mapping}, | sVersion{1.0-hd10}, | sOutput{Header: | | Date: Thu, 18 Nov 2010 10:24:03 GMT | Server: Apache | Vary: Accept-Encoding | Content-Length: 6749 | Connection: close | Content-Type: text/html | | }, | sDescription{The target service is a web server which is using the application protocol http to communicate. An attacker might approach this service to enumerate or compromise the target host.}, |_sTimestamp{1290075843}; | web_server_banner_grabbing: sID{2}, | sAccuracy{80}, | sTesttype{Scanning}, | sTestsource{HTTP-Banner (Server Line)}, | sVersion{1.0-hd10}, | sOutput{Apache}, | sDescription{The web server is announcing himself with a welcome banner in the Server line of the http header. An attacker might use this information to initiiate target-oriented attacks.}, |_sTimestamp{1290075843};

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 8.02 seconds

Die Ausgabe wird nun um die durch die NSE-Skripte bereitgestellten Informationen erweitert. Pro NSE-Skript, das eine Ausgabe generiert hat, wird ein Datensatz ausgegeben. Die einzelnen Felder beinhalten die jeweiligen Informationen:

Feld Beschreibung
sId Eindeutige Identifikationsnummer des NSE-Skripts
sAccuracy Genauigkeit der Analyse in Prozent
sTesttype Typ des Tests (Derivative, Portscan, Scanning, …)
sTestsource Quelle der Daten (in diesem Fall immer Nmap)
sVersion Versionsnummer des NSE-Skripts
sOutput Ausgabe des Testzugriffs (z.B. gefundener Banner)
sDescription Kurze Beschreibung des Problems
sTimestamp Unix-Timestamp bei erfolgreicher Identifikation

Parsing

Die XML-Ausgabe dieses Scans kann dann mit dem in Ruby geschriebenen Parser nse_xml2csv.rb in eine CSV-Datei umgewandelt werden. Dadurch wird eine Weiterverarbeitung der Daten, zum Beispiel in einer Tabellenkalkulation oder Datenbank, möglich. Dies ist gerade bei einer umfangreichen Datensammlung von Vorteil.

C:\>ruby nse_xml2csv.rb -h
NAME

nse_xml2csv.rb

OPTIONS

—help,-h Displays help page. —debug,-d Sets debug to true. —scan-file,-i scan file nmap XML output file to parse —target-file,-t target file The target file to create. If none is supplied, output will be written to current directory (results.csv)

AUTHOR: Stefan Friedli
COPYRIGHT © scip AG – 2010

C:\>ruby nse_xml2csv.rb -i nmap_result.xml -t results_from_xml.csv
nse_xml2csv.rb 1.0 launched…
Finished… see results_from_xml.csv for results.

Das Resultat wird in die entsprechende Datei geschrieben und kann sodann in einer Tabellenkalkulation betrachtet werden:

Resultat des xml2csv Parsers

Lizenz

Die hier bereitgestellten Codeteile wurden von Stefan Friedli und Marc Ruef geschrieben. Sie unterliegen, falls nicht anders angegeben, der GNU General Public License Version 3.