Nmap腳本使用指南
0x00 介紹
本文由 一葉知安作者:傾旋 原創。未經許可,嚴禁轉載!
nmap是一個網路連接端掃描軟體,用來掃描網上電腦開放的網路連接端。確定哪些服務運行在哪些連接端,並且推斷計算機運行哪個操作系統。它是網路管理員必用的軟體之一,以及用以評估網路系統安全。
—— 來自百度百科
那麼今天帶大家來揭露Nmap的另一個面紗 ,那就是腳本。
在某些時候,我們大部分都使用Nmap進行掃描,然後再通過Metasploit進行漏洞利用,但是這個過程比較繁瑣,一個個漏洞去驗證的話還需要打開MSF去設置參數,最後run/exploit(不包括自動化,所以不要噴了)。
那麼我們就要有必要認識一下Nmap的擴展腳本啦~
0x01 腳本參數
這個小例子中我會演示幾個基本的腳本使用方式,但是更多的還是需要大家掌握使用腳本的技巧,然後自行發掘了。筆者在此不概述太多。
SCRIPT SCAN:n -sC: equivalent to --script=defaultn --script=<Lua scripts>: <Lua scripts> is a comma separated list ofn directories, script-files or script-categoriesn --script-args=<n1=v1,[n2=v2,...]>: provide arguments to scriptsn --script-args-file=filename: provide NSE script args in a filen --script-trace: Show all data sent and receivedn --script-updatedb: Update the script database.n --script-help=<Lua scripts>: Show help about scripts.n <Lua scripts> is a comma-separated list of script-files orn script-categories.n
上面這部分是Nmap關於腳本的參數,下面一個一個來介紹:
-sC 是指的是採用默認配置掃描,與--script=default參數等價
--script=腳本名稱,腳本一般都在Nmap的安裝目錄下的scripts目錄中
那麼Linux下可以查看腳本數量:
ls /usr/share/nmap/scripts/ | wc -ln516n
那麼我當前的Nmap是有516個很使用的漏洞利用、工具腳本。也可以使用下面一條命令導出 ~
ls /usr/share/nmap/scripts/ | sed s/.nse// > scripts.listn
那麼所有的腳本名稱都在scripts.list中了,這樣做的原因是因為我們傳遞腳本名稱的時候,不能寫腳本的文件擴展名(.nse)。
--script-args=key1=value1,key2=value2... 該參數是用來傳遞腳本裡面的參數的,key1是參數名,該參數對應value1這個值,那麼有更多的參數,使用逗號連接,後面例子中會給大家講解。
–script-args-file=filename,使用文件來為腳本提供參數。
--script-trace 如果設置該參數,則所有的腳本收發請求過程。
--script-updatedb 在Nmap的scripts目錄里有一個script.db,該文件中保存了當前Nmap可用的腳本,類似於一個小型資料庫,如果我們開啟nmap並且調用了此參數,則nmap會自行掃描scripts目錄中的擴展腳本,進行資料庫更新。
--script-help=腳本名稱,調用該參數後,Nmap會輸出該腳本名稱對應的腳本使用參數,以及詳細介紹信息。
0x02 實戰
現在我們用一個很簡單的腳本,telnet爆破腳本,我們搜索一下:
root@ThundeRobot:/usr/share/nmap# ls /usr/share/nmap/scripts/ | grep telnetntelnet-brute.nsentelnet-encryption.nsen
那麼可以看到,返回了兩個nse腳本名稱,那麼第一個就是telnet爆破的腳本了,如果不清楚的話,可以使用上面剛介紹過的--script-help參數。
root@ThundeRobot:/usr/share/nmap# nmap --script-help=telnet-brutennStarting Nmap 7.01 ( https://nmap.org ) at 2017-04-28 03:11 CSTnntelnet-brutenCategories: brute intrusivenhttps://nmap.org/nsedoc/scripts/telnet-brute.htmln Performs brute-force password auditing against telnet servers.n
可以看到 有一個Nmap的文檔地址,正是我們現在想要使用的腳本的詳細信息。
nmap -p 23 --script telnet-brute --script-args userdb=myusers.lst,passdb=mypwds.lst,telnet-brute.timeout=8s <target>n
筆者就直接照搬官網文檔的例子了。經常做安全測試的朋友肯定看一眼就會用了。
最後那個 target指的是我們的目標地址。userdb是用戶名字典,passdb是密碼字典,timeout是每次連接之間的等待超時時間。
當然了,我們也可以直接查看腳本源文件:
---n-- @usagen-- nmap -p 23 --script telnet-brute n-- --script-args userdb=myusers.lst,passdb=mypwds.lst n-- --script-args telnet-brute.timeout=8s n-- <target>n--n-- @outputn-- 23/tcp open telnetn-- | telnet-brute:n-- | Accountsn-- | wkurtz:coloneln-- | Statisticsn-- |_ Performed 15 guesses in 19 seconds, average tps: 0n--n-- @args telnet-brute.timeout Connection time-out timespec (default: "5s")n-- @args telnet-brute.autosize Whether to automatically reduce the threadn-- count based on the behavior of the targetn-- (default: "true")nnauthor = "nnposter"nlicense = "Same as Nmap--See https://nmap.org/book/man-legal.html"ncategories = {brute, intrusive}nnportrule = shortport.port_or_service(23, telnet)n
上方這塊,可以看到有一個例子,還有常規的掃描結果。那麼加粗的這行是筆者故意為之,因為在某些情況下,管理員可能會更改telnet服務的埠(這裡不只是光指Telnet),那麼我們就無法使用這個腳本了。聰明的你一定想到了更改上方的23埠吧!但是這還不夠靈活~ 我們可以將埠號自製成一個變數,通過我們的腳本參數傳遞進去。這裡不再過多贅述,有違文章主體。
等等……還記得我們的-sC參數嗎?其實它等價與--script=default,那麼default調用了那些腳本呢?
在這裡:
default NSE Category
點進去你一定會驚訝,為什麼會調用那麼多,而且會影響掃描速度(懶人方案)。所以最好的方案就是根據服務去手動調用合適的腳本。
下面我們來實戰一下,今日剛發現的運營商漏洞,就出在Telnet上。
我家上網是沒有分配公網IP的,就是路由那裡是一個內網,於是我先用nmap探測了一下這個內網,發現有某些網路設備。
nmap -sT -Pn -F 10.14.16.0/24n
我在結果中發現了一台主機的信息:
Nmap scan report for bogon (10.14.16.106)nHost is up (0.021s latency).nNot shown: 95 filtered portsnPORT STATE SERVICEn23/tcp open telnetn53/tcp open domainn1723/tcp open pptpn8081/tcp open blackice-icecapn49152/tcp open unknownn
作為一個搞Web安全的,首先去看的是8081……但是未果。於是準備從Telnet碰碰運氣,會不會運營商也用若口令?
我把字典放到了 /usr/share/nmap/nselib/data,因為這個目錄中是專門存放Nmap默認字典的。
掃描命令如下:
nmap -p 23 -Pn --script=telnet-brute --script-args=userdb=admin.lst,passdb=passwords.lst,telnet-brute.timeout=3s --script-trace 10.14.16.106n
在這我用--script-trace開啟了數據的收發開關:
經過耐心等待,得到爆破結果:看來都是真的,童話原來不是謊言。我們登錄看看~
What ? 多協議路由?為此我還複習了以前干網路工程的知識。這個不談了。我們繼續再來個例子 ~
root@ThundeRobot:/usr/share/nmap/nselib/data# nmap --script=http-ls vault.centos.orgnnStarting Nmap 7.01 ( https://nmap.org ) at 2017-04-28 04:01 CSTnNmap scan report for vault.centos.org (109.72.83.61)nHost is up (0.38s latency).nOther addresses for vault.centos.org (not scanned): 2607:ff28:0:28:5054:ff:fe4b:3e8anNot shown: 998 filtered portsnPORT STATE SERVICEn80/tcp open httpn| http-ls: Volume /n| maxfiles limit reached (10)n| SIZE TIME FILENAMEn| - 19-Aug-2009 01:36 2.1/n| 1.2M 19-Aug-2009 01:36 2.1/centos2-scripts-v1.tarn| - 07-Sep-2004 13:04 2.1/extras/n| - 13-May-2004 03:26 2.1/final/n| - 15-Apr-2004 05:11 2.1/i386/n| - 08-Jan-2004 00:50 2.1/source/n| - 30-Dec-2003 06:18 2.1/updates/n| - 31-Jul-2005 16:05 3.1/n| - 20-Apr-2012 10:14 3.1/SRPMS/n| - 15-Sep-2004 14:17 3.1/addons/n|_n873/tcp open rsyncnnNmap done: 1 IP address (1 host up) scanned in 58.35 secondsnroot@ThundeRobot:/usr/share/nmap/nselib/data# n
這邊是掃描了http://centos.org的列目錄的安全隱患。
HTTP認證爆破:
nmap --script=http-brute dvwa.vuln.leafsec.comn
漏洞利用方面:vuln NSE Category
許可權驗證方面:auth NSE Category
暴力破解方面:brute NSE Category
服務信息發現:discovery NSE Category
DOS攻擊方面:dos NSE Category
漏洞利用方面:https://nmap.org/nsedoc/categories/exploit.html
外部擴展方面:external NSE Category (集成了shodanAPI)
FUZZ測試方面:fuzzer NSE Category
一些針對的服務入侵模塊:intrusive NSE Category
惡意後門方面:malware NSE Category
版本識別:version NSE Category
auth
broadcastbrutedefault
discoverydosexploitexternalfuzzerintrusivemalware safeversionvuln
all
以上參數都可以作為--script的通配參數,例如:--script=vuln
--script=all 調用所有腳本掃描
0x04 總結
這篇文章沒什麼技術含量,只是彈性較高,算是一個小乾貨了,Nmap可以做資料庫、系統、協議、網路等方面的評估。就是因為插件很豐富,省時省力。也希望大家在使用工具的同時細心一點,多做總結,這些腳本都是可以繼續優化起來的。那麼就先到此結束啦~ 另外關於字典,我們可以讓nmap的字典更加強大,全部放到nmap/nselib/data就可以了,方便後期的調用與整理。
如果你有更好的優質文章想要分享:一葉知安徵稿 - 知乎專欄
如果你想要與我交流技術,可以加我的微信號:Guest_Killer_0nlis,我拉你進一葉知安讀者群。
推薦閱讀:
※好的安全工具就該藏著?
※你有學習的態度?黑客很近很近!
※github上開源掃描器集合
※破冰!懸鏡安全95後小夥伴在貴陽網路安全攻防演練中斬獲佳績!
※如何對有雙因子認證站點進行釣魚攻擊?