第一章 Nmap脚本简介
Nmap脚本分类
当我们在机器上把Nmap安装完毕后,在安装目录下的script文件夹里会保存大量的NSE脚本。如果你使用的是Nmap 7.60 版本的话,目录下会有580个脚本,这些都是Nmap特有的,是基于lua语言编写的。
这些NSE脚本根据用途的不同,大致分类如下:
分类 | 用途 |
---|---|
auth | 用户认证相关脚本 |
broadcast | 通过广播去收集网络信息的脚本 |
brute | 暴力破解相关脚本 |
default | 默认类型,当使用 -sC进行扫描时会执行的相关脚本 |
discovery | 用于主机和服务发现的相关脚本 |
dos | DOS攻击相关脚本 |
exploit | 漏洞利用相关脚本 |
external | 第三方服务相关脚本 |
fuzzer | 与fuzzer相关脚本 |
intrusive | 使用可能会导致主机、服务等崩溃或产生很大的网络噪音的相关脚本 |
malware | 恶意软件检测相关脚本 |
safe | 使用起来非常安全的脚本 |
version | 高级版本检测类相关脚本 |
vuln | 漏洞检测和利用类相关脚本 |
Nmap脚本使用方式
当我们使用Nmap并添加参数-sC或者--script时,Nmap会执行NSE脚本。 其使用方式主要有:
- 指定脚本名称
例如,在script目录下有http-title.nse、http-trace.nse脚本,执行命令行如下:
$ nmap --script http-title scanme.nmap.org
Starting Nmap 7.60 ( https://nmap.org ) at 2017-11-25 23:51 Nmap scan report for http-title.nse (120.210.209.75) Host is up (0.031s latency). Not shown: 988 closed ports PORT STATE SERVICE 80/tcp open http |http-title: Redirect 111/tcp open rpcbind | rpcinfo: | program version port/proto service | 100000 2,3,4 111/tcp rpcbind | 100000 2,3,4 111/udp rpcbind | 100024 1 52799/tcp status | 100024 1 58794/udp status 135/tcp filtered msrpc 139/tcp filtered netbios-ssn 445/tcp filtered microsoft-ds 593/tcp filtered http-rpc-epmap 901/tcp filtered samba-swat 1025/tcp filtered NFS-or-IIS 3128/tcp filtered squid-http 4444/tcp filtered krb524 6129/tcp filtered unknown 6667/tcp filtered irc > Nmap scan report for scanme.nmap.org (45.33.32.156) Host is up (0.25s latency). Not shown: 996 closed ports PORT STATE SERVICE 22/tcp open ssh | ssh-hostkey: | 1024 ac:00:a0:1a:82:ff:cc:55:99:dc:67:2b:34:97:6b:75 (DSA) | 2048 20:3d:2d:44:62:2a:b0:5a:9d:b5:b3:05:14:c2:a6:b2 (RSA) | 256 96:02:bb:5e:57:54:1c:4e:45:2f:56:4c:4a:24:b2:57 (ECDSA) |_ 256 33:fa:91:0f:e0:e1:7b:1f:6d:05:a2:b0:f1:54:41:56 (EdDSA) 80/tcp open http |_http-title: Go ahead and ScanMe! 445/tcp filtered microsoft-ds 31337/tcp open Elite > Nmap done: 2 IP addresses (2 hosts up) scanned in 30.34 seconds
- 指定脚本分类
这里所说的脚本分类是指上一个章节表格中的关键字,如auth、broadcast、brute、default、discovery、dos、exploit、external、fuzzer、intrusive、malware、safe、version、vuln
$nmap --script auth scanme.nmap.org
Starting Nmap 7.60 ( https://nmap.org ) at 2017-11-25 23:59 Nmap scan report for scanme.nmap.org (45.33.32.156) Host is up (0.20s latency). Not shown: 996 closed ports PORT STATE SERVICE 22/tcp open ssh | ssh-auth-methods: | Supported authentication methods: | publickey |_ password |_ssh-publickey-acceptance: ERROR: Script execution failed (use -d to debug) 80/tcp open http 445/tcp filtered microsoft-ds 31337/tcp open Elite > Nmap done: 1 IP address (1 host up) scanned in 43.51 seconds
- 指定脚本文件路径
例如,指定/usr/local/nmap/script/http-title.nse
$ nmap --script /usr/local/nmap/script/http-title.nse scanme.nmap.org
Starting Nmap 7.60 ( https://nmap.org ) at 2017-11-25 23:51 Nmap scan report for http-title.nse (120.210.209.75) Host is up (0.031s latency). Not shown: 988 closed ports PORT STATE SERVICE 80/tcp open http .......
- 指定脚本文件夹
例如,执行script目录下custom文件夹中的所有的脚本
$ nmap --script /usr/local/nmap/script/custom/ scanme.nmap.org Starting Nmap 7.60 ( https://nmap.org ) at 2017-11-25 .......
- 使用表达式
例如,执行script目录中以http开头的脚本
$ nmap --script “http-*” scanme.nmap.org Starting Nmap 7.60 ( https://nmap.org ) at 2017-11-25 .......
例如,执行script目录中broadcast和discovery两种类型的脚本
$ nmap --script "broadcast and discovery" scanme.nmap.org Starting Nmap 7.60 ( https://nmap.org ) at 2017-11-25 .......
例如,执行script目录中以http开头但不执行exploit类型的脚本
$ nmap --script "http-* and not(exploit)" scanme.nmap.org Starting Nmap 7.60 ( https://nmap.org ) at 2017-11-25 .......
- 强制使用某些/某类脚本
例如,必须强制执行http-title脚本
$ nmap --script +http-title.nse scanme.nmap.org Starting Nmap 7.60 ( https://nmap.org ) at 2017-11-25 .......
例如,必须强制执行vuln,exploit两类脚本
$ nmap --script +"vuln,exploit" scanme.nmap.org Starting Nmap 7.60 ( https://nmap.org ) at 2017-11-25 .......
Nmap脚本参数的使用
Nmap在执行脚本时,通常需要指定一些其他的参数,比如说,保持http会话的cookie,躲过服务器UA检测的UserAgent设置。在Nmap中,这些参数的设置方式主要有以下几种:
- 直接使用script-args参数指定值
例如,指定客户端请求的UA类型为Mozilla
$ nmap --script http-title.nse --script-args http.useragent="Mozilla/4.0" scanme.nmap.org Starting Nmap 7.60 ( https://nmap.org ) at 2017-11-25 .......
加载脚本参数文件 这种使用方式是,提前将需要使用的脚本参数值保存在文件中,当在Nmap命令行中调用时直接指向文件所在即可。 此方法适用于多参数的设置。 例如,指定从agrs.txt中读取
$ nmap --script http-title.nse --script-args-file args.txt scanme.nmap.org Starting Nmap 7.60 ( https://nmap.org ) at 2017-11-25 .......
而args.txt中的内容如下:
http.useragent=Mozilla/4.0 http.max-connections=50 uri=/app
debug的使用
在使用NSE脚本过程中,我们经常需要使用debug来跟踪和分析脚本执行的情况。这时候就需要用到NSE的debug功能。
比如说,如果你想分析数据的发送和接受,将会使用到--script-trace参数 例如:
nmap --script http-title.nse --script-trace scanme.nmap.org Starting Nmap 7.60 ( https://nmap.org ) at 2017-11-25 .......
当然,你也可以使用 -d[1-9]选项,来指定debug的级别.其中级别越大,日志越详细 例如:
nmap --script http-title.nse -d1 scanme.nmap.org Starting Nmap 7.60 ( https://nmap.org ) at 2017-11-25 .......
如果你想了解数据包的详细情况,可以使用--packet-trace选项,来跟踪所有数据包的发送和接受情况。 例如:
nmap --script http-title.nse --packet-trace 192.168.1.102 Starting Nmap 7.60 ( https://nmap.org ) at 2017-11-25 SENT (13.0890s) TCP 192.168.1.102:36028 > 192.168.1.102:84 S ttl=39 id=44267 ipl en=44 seq=3388078361 win=1024
SENT (13.0890s) TCP 192.168.1.102:36028 > 192.168.1.102:8007 S ttl=38 id=62539 i plen=44 seq=3388078361 win=1024 SENT (13.0890s) TCP 192.168.1.102:36028 > 192.168.1.102:1001 S ttl=49 id=4121 ip len=44 seq=3388078361 win=1024 SENT (13.0890s) TCP 192.168.1.102:36028 > 192.168.1.102:873 S ttl=48 id=25413 ip len=44 seq=3388078361 win=1024 SENT (13.0890s) TCP 192.168.1.102:36028 > 192.168.1.102:5952 S ttl=39 id=40392 i plen=44 seq=3388078361 win=1024 .......