Nmap擴展開發(一)
來自專欄一葉知安26 人贊了文章
由於傳播、利用此文所提供的信息而造成的任何直接或者間接的後果及損失,均由使用者本人負責,一葉知安以及文章作者不為此承擔任何責任。
一葉知安擁有對此文章的修改和解釋權。如欲轉載或傳播此文章,必須保證此文章的完整性,包括版權聲明等全部內容。未經一葉知安允許,不得任意修改或者增減此文章內容,不得以任何方式將其用於商業目的。
0x01 前言
本來是想寫成一本書的,但是可能斷斷續續沒有很好的產出,我只能以文章的形式分享出來了,希望我的研究成果能夠給大家帶來便利。—— 作者:傾旋
PS :如果你不知道你是否需要學習這個技術,那麼我可以先告訴你Nmap能夠做什麼:
- 網路結構畫像
- 漏洞掃描
- 漏洞利用
- 埠掃描
- 爬蟲
- 信息搜集
- ....
我的分類不是很清晰,但是對於一個滲透測試人員、運維人員、甲、乙方的工程師都會需要它的定製化功能,例如:將掃描結果寫到資料庫?新的漏洞出了POC,客戶需要立即進行漏洞掃描?
導出掃描結果這個問題,Nmap官方做出如下回應:
Nmap Network Scanning
一個共同的願望是將Nmap結果輸出到資料庫以便於查詢和跟蹤。這允許用戶來自個人滲透測試儀 到國際企業存儲他們的所有掃描結果並輕鬆比較它們。企業可能每天運行大型掃描,並為新打開的埠或可用計算機的郵件管理員安排查詢。滲透測試人員可能會了解新漏洞並搜索受影響應用程序的所有舊掃描結果,以便他可以警告相關客戶端。研究人員可以掃描數百萬個IP地址,並將結果保存在資料庫中,以便進行實時查詢。雖然這些目標值得稱讚,但Nmap不提供直接的資料庫輸出功能。我不僅有太多不同的資料庫類型支持它們,而且用戶的需求變化如此之大,以至於沒有單一的資料庫模式是合適的。企業,筆測試員和研究人員的需求都需要不同的表結構。
而很多朋友大多都是使用Python來調用Nmap進行格式解析,這種方式無法預估掃描進度,不能進行狀態交互,效率很差,如果我們需要一個實時進行獨寫、漏洞檢測等定製化的操作,那麼就可以跟我一起來學習如何寫一個自己的Nmap腳本,這本書涵蓋的知識比較多,會涉及安全、網路協議、編程技術這些相關知識,相信你能夠收穫很多。
筆者寫擴展腳本開發系列的初衷是讓大家了解nmap這個優秀的開源工具的功能,解決一些定製化的掃描需求。
在開始之前,需要讀者具備:能夠熟練使用Nmap進行埠掃描、了解Nmap目錄結構、懂得常見的網路知識、Lua基礎(如果需要的話,我會在後期鋪墊)。
請將你的讀後感或建議留言評論,不勝榮幸!
0x02 Nmap擴展腳本分類
- auth 處理身份驗證
- broadcast 網路廣播
- brute 暴力猜解
- default 默認
- discovery 服務發現
- dos 拒絕服務
- exploit 漏洞利用
- external 外部擴展
- fuzzer 模糊測試
- intrusive 掃描可能造成不良後果
- malware 檢測後門
- safe 掃描危害較小
- version 版本識別
- vuln 漏洞檢測
0X03 Nmap擴展腳本鋪墊
相信網上已經有很多文章去寫如何使用擴展腳本了,這塊我不準備過多的鋪墊。
主要介紹如下幾點:
- Nmap擴展腳本用途
- Nmap擴展腳本使用方法
- 如何查看Nmap擴展腳本的Usage(使用方法)
0X03 [1] Nmap擴展腳本用途>
Nmap擴展腳本能夠幫助我們實現更多定製化的需求掃描、結果的處理、漏洞的檢測、漏洞的利用等。在0x02中已經列出了擴展腳本的分類,根據說明我們能理解一個大概,這些分類代表了Nmap各個方面的能力。
0x03 [2] Nmap擴展腳本使用方法
在很早之前,我寫過一篇科普文章,主要介紹了Nmap的腳本分類、使用方法,鏈接:http://zhuanlan.zhihu.com/p/26618074
本章沒有太多概念性的東西,希望讀者能夠邊看邊做。首先設定一個需求,我有一個需要搜集某個IP或某組IP所有開放HTTP服務的中間件信息。那麼Nmap有一個腳本是可以直接滿足我們需求的:
http-server-header.nse
掃描命令:nmap --script=http-server-header <TARGET>
例如我需要掃描192.168.85.132的HTTP服務的中間件信息,使用Nmap時需要輸入以下命令:
nmap --script=http-server-header 192.168.85.132
執行結果如下:
從掃描結果可以看出,在掃描到80埠的開放狀態及服務名稱下方會輸出關於http-server-header腳本的結果:Apache/2.4.29 (Debian)
一般情況下,在nmap安裝目錄下有一個scripts文件夾,裡面存放了很多供我們調用的腳本,腳本的語言是lua,文件擴展名是nse。使用腳本時我們不需要輸入腳本的全名,例如,調用http-server-header.nse時,只需要輸入文件名http-server-header即可。
下面介紹一些帶參數的擴展腳本使用方法。同樣的,設定一個需求,我需要掃描192.168.85.132的HTTP服務下有哪些目錄或者文件,那麼可以採用http-enum.nse腳本。
http-enum.nse用於枚舉http服務下的目錄或文件
但是單單使用這個腳本,而不根據實際情況設定內置參數,結果可能並不理想。這個腳本有一些參數:
- http-enum.basepath 開始目錄
- http-enum.displayall 是否顯示全部(默認HTTP狀態碼200顯示,401不顯示)
- http-enum.fingerprintfile 指定其他文件,從中讀取指紋
- http-enum.category 設置類別(attacks,database, general, microsoft, printer)
- http-fingerprints.nikto-db-path 指定nikto資料庫的路徑
假設要從admin目錄開始進行枚舉,需要輸入如下命令:
nmap --script=http-enum --script-args 『http-enum.basepath=admin』
192.168.85.1320X03 [3] 如何查看Nmap擴展腳本的Usage(使用方法)
使用--script-help參數
nmap --script-help=http-enum
- 直接查看腳本文件
cat /usr/share/nmap/scripts/http-enum.nse
下一章:擴展腳本(NSE引擎)執行規則
推薦閱讀:
※是不是被克隆電話卡了呢?如何解釋這件事情?
※如何看待阮一峰的博客被人攻擊?
※如何評價2018強網杯線下賽?
※作為最具極客精神和朋克精神的DEFCON,走入中國後DEFCON CHINA會發生什麼好玩的事情?
※我國軍網的防護性是什麼級別的?