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
    

    在這裏插入圖片描述

  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
    

    在這裏插入圖片描述

  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 
    

    在這裏插入圖片描述

  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
    

    在這裏插入圖片描述

  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
    

    在這裏插入圖片描述

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

    在這裏插入圖片描述

    halcyon編輯器會自動按照nmap的路徑進行找到庫
    在這裏插入圖片描述
    這些庫文件涵蓋了幾乎當前所有的流行協議、常見的字符串處理操作,甚至包含了用來實現對用戶名和密碼進行破解的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
    

    在這裏插入圖片描述

QQ2737977997

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章