Nmap是一个流行的,功能强大且跨平台的命令行网络安全扫描器和探索工具。 它还可以帮助您了解连接网络的系统。 您可以使用它来查找活动主机的所有IP地址 , 扫描在这些主机上运行的开放端口和服务等等。
Nmap的一个有趣的功能是Nmap脚本引擎 ( NSE ),它带来了更多的灵活性和效率。 它使您能够使用Lua编程语言编写自己的脚本,并可能与其他Nmap用户共享这些脚本。
有四种类型的NSE脚本,即:
- Prerule脚本 - 是在Nmap的任何扫描操作之前运行的脚本,当Nmap尚未收集有关目标的任何信息时,它们将被执行。
- 主机脚本 - 是Nmap对目标主机执行正常操作(如主机发现,端口扫描,版本检测和操作系统检测)后执行的脚本。
- 服务脚本 - 是针对在目标主机上监听的特定服务运行的脚本。
- Postrule脚本 - 是Nmap扫描完所有目标主机后运行的脚本。
然后这些脚本被分组在各种类别下,包括身份验证( auth ),发现主机( 广播 ),蛮力攻击猜测认证证书( 暴力 ),发现更多关于网络( 发现 ),导致拒绝服务( DOS ),利用一些漏洞( 利用 )等。一些脚本属于默认类别。
注意 :在我们进一步行动之前,您应该记下这些关键点:
- 如果不仔细查看第三方的脚本,或者只有相信作者,才能执行脚本。 这是因为这些脚本不在沙箱中运行,因此可能会意外或恶意地损坏您的系统或侵入您的隐私。
- 其次,这些脚本中的很多脚本可能会作为prerule或postrule脚本运行。 考虑到这一点,为了保持一致性,建议使用预制。
- 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
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
使用类别
您还可以从一个类别或逗号分隔的类别列表加载脚本。 在本例中,我们使用默认和广播类别中的所有脚本在主机192.168.56.1上执行扫描。
$ nmap --script default,broadcast 192.168.56.1
扫描主机
使用*通配符
当您想要选择具有给定名称模式的脚本时,这非常有用。 例如,要加载名称以ssh开头的所有脚本,请在终端上运行以下命令:
$ nmap --script "ssh-*" 192.168.56.1
使用通配符加载脚本 -
使用布尔表达式
您也可以使用布尔表达式来选择脚本,这些表达式可以使用和 , 或者和非运算符来构建。 布尔表达式中的名称可以是一个类别,一个来自script.db的文件名,或者全部。
以下命令将从默认或广播类别加载脚本。
$ 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'"
以上命令针对部分CIS MySQL v1.2.2基准测试MySQL数据库服务器安全配置。 您也可以为其他MySQL审计创建自己的有用的自定义审计文件。
现在就是这样。 您可以在nmap手册页中找到更多信息或查看NSE使用情况 。
要开始编写自己的NSE脚本,请查看本指南: https : //nmap.org/book/nse-tutorial.html
结论
Nmap是一个非常强大和有用的工具,每个系统或网络管理员都需要在他/她的安全库中--NSE只是增加了更多的效率。
在本文中,我们向您介绍了Nmap脚本引擎 ,并介绍了如何在不同的类别下查找和使用各种可用的脚本。 如果您有任何疑问,请不要犹豫,通过下面的评论表回复给我们。