如何在Linux中使用Nmap脚本引擎(NSE)脚本

Nmap是一个流行的,功能强大且跨平台的命令行网络安全扫描器和探索工具。 它还可以帮助您了解连接网络的系统。 您可以使用它来查找活动主机的所有IP地址扫描在这些主机上运行的开放端口和服务等等。

Nmap的一个有趣的功能是Nmap脚本引擎NSE ),它带来了更多的灵活性和效率。 它使您能够使用Lua编程语言编写自己的脚本,并可能与其他Nmap用户共享这些脚本。

另请 参见:用于Linux的Nmap命令的29个实例

有四种类型的NSE脚本,即:

  • Prerule脚本 - 是在Nmap的任何扫描操作之前运行的脚本,当Nmap尚未收集有关目标的任何信息时,它们将被执行。
  • 主机脚本 - 是Nmap对目标主机执行正常操作(如主机发现,端口扫描,版本检测和操作系统检测)后执行的脚本。
  • 服务脚本 - 是针对在目标主机上监听的特定服务运行的脚本。
  • Postrule脚本 - 是Nmap扫描所有目标主机后运行的脚本。

然后这些脚本被分组在各种类别下,包括身份验证( auth ),发现主机( 广播 ),蛮力攻击猜测认证证书( 暴力 ),发现更多关于网络( 发现 ),导致拒绝服务( DOS ),利用一些漏洞( 利用 )等。一些脚本属于默认类别。

注意 :在我们进一步行动之前,您应该记下这些关键点:

  • 如果不仔细查看第三方的脚本,或者只有相信作者,才能执行脚本。 这是因为这些脚本不在沙箱中运行,因此可能会意外或恶意地损坏您的系统或侵入您的隐私。
  • 其次,这些脚本中的很多脚本可能会作为prerulepostrule脚本运行。 考虑到这一点,为了保持一致性,建议使用预制。
  • 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

使用类别

您还可以从一个类别或逗号分隔的类别列表加载脚本。 在本例中,我们使用默认和广播类别中的所有脚本在主机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脚本引擎 ,并介绍了如何在不同的类别下查找和使用各种可用的脚本。 如果您有任何疑问,请不要犹豫,通过下面的评论表回复给我们。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