Nmap脚本引擎NSE

Nmap网络安全审计(六)

Nmap脚本引擎NSE

NSE中的脚本采用Lua语言编写。NSE设计出来是为了提供Nmap的灵活性,式版的NSE包含14个大类的脚本,总数达500多个,这些脚本的功能包括对各类网络口令强度的审计,对各类服务器安全性配置的审计,对各类服务器漏洞的审计等。mysql

NSE脚本的运行

咱们使用NSE脚本测试一台主机,咱们来看一下这条指令使用的参数,-O进行操做系统检测,-sV对目标系统的服务进行检测,这里咱们没有使用脚本的参数全部使用的是默认脚本,默认脚本会使用-sC参数。默认脚本通常不会对目标系统形成危害,可是其余的一些脚本可能会引发安全防护设备的报警。git

nmap -sV -sC -O scanme.Nmap.org

Nmap脚本引擎NSE

默认分类中的脚本:github

  • banner.NSE:这是一个用来收集目标banner信息的脚本,它会链接到目标的一个开放的TCP端口,而后输出任何在5秒内接受到的信息。(banner信息有欢迎或表示身份的含义)
  • broadcast-ping.NSE:这个脚本使用广播ping来发现网络中的主机。
  • dns-recursion.NSE:这个脚本用来检测一个DNS服务器是否容许第三方的查询,容许的话可能会致使服务器受到DNS放大GJ。
  • upnp-info.NSE:这个脚本尝试经过UPnP服务来提取系统信息。
  • firewalk.NSE:这个脚本经过使用IP协议中的TTL过时机制来完成对防火墙设备的发现。

NSE中脚本的分类

  • auth:这个分类中包含的都是负责处理鉴权证书的脚本(绕开权限)
  • broadcast:这个分类中包含的都是在局域网内嗅探更多服务开启情况,如DNS、SQL Server等服务
  • brute:这些都是针对常见的应用,如HTTP、SSH、FTP等破解密码的脚本
  • default:这是使用-sC或-A参数扫描时候的脚本,提供基础的扫描能力
  • discovery:对网络进行更多的信息搜集,如SMB枚举,SNMP查询等
  • dos:用来发起拒绝服务GJ的脚本
  • exploit:用来完成对目标系统安全漏洞的脚本
  • external:针对第三方服务的脚本
  • fuzzer:进行模糊测试的脚本,发送异常的包到目标主机,探测出潜在的漏洞
  • intrusive:可能会引发目标系统崩溃或对目标网络形成极大负担的脚本,这类脚本很容易被防火墙或IPS发现
  • malware:用来检测恶意软件的脚本
  • safe:在任何状况下都是安全无害的脚本
  • version:负责加强服务于版本扫描功能的脚本
  • vuln:负责检查目标主机是否有常见漏洞
    这就是NSE的14个分类的脚本

NSE脚本的选择

咱们能够在命令行中输入 --script 选项来进行对脚本的选择,--script 后跟脚本的名字、脚本的种类或脚本存放的路径,或一个包含多个脚本的目录...
我这里是随便用了一个,检测主机是否有常见漏洞(直接用脚本的分类名称做为参数的话,扫描的时候是调用该分类下全部脚本去扫描)web

nmap -script vuln 192.168.126.139

Nmap脚本引擎NSE

可使用http-methods方法来枚举目标web服务器上所运行的服务sql

nmap -p 80,443 --script http-methods www.*****.com

Nmap脚本引擎NSE
从检测的结果中能够看到,目标服务器支持的方法有GET、HEAD、POST、OPTIONS 、TRACE。 数据库

另外也能够同时使用多个分类中的脚本去扫描浏览器

nmap --script exploit,malware 192.168.126.139

Nmap脚本引擎NSE

使用指定路径来执行NSE脚本,脚本在nmap目录下,/nmap/scripts/xxx.nse安全

nmap --script D:/Nmap/scripts/banner.nse 192.168.126.139

