预备知识
关于nmap
Nmap(网络映射器)是Gordon Lyon最初编写的一种安全扫描器,用于发现计算机网络上的主机和服务,从而创建网络的“映射”。为了实现其目标,Nmap将特定数据包发送到目标主机,然后分析响应。
实验目的
通过该实验了解nmap脚本的编写。
实验环境
服务器:kali,IP地址:随机分配;win,IP地址:10.1.1.100
辅助工具:halcyon
实验步骤一
Halcyon是一个开源的专门设计用于开发Nmap脚本的IDE。通过Halcyon你可以开发从侦察到利用的各类Nmap高级扫描脚本。
安装过程如下(已安装完成,直接启动即可):
安装依赖:
apt-get install default-jre
apt-get install ant
从git上clone:
git clone https://github.com/s4n7h0/Halcyon.git
接下来开始编译:
命令:
java -cp /opt/Halcyon/src/lib/autocomplete.jar:/opt/Halcyon/src/lib/rsyntaxtextarea.jar:/opt/Halcyon/dist/Halcyon_IDE_v2.0.1.jar halcyon.ide.HalcyonIDE
启动后会出现如下界面:
提示还没有配置,点击yes:
点击auto config自动配置:
点击apply:
要求我们重启后生效。
在此输入上面的命令即可启动:
新建一个项目:
会弹出如下对话框,要求填写脚本分类、存储位置等:
点击script name右边的文件夹,打开后选择保存在kali中nmap脚本的默认路径下,命名为demo.nse:
点击save,其他选项如图所示,然后点击create:
可以看到已经生成了一个nse脚本的模板文件。
实验步骤二
简单介绍下Halcyon的布局,左侧分别是namp脚本:
nse需要的数据,比如爆破时的字典、指纹等等:
以及nmap的库文件:
实验步骤三
Halcyon对于编写nmap脚本而言功能非常强大,比如使用project→code generator功能可以快速生成对应的功能代码,以socket为例:
生成的代码如下:
接下来我们编写个简单的nmap脚本实现对web服务器的检测功能。
我们就做这么一个简单的功能:
如果发现目标开放了80端口,并在这个端口上运行http服务,则输出“this is a webserver”。
description字段没有什么好修改的。
我们直接来到关键部分,因为我们这个脚本的功能是评估目标是否为web服务器要根据端口状态及端口上的服务来判断,需要要用到portrule规则。
需要修改return为:
return port.protocol == "tcp" and port.number == 80 and port.service == "http" and port.state =="open"
这样当目标服务器上开放的80端口运行着http服务时,就命中了规则,接着去执行action部分。
所以我们再来编写action部分的代码:
然后ctrl+s保存,再点击file→update script DB:
接着测试一下:
nmap --script demo 10.1.1.100
可以看到在扫描出80端口开放之后就打印出了This is a WebServer。