Nmap是一个流行的,功能强大,跨平台的命令行网络安全扫描和探测工具,您可以使用它来查找所有活动主机的IP地址,扫描在这些主机上运行的开放端口和服务等等。
Nmap的一个有趣的特性是Nmap脚本引擎(NSE ),为它带来了更多的灵活性和效率,你能够用Lua编程语言编写自己的脚本,并与其他Nmap用户共享这些脚本。
有四种类型的NSE脚本,即:Prerule脚本-是在Nmap的任何扫描操作之前运行的脚本,在Nmap尚未收集到有关目标的任何信息时执行
Host脚本-是在Nmap对目标主机执行正常操作(如主机发现、端口扫描、版本检测和操作系统检测)之后执行的脚本
Service脚本-是针对在目标主机上侦听的特定服务运行的脚本
Postrule脚本-是在Nmap扫描它所有目标主机之后运行的脚本Nmap可以使用scripts/script.db数据库找出可用的默认脚本和类别
要查看所有可用的NSE脚本的位置,请在终端上运行locate工具,如下所示:$ locate *.nse
/usr/share/nmap/scripts/acarsd-info.nse
/usr/share/nmap/scripts/address-info.nse
/usr/share/nmap/scripts/afp-brute.nse
/usr/share/nmap/scripts/afp-ls.nse
/usr/share/nmap/scripts/afp-path-vuln.nse
/usr/share/nmap/scripts/afp-serverinfo.nse
/usr/share/nmap/scripts/afp-showmount.nse
/usr/share/nmap/scripts/ajp-auth.nse
/usr/share/nmap/scripts/ajp-brute.nse
/usr/share/nmap/scripts/ajp-headers.nse
/usr/share/nmap/scripts/ajp-methods.nse
/usr/share/nmap/scripts/ajp-request.nse
/usr/share/nmap/scripts/allseeingeye-info.nse
/usr/share/nmap/scripts/amqp-info.nse
/usr/share/nmap/scripts/asn-query.nse
...
NSE脚本是使用--script标志加载的,它还允许你通过提供脚本所在的类别,脚本文件名或目录名来运行自己的脚本。
启用脚本的语法如下:$ namp -sC target #load default scripts
OR
$ nmap --script filename|category|directory|expression,... target
可以使用--script-help选项查看脚本的说明,另外,可以通过--script-args和--script-args-file选项将参数传递给某些脚本。
要使用大多数默认脚本执行扫描,请使用-sC标志,或者使用--script=default,如下所示。$ nmap -sC scanme.nmap.org
OR
$ nmap --script=default scanme.nmap.org
OR
$ nmap --script default scanme.nmap.org例子输出Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:36 IST
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.0027s latency).
Not shown: 999 filtered ports
PORT STATE SERVICE
80/tcp open http
|_http-title: Go ahead and ScanMe!
Nmap done: 1 IP address (1 host up) scanned in 11.74 seconds
可以获得脚本实际做什么的简要描述,例如http-headers。$ nmap --script-help http-headers scanme.nmap.org例子输出Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:37 IST
http-headers
Categories: discovery safe
https://nmap.org/nsedoc/scripts/http-headers.html
Performs a HEAD request for the root folder ("/") of a web server and displays the HTTP headers returned.
加载NSE脚本以执行Nmap扫描
使用脚本名称
一旦知道了脚本的作用,就可以使用它执行扫描,可以使用一个脚本或输入以逗号分隔的脚本名称列表,下面的命令将允许你查看在目标主机的web服务器上配置的HTTP头。$ nmap --script http-headers scanme.nmap.org扫描HTTP头Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:39 IST
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.27s latency).
Not shown: 996 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
| http-headers:
| Date: Wed, 15 Nov 2017 05:10:04 GMT
| Server: Apache/2.4.7 (Ubuntu)
| Accept-Ranges: bytes
| Vary: Accept-Encoding
| Connection: close
| Content-Type: text/html
|
|_ (Request type: HEAD)
179/tcp filtered bgp
31337/tcp open Elite
Nmap done: 1 IP address (1 host up) scanned in 20.96 seconds
使用类别
还可以从一个类别或以逗号分隔的类别列表中加载脚本,在本例中,使用default和broadcast类别中的所有脚本对主机192.168.56.1执行扫描。$ nmap --script default,broadcast 192.168.56.1
使用*通配符
当你想要选择有给定名称模式的脚本时,这非常有用,例如要加载名称以ssh开头的所有脚本,请在终端上运行以下命令:$ nmap --script"ssh-*" 192.168.56.1
使用通配符加载脚本-
使用布尔表达式
还可以使用布尔表达式选择脚本,可以使用and,or和not运算符构建布尔表达式,布尔表达式中的名称可以是category,script.db的文件名,或者all。
以下命令将从默认类别或广播类别加载脚本。$ nmap --script"default or broadcast" 192.168.56.10
相当于:$ nmap --script default,broadcast 192.168.56.10
若要加载所有脚本省略vuln类别中的脚本,请在终端上运行此命令。$ nmap --script"not vuln" 192.168.56.10
下一个命令看起来有点复杂,但是很容易理解,它选择默认类别中的脚本,或者广播类别中的脚本,保留以ssh-开头的名称:$ nmap --script"(default or broadcast) and not ssh-*" 192.168.56.10
还可以组合类别,脚本名,包含自定义脚本的目录或布尔表达式来加载脚本,如下所示:$ nmap --script broadcast,vuln,ssh-auth-methods,/path/to/custom/scripts 192.168.56.10
将参数传递给NSE脚本
以下示例显示了如何使用-script-args选项将参数传递给脚本:$ nmap --script mysql-audit --script-args"mysql-audit.username='root',
mysql-audit.password='password_here', mysql-audit.filename='nselib/data/mysql-cis.audit'"
要传递端口号,请使用-p nmap选项:$ nmap -p 3306 --script mysql-audit --script-args"mysql-audit.username='root',
mysql-audit.password='password_here' , mysql-audit.filename='nselib/data/mysql-cis.audit'"
现在就这样,你可以在nmap手册页或在NSE Usage中找到更多信息。
在本文中,向你介绍了Nmap脚本引擎,并了解如何在不同的类别下查找和使用各种可用的脚本,如果你有问题,请在下面给我留言。