3,nmap,NSE脚本格式和编写
书名诸神之眼NMAP 学习笔记
编辑器安装
- halcyon编辑器安装
官方https://halcyon-ide.org/
linux安装
1 | # install dependencies |
2. 创建
1.添加
2.创建,名字,类型
2.2是选择的类型
上面照片1是选择的类型,下面这个是所有的类型
3. 结果
编写简单的NSE脚本
- 首先添加description字段,这里只是一段介绍性的文字,用于说明脚本的目的和用法,没有严格的要求,
description字段:这部分内容介绍该NSE的功能,在Nmap中可以使用–script-help选项来阅读其中的内容。 - author字段是脚本作者的名字
- 如果没有特殊原因的话,license字段的内容无须修改。 liceNSE = “Same as Nmap–See https://Nmap.org/book/man-legal.html"
- categories字段:这部分内容给出了该NSE所在的分类
在/usr/share/nmap/scripts
文件里有一个script.db
文件
5. 目前一共有4种规则
1、Prerule()规则,这个规则的执行要早于Nmap的扫描,因此这类脚本不会调用Nmap扫描得到的任何结果。执行的顺序是先脚本,后Nmap扫描
2、Hostrule()规则,这个规则是在Nmap已经完成了主机发现之后执行的,根据主机发现的结果来触发该类脚本。执行的顺序是先Nmap主机发现,后脚本
3、Portrule()规则,这个规则与hostrule()规则相类似,不过是在执行了端口扫描或版本侦测时才会触发的脚本,这个规则的执行与端口的状态联系紧密。执行的顺序是先Nmap端口扫描,后脚本
4、Postrule()规则,这个规则是在Nmap已经完成所有的扫描之后才执行,一般用来处理扫描结果。执行的顺序是当所有的扫描都结束以后才会执行脚本
这个host是主机, port 是端口
6. rule字段
描述脚本执行的规则,也就是确定触发脚本执行的条件。这个规则是一个Lua函数,返回值只有true和false两种。只有当rule字段返回true时,action中的函数才会执行
- action字段:脚本执行的具体内容。当脚本通过rule字段的检查被触发执行时,就会调用action字段定义的函数
- 编写一个脚本、
文件名是my-http-detect.nse
类型是default
代码是1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28local shortport = require "shortport"
description = [[]]
author = "root"
license = "Same as Nmap--See http://nmap.org/book/man-legal.html"
categories = {"default"}
portrule = function( host, port )
return port.protocol == "tcp" and port.number == 80 and port.service == "http" and port.state == "open"
end
action = function(host, port)
return " This is a WebServer"
end
1.代码解释port.protocol == "tcp" and port.number == 80 and port.service == "http" and port.state == "open"
action = function(host, port)
return " This is a WebServer"
这样当目标服务器上开放的80端口运行着HTTP服务的时候,就可以执行action部分。编写当portrule返回值成功的时候执行的代码
2.导入到nmap脚本数据库
叫my-http-detect.nse
移动到/usr/share/nmap/scripts/
文件下面
复制进去要更新一下nmap脚本的数据库
命令
1 | nmap --script-updatedb |
3.使用
导入成功后就可以使用了
命令
1 | nmap --script my-http-detect [目标] |
结果
NSE脚本实例应用:垃圾邮件木马的检测
下面是目标主机的端口进行检测。查看是否有异常的端口开放了SMTP服务。输出这个异常的端口
- 应为是这个脚本是通过对目标主机端口扫描的结果分析得到的
所以选择的是execution
- 代码
1 | local shortport = require "shortport" |
代码介绍
1.port.service == "smtp"
要对这个检测得到的port表中的所有内容进行检测,首先查看是否有SMTP服务
2.port.number ~= 25
和 port.number ~= 465
和 port.number ~= 587
port.protocol == "tcp"
port.state == "open"
测该服务是否在不正常的端口上运行,SMTP正常应该运行在25、465或者587端口上,结果如果不符合上面的规则,就输出return "Mail server on unusual port: possible malware"
叫代码文件移动到/usr/share/nmap/scripts/
文件下面
复制进去要更新一下nmap脚本的数据库
命令
1 | nmap --script-updatedb |
开始扫描
1 | nmap --script 脚本名 [目标] |
扫描结果