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