首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

诸神之眼nmap定制化之NSE进阶

上一期斗哥跟大家介绍了Nmap中NSE脚本和常见的NSE的API,本期将为大家介绍Nmap的库文件以及如何利用Nmap的自身库将nmap的扫描结果保存在数据中。

0x01 NSE 中的库文件

NSE中的库文件实现了代码的分离和重构,有助于脚本的开发。斗哥的所用的Nmap库文件数目前有128个,存放在/nselib/文件夹中。

0x02 NSE库文件的编写

1.创建一个测试库文件

NSE的库文件就是一个lua文件。要编写一个库文件,如我们在/nselib/文件夹中新建一个名为testlib.lua的文件,该库文件返回参数port是开启的。

在新建的文件中,创建一个测试方法Porttest():

2.在NSE脚本中引用测试库

在scripts文件中新建一个测试脚本,testlib.nse文件,如果端口开启则把端口传入Porttest()方法中。

可以看到,引用库文件使用local,格式一般为:

local 库文件名 = require "库文件名",引用完毕即可直接使用库里面的方法和属性值了。

Nmap 命令:nmap -Pn 10.10.10.39 --script testlib,如果需要脚本或者库需要调试,可以加上-d参数进入调试模式。

0x03利用自有库和自定义库实现MySql写库

1.需要用到的库

mysql:用来进行数据库操作。

nmap:通过nmap建立socket连接mysql。

shortport:基本的port规则库。

serializelib:自定义库,将table数据转成字符串。

2.自定义库serializelib

这个库是自己写的将table数据转成字符串,便于将host.os、port.version等数据转成字符串写到数据库中。

该库下载地址:https://gitee.com/RE13ORN/my_nmap/blob/master/serializelib.lua

3.创建数据库和存放结果的表

需要在你的MySql中建一个名为nmap的数据库,然后建立表和字段:

4.连接MySQL的NSE脚本

注意,我们使用的是socket来连接mysql,而不是使用lua的第三方库,这将使得我们的脚本更具通用性。

建立socket

创建一个登录mysql的方法mysqlLogin

mysqlLogin引用了mysql库的receiveGreeting()连接socket和loginRequest登录的方法。

mysql.sqlQuery( socket, sql )进行数据库查询。

注意:使用sqlQuery执行SELECT操作正常,但是执行INSERT操作时,虽然也能正常写数据到数据库,但是有一个警告异常decodeDataPackets无接收到参数。

查找官网手册对mysql库的说明,https://nmap.org/nsedoc/lib/mysql.html,下面是官方对sqlQuery的介绍:

可以发现,sqlQuery必须要有返回值,因为其返回值会经过decodeDataPackets方法处理。而SELECT是有返回值的而INSERT无返回值故会报错。

解决的办法也很简单,在INSERT语句后添加一个SELECT 1语句使其有返回值即可。

完整代码:

Nmap语句:nmap -O 10.10.10.39 --script mysql-store

0x04小结

本期关与nmap库文件编写和mysql数据库存储就到这里了,更多库的使用和脚本应用可以查看官网手册去扩展或者自定义。另外,之前看到有人写数据库使用的是lua的第三方库,这种方式很繁琐且第三方库需要独立下载使用,建议还是使用“socket+自有库mysql”这种解决方案要好得多。

下期预告

NSE漏洞审计和渗透脚本的demo

NSE的并发处理

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180309G13HFO00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券