码迷,mamicode.com
首页 > 其他好文 > 详细

编写自己的Nmap(NSE)脚本

时间:2017-06-17 23:23:19      阅读:590      评论:0      收藏:0      [点我收藏+]

标签:操作   过程   信息   this   模块   tcp   state   class   通过   

编写自己的Nmap脚本

一、介绍

  在上一篇文章Nmap脚本引擎原理中我们介绍了基本的NSE知识,这篇文章介绍如何基于Nmap框架编写简单的NSE脚本文件,下一篇文章,Nmap脚本文件分析(AMQP协议为例)会详细分析Nmap自带脚本的执行过程,以及各语句含义。

  根据上一篇文章的知识,我们知道编写NSE脚本,主要是写rule函数和action,rule函数返回true时,action函数执行。

二、例子

  (1)如果某个IP开放80端口则脚本扫描输出 "This IP open 80 port!"。

  我们通过shodan搜索,得知92.62.34.104下开通了80端口。

技术分享

 

技术分享

脚本http_test.nse,放在Nmap安装路径的scripts文件夹下面(基于Windows,也可以放在其他下面)

portrule = function(host, port)

    return port.protocol == "tcp" 
            and port.number == 80 
            and port.state == "open"
end

-- The Action Section --
action = function(host, port)

    return "This IP ".. host.ip .." open 80 port!"
end

  输出结果:

技术分享

 

 

      (2)调用Nmap库函数实现Rule编写

    Nmap现在已有566种NSE脚本,为了更容易实现判断,对service scripts rule进行了封装,shortport模块已封装了判断函数。

-- 导入依赖模块
local shortport = require "shortport"

-- The Rule Section --
portrule = shortport.http

-- The Action Section --
action = function(host, port)

    return "This IP ".. host.ip .." open 80 port!"
 end

三、总结

  几点建议:

  1)我们在编写NSE时,规则可以调用shortport提供的判断函数,action里面可以新建连接;要会使用host和port这两张表,表里面包含了Nmap运行期间得知的所有信息;不会写那就照着现有的566个,模仿着写。

  2)Nmap能够自动格式化输出,我们只要返回结果即可,也可以通过运行选项来测试我们写的脚本对不对,这时候要尽可能提高Nmap探测的速度,例如上面的例子可使用下面的选项探测。

技术分享

  3)编写NSE识别服务,跟我们自己使用Python、Perl、Java语言建立socket连接解析类似,只不过在NSE里面可以使用Nmap自带的版本探测结果,这样方便了我们操作。

  4)熟悉HPing,Ftp,netstat等客户端工具,一样可以进行banner信息的提取与探测。

  5)如果能够用上层语言调用Nmap执行,也能实现自动化探测,自动化数据分析操作。

 

四、参考文献

  http://www.2cto.com/article/201410/339758.html   不知道是否是原文,参考了这篇博客。

  http://www.cnblogs.com/liun1994/p/7041373.html

  http://www.cnblogs.com/liun1994/p/6978285.html

 

编写自己的Nmap(NSE)脚本

标签:操作   过程   信息   this   模块   tcp   state   class   通过   

原文地址:http://www.cnblogs.com/liun1994/p/7041531.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!