Nmap脚本引擎NSE

若是你会编写扫描脚本的话,能够在建立完成后放到文件夹里,若是这个文件夹有多个脚本,你能够将路径只写到目录,这样会使用这个目录下全部脚本进行扫描,也能够将路径指定到文件里的脚本,这样是使用单个脚本进行扫描。服务器

使用运算符来选择使用的脚本:cookie

使用除 exploit分类之外的脚本进行扫描

nmap --script "not exploit" 192.168.126.139

使用除intrusive、dos、exploit分类之外的脚本进行扫描

nmap --script "not (intrusive or dos or exploit)"  192.168.126.139

只使用safe和vuln进行扫描

nmap --script "safe and vuln" 192.168.126.139

此外,NSE中也支持通配符 * ,对一台运行SNMP服务的计算机进行检测,使用全部与SNMP相关的脚本

nmap --script "snmp-*" 192.168.126.139

这些分类和运算符能够结合操做

nmap --script "ftp-* and not(intrusive)" 192.168.126.139

如何向NSE脚本传递参数

Nmap中使用 --script-args 来指定NSE脚本运行时的参数

nmap -p80 --script http-methods www.***.com

当执行这个脚本的时候,Nmap会向目标服务器发送数据包,Nmap的数据包中包含的默认客户端信息。
Nmap脚本引擎NSE

这种客户端通常会被安全机制拦截,咱们可使用 --script-args 修改客户端信息为Mozilla 50

nmap -p 80 --script http-methods --script-args http.useragent="Mozilla 50" www.***.com

Nmap脚本引擎NSE

Nmap脚本引擎NSE

NSE脚本调试

若是想看nmap扫描时候的具体操做,这样可能会使操做过程更加清晰,在以前咱们也讲过可使用 --script-trace来查看

nmap -p 80 --script-trace --script http-methods --script-args "http.useragent=Mozilla 50" www.***.com

Nmap脚本引擎NSE

也可使用 -d [ 1-9 ] 切换调试模式,使用-d参数1-9,数字越大输出信息越详细

nmap -d3 --script-trace --script http-methods www.***.com

Nmap脚本引擎NSE

NSE常见脚本的应用

Nmap的基本功能只包括主机发现,端口扫描,操做系统和服务检测功能,而NSE进一步实现了大量高级功能。

信息搜集类脚本

NSE中大量脚本实现了这个功能,这些脚本使用不一样的技术完成了对目标的各类信息的搜集。利用脚本 http-methods查看目标服务器所支持的HTTP方法。
基于脚本http-methods的审计目的,web服务器须要支持HTTP方法,才能正确提供HTTP服务,常见的有如下几种:

  • GET:请求指定的页面信息
  • HEAD:获取报头
  • POST:向指定资源提交数据进行处理请求
  • PUT:从客户端向服务器传送的数据取代指定的文档内容
  • DELETE:请求服务器删除指定的页面
  • OPTIONS:容许客户端查看服务器的性能
  • TRACE:回显服务器收到的请求

    目前HTTP的TRACE、CONNECT、PUT、DELETE方法多是web服务器潜在的安全风险,尤为是服务器支持TRACE方法,有可能会遭到XSTGJ。将恶意代码嵌入一台已经被控制的主机的web文件中,当访问者浏览时恶意代码在浏览器执行,而后访问者的cookie、HTTP基本验证等信息会被传到已被控制的主机,同时传送Trace请求给目标服务器,致使cookie欺骗或中间人GJ。

高级主机发现类脚本

  1. 脚本broadcast-ping.NSE

    审计目的:发现本地网络中的活跃主机
    审计方法:这个脚本向整个本地网络中全部IP地址发送广播包,以本身所在网络为目标
    审计命令:

    nmap --script broadcast-ping

    审计结果:
    Nmap脚本引擎NSE

  2. 脚本 targets-sniffer

    审计目的:发现本地网络中的活跃主机
    审计方法:这个脚本会对你的本地网络进行嗅探,而后发现网络中的全部主机,以本身所在网络为目标
    审计命令:

    nmap -sL --script=target-sniffer -e xxx

    审计结果:
    Nmap脚本引擎NSE
    可使用-e监听网卡设备

