Nmap的API和库文件

0x01

记得我们上次写的脚本吗?脚本内容的portrule中是这样的:
return port.protocol == “tcp” and port.number == 80 and port.service == “http” and port.state == “open”
有没有想过port的protocol,number,service,state是哪儿来的?
这些其实就是nmap提供给我们的API。API的核心功能就是向脚本提供关于主机和端口的信息,例如名字解析,主机和端口的状态、服务发现等。
Nmap中的引擎会向脚本传递如下两个Lua table类型的参数:host table,port table
这两个table中包含了目标主机的host和port信息。
先来看看host table,包括的字段有
在这里插入图片描述
每个字段的具体含义可以去这里查看:
https://nmap.org/book/nse-api.html
这里就稍微介绍些host.os,它是操作系统匹配表的数组。操作系统匹配由一个可读的名称和一系列操作系统类组成。每个操作系统类由一个供应商、操作系统系列、操作系统生成、设备类型和该类的一组CPE条目组成
格式如下
在这里插入图片描述
如果能与nmap-os-db(nmap的主机指纹库)中的条目匹配,则会返回类似如下的详细信息
在这里插入图片描述
我们现在以mac_addr为例,看看通过它能得到什么信息。它表示目标的mac地址,只有处于同一子网的设备,这个参数才有效。
我们创建一个名为apitest.nse的脚本,因为是host表的字段,所以执行规则是hostrule
在这里插入图片描述
我们想要得到的是mac_addr,所以在action中return回host.mac_addr
在这里插入图片描述
完整代码如图所示
在这里插入图片描述
保存并update script db
测试结果如下
在这里插入图片描述
可以看到打印出了mac地址,可以看到这个mac地址和我们平时见到的格式不太一样。因为通过host.mac_addr获取的mac地址是二进制编码的,我们要转换成字符串,需要引入stdnse库,stdnse包中有一个format_mac函数,能够将host.mac_addr转换成字符串
所以在nse脚本开头加上
在这里插入图片描述
action的return部分改为
在这里插入图片描述
完整代码如下
在这里插入图片描述
运行结果如图
在这里插入图片描述
此时得到了可读的mac地址了
host的其他字段请自行根据上述的方法测试。

0x02
接下来再看看port。Port的字段比较少,包括number,protocol,service,verison,state等。
以之前写的脚本用到的
“return port.protocol == “tcp” and port.number == 80 and port.service == “http” and port.state == “open”
为例
protocol标志了目标端口的类型,为tcp或udp
number就是目标端口的编号
service即端口上运行的服务
state表示端口上运行的状态
脚本就是通过判断80端口开放,运行这http,然后打印出this is a webserver的
同样也写一个脚本测试一下
需要注意,这时应该是portrule
在这里插入图片描述
以及action是返回port.protocol
在这里插入图片描述
完整代码
在这里插入图片描述
测试结果如图
在这里插入图片描述
可以看到分别打印出了对应的protocol,上图中都是tcp

0x03

前面我们在格式化host.mac_addr返回的mac地址时,使用了stdnse这个库文件,接下来我们来学习nse中的库文件
自带的库文件都在/usr/share/nmap/nselib,Halcyon列出来了
在这里插入图片描述
我们切换到对应的路径下,自己写一个库文件试试
在这里插入图片描述
这个库的功能是打印出某端口是否开放
我们先声明所需的库文件”stdnse”,它保存了一些用于输入的函数
然后定义一个函数,它需要一个参数,将参数传递给stdnse库,用于格式化输出format函数
在这里插入图片描述
保存并退出
接下来写个nse,在其中导入这个库文件
在这里插入图片描述
调用这个函数
在这里插入图片描述
这里PrintPort就是我们在mylib.lua这个库中定义的函数
保存并update scriptdb
运行测试如下
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值