書名諸神之眼NMAP 學習筆記
20年6月11日7:23
port table(表)
-
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
-
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
-
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
-
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
-
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中的庫文件
-
庫文件的位置
庫文件在
/usr/share/nmap/nselib
halcyon編輯器會自動按照nmap的路徑進行找到庫
這些庫文件涵蓋了幾乎當前所有的流行協議、常見的字符串處理操作,甚至包含了用來實現對用戶名和密碼進行破解的brute庫文件。當在編寫NSE腳本的時候,你可能會考慮到代碼重構的問題。最好的解決方法還是將核心的代碼創建爲NSE的庫文件。事實上,NSE庫文件的創建是非常簡單的。NSE中的庫文件大都是使用Lua語言編寫的,但是如果你使用C或者C++語言也是可行的
NSE庫文件編寫和調用
-
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 -
調用
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