密码审计类脚本

网络上提供的服务通常都具备必定的认证措施,目前应用最为普遍的认证措施仍是用户名和密码。这种认证措施的优点在于简单易行,而缺点在于不少用户意识不到密码强度的重要性,通常会选择一些比较简单容易记住的密码,而这些密码很容易被猜出来,所以网络的管理者须要一个有效的工具来对本身网络中各类服务的密码强度进行审计。

  1. 脚本mysql-brute.NSE

    审计目的:发现网络中弱口令的MySQL数据库

    审计方法:脚本mysql-brute.NSE的审计方法很简单,在Nmap中有两个数据文件,是一些常见的用户名和密码,这个脚本将这两个文件进行组合而后尝试登录。

    审计命令:

    nmap -p 3306 -packet-trace --script mysql-brute 192.168.126.141

    这里是没有破解出密码,破解的成功率取决于字典的大小哈,本身感兴趣的能够试试,github上也有爆破字典可使用的。
    Nmap脚本引擎NSE

2.脚本smtp-brute.NSE

smtp-brute.NSE脚本用来检测目标邮件服务器SMTP服务的密码是否合规。

审计目的:邮件服务器中常常会存储一些很是重要的信息,而对用户进行认证的方式就是用户和密码,这里存在一些简单的帐户名和密码,他们很容易成为被GJ的对象,所以须要先对服务器进行弱口令检查。.

审计方法:对密码审计的方法采用穷解的方式。这个脚本能够对SMTP密码的穷解,它支持LOGIN、PLAIN、CRAM-MD五、DIGEST-MD五、NTLM四种登陆方式。默认状况下,smtp-brute.NSE会使用/NSElib/data/username.lst文件中的内容做为用户名,/NSElib/data/passwords.lst 文件中的内容做为密码。

审计命令:

nmap -p 25 --script smtp-brute 192.168.0.1

审计结果:我这里没有搭建smtp就不作演示了,有条件的能够本身试试

漏洞扫描类脚本

NSE脚本扩充漏洞扫描的功能,利用这些脚本,就可使用Nmap对目标进行扫描。

1.脚本 http-slowloris.NSE

slowloris是一种GJ方法,原理是以极低的速度向服务器发送http请求。因为web server对于并发的链接数都有一个上限值,若是恶意链接不释放,那么web server的全部链接都会被恶意链接占用,致使拒绝服务。

审计方法:使用http-slowloris脚本,向目标发送链接,并保持这个链接,构造了一个畸形的http请求,是一个不完整的http请求。
 审计命令:
nmap -p 80 --script http-slowloris --max-parallelism 300 www.xxx.com

审计结果:这里不作实验,不要随意对网站进行测试
审计拓展:咱们能够经过调整http-slowloris.send_interval参数来改变扫描的过程。这个参数能够指定发送http header datas的间隔,默认为100,咱们来修改一下

nmap -p 80 --script http-slowloris --script-args http-slowloris.send_interval=200 --max-parallelism 300

http-slowloris.timeklimit参数指定Dos持续运行时间,默认为30分钟,咱们修改成10分钟

nmap -p 80 --script http-slowloris --script-args http-slowloris.timelimit=10m www.***.com

http-slowloris.runforever参数对指定目标一直发动DoSGJ。默认值为false

nmap -p 80 --script http-slowloris --script-args http-slowloris.runforever www.***.com

Nmap中还有一个http-slowloris-check.NSE的脚本,这个脚本不会发起DoS GJ,而是检测目标是否具有抵抗DOS GJ的能力。

nmap -p 80 --script http-slowloris-check www.***.com
相关文章
相关标签/搜索