Ein NSE-Script für den Netzwerkscanner Nmap. Es erweitert dessen Funktionsumfang, sodass beim Port-Scanning auch von einem HTTP- oder HTTPS-Server unterstützten HTTP-Methoden mit ausgegeben werden.

Einsatzzweck

Wer überprüfen möchte, ob im eigenen Netz auch wirklich nur die gewünschten Dienste laufen, verwendet dafür vielleicht Nmap. Wenn beim Scannen jetzt ein offener Port 80 gefunden wird, und es handelt sich bei der Maschine um einen Webserver, wird man sich wohl kaum Gedanken machen. Aber eventuell ist der Webserver falsch konfiguriert und WebDAV ist versehentlich eingeschaltet. Also sollte man sich ggf. doch Gedanken machen, denn der Web-Content kann über WebDAV geändert werden!

http-methods.nse ist u. a. dafür geschrieben, diesen kleinen aber feinen Unterschied aufzuzeigen. Normalerweise meldet es nur die HTTP-Methoden GET,HEAD,POST,OPTIONS,TRACE. Wenn dagegen WebDAV aktiviert ist, kommen weitere Methoden hinzu, z. B. PROPFIND, DELETE, …

Die Tatsache, dass diese Methoden aktiviert sind, kann aber auch ein "false positiv" sein, wenn der Admin die zusätzlichen Methoden zwar grundsätzlich aktiviert hat, diese aber nur von bestimmten Usern oder bestimmten Quell-IPs aus zulässt. Daher kann beim Aufruf der Parameter http-methods.retest mitgegeben werden. Dann wird jede der gefundenen Methoden auch tatsächlich ausprobiert und der Response-Code angezeigt.

Oder vielleicht besagt die Security Policy eines Unternehmens, dass die Methode TRACE grundsätzlich disabled werden muss. Mit http-methods.nse lässt sich die Einhaltung sehr schnell verifizieren.

Installation und Test - aktuelles Stable Release

Ab nmap Release 5.50 ist http-methods.nse bereits enthalten, also einfach Nmap herunterladen, installieren und starten:

root@localhost ~ # nmap -p 80 --script http-methods dunno.dyndns.info

Starting Nmap 5.50 ( http://nmap.org ) at 2011-02-02 12:33 CET
Nmap scan report for dunno.dyndns.info (127.128.129.130)
Host is up (0.00032s latency).
PORT   STATE SERVICE
80/tcp open  http
| http-methods: GET HEAD POST OPTIONS TRACE
| Potentially risky methods: TRACE
|_See http://nmap.org/nsedoc/scripts/http-methods.html
MAC Address: 00:E0:7D:E7:07:FA (Netronix)
root@localhost ~ #

Dabei wird http-methods.nse als einziges Script aufgerufen. Um alle default-scripts (incl. http-methods.nse) laufen zu lassen, lautet der Aufruf entsprechend:

nmap -p 80 --script default dunno.dyndns.info

Oder kurz:

nmap -p 80 -sC dunno.dyndns.info

Ist zusätzlich ein duchprobieren aller gefundener Methoden gewünscht, muss der Parameter http-methods.retest=1 mitgegeben werden:

root@localhost ~ # nmap -p 80 --script http-methods --script-args http-methods.retest=1 dunno.dyndns.info

Starting Nmap 5.50 ( http://nmap.org ) at 2011-02-02 12:49 CET
Nmap scan report for dunno.dyndns.info (127.128.129.130)
Host is up (0.00030s latency).
PORT   STATE SERVICE
80/tcp open  http
| http-methods: GET HEAD POST OPTIONS TRACE
| Potentially risky methods: TRACE
| See http://nmap.org/nsedoc/scripts/http-methods.html
| GET / -> HTTP/1.1 200 OK
|
| HEAD / -> HTTP/1.1 200 OK
|
| POST / -> HTTP/1.1 404 Not Found
|
| OPTIONS / -> HTTP/1.1 200 OK
|
|_TRACE / -> HTTP/1.1 200 OK
MAC Address: 00:E0:7D:E7:07:FA (Netronix)
root@localhost ~ #

Weitere Infos generell zur Verwendung von NSE-Scripts siehe http://nmap.org/man/de/man-nse.html

Installation und Test - älteres Release

Wer von Nmap noch eine ältere Version (z. B. die der Distribution) im Einsatz hat (und diese auch beibehalten möchte), kann http-methods.nse auch nachinstallieren (getestet nur mit Nmap 5.21).

Zum ausprobieren kann man den vollständigen Pfad zum Script einfach eingeben:

root@localhost ~ # nmap --script <path>/http-methods.nse dunno.dyndns.info

Starting Nmap 5.21 ( http://nmap.org ) at 2010-02-06 20:05 CET
NSE: Script Scanning completed.
Nmap scan report for dunno.dyndns.info (127.128.129.130)
Host is up (0.00089s latency).
PORT   STATE SERVICE
80/tcp open  http
|_http-methods: OPTIONS / request returned: GET,HEAD,POST,OPTIONS,TRACE

Nmap done: 1 IP address (1 host up) scanned in 0.29 seconds
root@localhost ~ #

bzw. mit retest

root@localhost ~ # nmap -p 80 --script <path>/http-methods.nse --script-args http-methods.retest=true dunno.dyndns.info

Starting Nmap 5.21 ( http://nmap.org ) at 2010-02-06 20:06 CET
NSE: Script Scanning completed.
Nmap scan report for dunno.dyndns.info (127.128.129.130)
Host is up (0.00069s latency).
PORT   STATE SERVICE
80/tcp open  http
| http-methods: OPTIONS / request returned: GET,HEAD,POST,OPTIONS,TRACE
|    HTTP Status for GET / is 200 OK
|    HTTP Status for HEAD / is 200 OK
|    HTTP Status for POST / is 200 OK
|    HTTP Status for OPTIONS / is 200 OK
|_   HTTP Status for TRACE / is 200 OK

Nmap done: 1 IP address (1 host up) scanned in 0.28 seconds
root@localhost ~ #

Um es öfters zu benutzen, empfiehlt es sich dagegen, http-methods.nse in der eigenen Nmap-Installation vollständig zu integrieren. Dazu legt man es im gleichen Pfad ab, wie die übrigen (mitgelieferten) NSE-Scripts, meist /usr/share/nmap/scripts oder /usr/local/share/nmap/scripts. Da Nmap aber nicht bei jedem Aufruf die ganze Verzeichnisstruktur einliest, sondern auf eine "Datenbank" zurückgreift, muss man diese anschliessend noch aktualisieren:

nmap --script-updatedb

Anschliessend kann das Script verwendet werden, wie jedes mitgelieferte, beim Aufruf reicht es nur den Namen anzugeben…

nmap -p 80 --script http-methods dunno.dyndns.info

…oder man kann eine ganze Kategorie von Scripts auf einmal auf den oder die gescannten Rechner loslassen:

nmap -p 80 --script safe dunno.dyndns.info

LUA

Übrigens: NSE-Scripts sind in der Scriptsprache LUA zu schreiben. Wer Interesse hat, eigene Erweiterungen für nmap zu schreiben, schaut sich daher am besten die offizielle Dokumentation von LUA an.