第一章 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 .......

results matching ""

    No results matching ""