編寫自己的Nmap(NSE)腳本


編寫自己的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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM