Advanced Nmap Scripting
Make Nmap work for you!
Me!
Who I am
Tenable
SkullSpace
Urban exploration
Climbing down drains...
Abandoned factories...
And even a boat!
Vulnerability scanning
What is Nmap scripting?
History
Scripts!
Categories
Categories - Safe vs Intrusive
Categories: Default
Categories: Auth
Categories: Broadcast
Categories: External
Categories: Malware
More info
Running scripts
Getting scripts
Zenmap
Scripts/libraries
http-enum.nse
http-enum.nse
table.insert(fingerprints, {
category='general',
probes={
{path='/level/15', method='HEAD'},
{path='/exec/show/log/CR', method='HEAD'},
{path='/level/15/exec/-/configure/http', method='HEAD'},
{path='/level/15/exec/-', method='HEAD'}
},
matches= {
{match='cisco-IOS', output='Cisco 2811'}
}
})
“Target” scripts
“Target” scripts
$ sudo nmap --traceroute --script=targets-traceroute \
--script-args=newtargets scanme.insecure.org
[...]
Host script results:
|_targets-traceroute: successfully added 14 new targets.
“Broadcast” scripts
$ sudo ./nmap --script=broadcast-dhcp-discover
Starting Nmap 5.59BETA3 ( http://nmap.org ) at 2011-09-18 20:16 CDT
Pre-scan script results:
| broadcast-dhcp-discover:
| IP Offered: 192.168.1.112
| Server Identifier: 192.168.1.1
| Subnet Mask: 255.255.255.0
| Router: 192.168.1.1
|_ Domain Name Server: 206.220.194.18, 8.8.8.8
broadcast-listener.nse
broadcast-listener.nse
$ sudo ./nmap --script=broadcast-listener
Starting Nmap 5.59BETA3 ( http://nmap.org ) at 2011-09-18 20:22 CDT
Pre-scan script results:
| broadcast-listener:
| udp
| Netbios
| ip query
| 192.168.0.60 \x01\x02__MSBROWSE__\x02\x01
| DHCP
| srv ip cli ip mask gw dns
| 192.168.0.1 192.168.0.5 255.255.255.0 192.168.0.1 192.168.0.18, 192.168.0.19
| DropBox
| displayname ip port version host_int namespaces
| 39000860 192.168.0.107 17500 1.8 39000860 28814673, 29981099
| HSRP
| ip version op state prio group secret virtual ip
| 192.168.0.254 0 Hello Active 110 1 cisco 192.168.0.253
| ether
| CDP
| ip id platform version
| ? Router cisco 7206VXR 12.3(23)
| ARP Request
| sender ip sender mac target ip
| 192.168.0.101 00:04:30:26:DA:C8 192.168.0.60
|_ 192.168.0.1 90:24:1D:C8:B9:AE 192.168.0.60
“creds” library
| creds-summary:
| 10.10.10.10
| 22/ssh
| lisbon:jane - Account is valid
| 10.10.10.20
| 21/ftp
| jane:redjohn - Account is locked
| 22/ssh
| cho:secret11 - Account is valid
| 23/telnet
| rigsby:pelt - Account is valid
| pelt:rigsby - Password needs to be changed at next logon
| 80/http
| lisbon:jane - Account is valid
| jane:redjohn - Account is locked
|_ cho:secret11 - Account is valid
address-info.nse
Nmap scan report for fe80::a8bb:ccff:fedd:eeff
Host script results:
|_address-info: IPv6 EUI-64; MAC address: aa:bb:cc:dd:ee:ff
Nmap scan report for 64:ff9b::c000:221
Host script results:
|_address-info: IPv4-embedded IPv6 address; IPv4 address: 192.0.2.33
Nmap scan report for ::ffff:0:c0a8:101
Host script results:
|_address-info: IPv4-translated IPv6 address; IPv4 address: 192.168.1.1
backorifice-info.nse
31337/udp open|filtered BackOrifice
| backorifice-info:
| SYSTEM INFO
| System info for machine 'HAL9000'
| Current user: 'Dave'
| Processor: I586
| Win32 on Windows 95 v4.10 build 2222 - A
| Memory: 63M in use: 30% Page file: 1984M free: 1970M
| C:\ - Fixed Sec/Clust: 64 Byts/Sec: 512, Bytes free: 2147155968/21471
| ...155968
| D:\ - CD-ROM
| PROCESS LIST
| PID - Executable
| 4293872589 C:\WINDOWS\SYSTEM\KERNEL32.DLL
| 4294937581 C:\WINDOWS\SYSTEM\MSGSRV32.EXE
| 4294935933 C:\WINDOWS\SYSTEM\MPREXE.EXE
| 4294843869 C:\WINDOWS\SYSTEM\MSTASK.EXE
| 4294838549 C:\WINDOWS\SYSTEM\ .EXE
| NETWORK RESOURCES - NET VIEW
| (null) '(null)' - Microsoft Network - UNKNOWN! (Network root?):CONTAINER
| (null) 'WORKGROUP' - (null) - DOMAIN:CONTAINER
| (null) '\\HAL9000' - - SERVER:CONTAINER
| SHARELIST
| 'DOCUMENTS'-C:\WINDOWS\DESKTOP\DOCUMENTS 'sample comment 2' RO:'' RW:'
| ...'' Disk PERSISTANT READONLY
|_ 'IPC$'- 'Remote Inter Process Communication' RO:'' RW:'' IPC FULL
Quick NSE tutorial
“rule” function
“action” function
--script-args
require 'stdnse'
local a, b = stdnse.get_script_args(“name1”, “name2”)
Registry
nmap.registry.a = 'Hello!'
Output formatting
Output formatting
action = function()
local domains = {}
domains['name'] = "DOMAINS"
table.insert(domains, 'Domain 1')
table.insert(domains, 'Domain 2')
local response = {}
table.insert(response, "Apple pie")
table.insert(response, domains)
table.insert(response, names)
return stdnse.format_output(true, response)
end
Host script results:
| smb-enum-domains:
| Apple pie
| DOMAINS
| Domain 1
|_ Domain 2
Template script
Testing
Testing
1242 Windows XP (Windows 2000 LAN Manager)
606 Windows Server 2003 3790 Service Pack 2 (Windows Server 2003 5.2)
383 Windows 7 Ultimate 7600 (Windows 7 Ultimate 6.1)
261 Windows Server 2003 R2 3790 Service Pack 2 (Windows Server 2003 R2 5.2)
257 Windows 7 Ultimate 7601 Service Pack 1 (Windows 7 Ultimate 6.1)
209 Windows 7 Home Premium 7601 Service Pack 1 (Windows 7 Home Premium 6.1)
207 Windows 7 Home Premium 7600 (Windows 7 Home Premium 6.1)
181 Unix (Samba 3.0.27a)
144 Windows Server 2008 R2 Standard 7601 Service Pack 1 (Windows Server 2008 R2 Standard 6.1)
125 Windows Vista (TM) Home Premium 6002 Service Pack 2 (Windows Vista (TM) Home Premium 6.0)
Testing
Testing
22 server
16 localhost
12 discus
12 customer
10 user-PC
10 pc
10 desktop
10 TRAFFICBOSS04
8 webserver
8 user
How can you help?
That's it for me!