6 ,nmap NSE中的API port table(表),NSE库文件编写

书名诸神之眼NMAP 学习笔记

20年6月11日7:23

port table(表)

  1. port.number字段
    这个字段标识了目标端口

    代码
    我保存到了名为wode.nse

    local 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 true
    end
    
    action = function(host, port)
    
    	return port.number
    
    end
    

    wode.nse移动到/usr/share/nmap/scripts/文件下面
    复制进去要更新一下nmap脚本的数据库
    命令

    nmap --script-updatedb
    

    结果
    命令

    sudo nmap --script wode 192.168.31.21
    

    6 ,nmap NSE中的API port table(表),NSE库文件编写_第1张图片

  2. port.protocol
    这个字段是识别TCP和UDP的端口的类型

    代码
    我保存到了名为wode.nse

    local 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 true
    end
    
    action = function(host, port)
    
    	return port.protocol
    end
    

    wode.nse移动到/usr/share/nmap/scripts/文件下面
    复制进去要更新一下nmap脚本的数据库
    命令

    nmap --script-updatedb
    

    结果
    命令

    sudo nmap --script wode 192.168.31.21
    

    6 ,nmap NSE中的API port table(表),NSE库文件编写_第2张图片

  3. port.service字段
    字段是目标的端口的运行的服务

    代码
    我保存到了名为wode.nse

    local 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 true
    end
    
    action = function(host, port)
    
    	return port.service
    end
    

    wode.nse移动到/usr/share/nmap/scripts/文件下面
    复制进去要更新一下nmap脚本的数据库
    命令

    nmap --script-updatedb
    

    结果
    命令

    sudo nmap --script wode 192.168.31.21 
    

    6 ,nmap NSE中的API port table(表),NSE库文件编写_第3张图片

  4. port.version字段
    字段中保存了通过服务扫描发现的版本信息,包括name、name_confidence、product、version、extrainfo、hostname、ostype、devicetype、service_tunnel、service_ftp以及cpe_code等字段。注意这个字段需要使用参数-sV

    代码

    local 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 true
    end
    
    action = function(host, port)
    
    	return port.version
    end
    

    wode.nse移动到/usr/share/nmap/scripts/文件下面
    复制进去要更新一下nmap脚本的数据库
    命令

    nmap --script-updatedb
    

    结果
    命令

    sudo nmap --script wode 192.168.31.21 -sV
    

    6 ,nmap NSE中的API port table(表),NSE库文件编写_第4张图片

  5. port.state字段
    存放端口的状态

    代码

    local 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 true
    end
    
    action = function(host, port)
    
    	return port.state
    end
    

    wode.nse移动到/usr/share/nmap/scripts/文件下面
    复制进去要更新一下nmap脚本的数据库
    命令

    nmap --script-updatedb
    

    结果
    命令

    sudo nmap --script wode 192.168.31.21
    

    6 ,nmap NSE中的API port table(表),NSE库文件编写_第5张图片

NSE中的异常处理

代码

local nmap = require "nmap"
local comm = require "comm"
local shortport = require "shortport"

description = [[]]

author = "root"

license = "Same as Nmap--See http://nmap.org/book/man-legal.html"

categories = {"default,discovery,safe"}



portrule = shortport.port_or_service(79, "finger")

action = function(host, port)
	try = nmap.new_try()
	return try(comm.exchange(host, port, "\r\n", 
	{lines=100, timeout=5000}))
end

上面代码说明
nmap提供了nmap库,叫nmap
监控异常的代码放置在Nmap.new_try()函数的括号中即可,这个函数的第一个返回值就表明了状态。如果返回值为false或者nil,第二个返回值就是一个错误相关的字符串
如果comm.exchange正常执行的话,就可以返回原本的值,如果出现异常,就可以返回这个异常

NSE中的注册表

NSE注册表也是一个Lua
tablc 类型的数据文件,他主要用来保持住一次扫描中各个脚本之间共享的变量,这个注册表保持住一个名为nmap.refistry的变量中。举个例子,在使用脚本对目标的口令进行爆破的时候,就可以使用这个注册表把已经破解的用户密码保持起来,已提供其他脚本的使用。例如,爆破得到目标的用户admin,密码123456,就会执行一个插入操作

table.iNSErt(Nmap.registry.credentials.http, 
{ username = admin, password =123456 } )

NSE中的库文件

  1. 库文件的位置

    库文件在/usr/share/nmap/nselib

    6 ,nmap NSE中的API port table(表),NSE库文件编写_第6张图片

    halcyon编辑器会自动按照nmap的路径进行找到库
    6 ,nmap NSE中的API port table(表),NSE库文件编写_第7张图片
    这些库文件涵盖了几乎当前所有的流行协议、常见的字符串处理操作,甚至包含了用来实现对用户名和密码进行破解的brute库文件。当在编写NSE脚本的时候,你可能会考虑到代码重构的问题。最好的解决方法还是将核心的代码创建为NSE的库文件。事实上,NSE库文件的创建是非常简单的。NSE中的库文件大都是使用Lua语言编写的,但是如果你使用C或者C++语言也是可行的

NSE库文件编写和调用

  1. NSE库文件编写

    代码

    保存的文件名a.lua保持到/usr/share/nmap/nselib目录里面

    function b(port)         
            return string.format("The port '%s' is open",port)      
    end
    

    代码说明
    function 定义函数的,定义了一个a函数传参是port
    string.format函数是一个类似printf的格式化字符串我看到了一个写的很详细的在这个地址https://blog.csdn.net/hello_crayon/article/details/50667927

  2. 调用
    NSE脚本调用
    编写一个NSE脚本
    代码
    保持的文件名为wode.nse

    local shortport = require "shortport"
    local a = require "a"
    
    
    description = [[]]
    
    author = "root"
    
    license = "Same as Nmap--See http://nmap.org/book/man-legal.html"
    
    categories = {"default"}
    
    
    
    
    
    portrule = function(host, port)
            return true
    end
    
    action = function(host, port)
    
            return b(port.number)
    
    end
    

    代码调用说明
    上面的代码local a = require "a"就是调用上面编写的a.lua的脚本文件
    上面的代码 return b(port.number)代码就是b就是a.lua的脚本文件里面的函数,port.number传参给a.lua的脚本文件文件里面的port

    wode.nse移动到/usr/share/nmap/scripts/文件下面
    复制进去要更新一下nmap脚本的数据库
    命令

    nmap --script-updatedb
    

    结果
    命令

    sudo nmap --script wode 192.168.31.21
    

    6 ,nmap NSE中的API port table(表),NSE库文件编写_第8张图片

QQ2737977997

你可能感兴趣的:(nmap,nmap)