nmap是一個網絡連接端掃描軟件,用來掃描網上電腦開放的網絡連接端。確定哪些服務運行在哪些連接端,並且推斷計算機運行哪個操作系統。它是網絡管理員必用的軟件之一,以及用以評估網絡系統安全。
—— 來自百度百科
那么今天帶大家來揭露Nmap的另一個面紗 ,那就是腳本。
在某些時候,我們大部分都使用Nmap進行掃描,然后再通過Metasploit進行漏洞利用,但是這個過程比較繁瑣,一個個漏洞去驗證的話還需要打開MSF去設置參數,最后run/exploit(不包括自動化,所以不要噴了)。
那么我們就要有必要認識一下Nmap的擴展腳本啦~
0x01 腳本參數
這個小例子中我會演示幾個基本的腳本使用方式,但是更多的還是需要大家掌握使用腳本的技巧,然后自行發掘了。筆者在此不概述太多。
SCRIPT SCAN: -sC: equivalent to --script=default --script=<Lua scripts>: <Lua scripts> is a comma separated list of directories, script-files or script-categories --script-args=<n1=v1,[n2=v2,...]>: provide arguments to scripts --script-args-file=filename: provide NSE script args in a file --script-trace: Show all data sent and received --script-updatedb: Update the script database. --script-help=<Lua scripts>: Show help about scripts. <Lua scripts> is a comma-separated list of script-files or script-categories.
上面這部分是Nmap關於腳本的參數,下面一個一個來介紹:
-sC 是指的是采用默認配置掃描,與--script=default參數等價
--script=腳本名稱,腳本一般都在Nmap的安裝目錄下的scripts目錄中
那么Linux下可以查看腳本數量:
ls /usr/share/nmap/scripts/ | wc -l 516
那么我當前的Nmap是有516個很使用的漏洞利用、工具腳本。也可以使用下面一條命令導出 ~
ls /usr/share/nmap/scripts/ | sed 's/.nse//' > scripts.list
那么所有的腳本名稱都在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 telnet telnet-brute.nse telnet-encryption.nse
那么可以看到,返回了兩個nse腳本名稱,那么第一個就是telnet爆破的腳本了,如果不清楚的話,可以使用上面剛介紹過的--script-help參數。
root@ThundeRobot:/usr/share/nmap# nmap --script-help=telnet-brute Starting Nmap 7.01 ( https://nmap.org ) at 2017-04-28 03:11 CST telnet-brute Categories: brute intrusive https://nmap.org/nsedoc/scripts/telnet-brute.html Performs brute-force password auditing against telnet servers.
可以看到 有一個Nmap的文檔地址,正是我們現在想要使用的腳本的詳細信息。
nmap -p 23 --script telnet-brute --script-args userdb=myusers.lst,passdb=mypwds.lst,telnet-brute.timeout=8s <target>
筆者就直接照搬官網文檔的例子了。經常做安全測試的朋友肯定看一眼就會用了。
最后那個 target指的是我們的目標地址。userdb是用戶名字典,passdb是密碼字典,timeout是每次連接之間的等待超時時間。
當然了,我們也可以直接查看腳本源文件
--- -- @usage -- nmap -p 23 --script telnet-brute \ -- --script-args userdb=myusers.lst,passdb=mypwds.lst \ -- --script-args telnet-brute.timeout=8s \ -- <target> -- -- @output -- 23/tcp open telnet -- | telnet-brute: -- | Accounts -- | wkurtz:colonel -- | Statistics -- |_ Performed 15 guesses in 19 seconds, average tps: 0 -- -- @args telnet-brute.timeout Connection time-out timespec (default: "5s") -- @args telnet-brute.autosize Whether to automatically reduce the thread -- count based on the behavior of the target -- (default: "true") author = "nnposter" license = "Same as Nmap--See https://nmap.org/book/man-legal.html" categories = {'brute', 'intrusive'} portrule = shortport.port_or_service(23, 'telnet')
上方這塊,可以看到有一個例子,還有常規的掃描結果。那么加粗的這行是筆者故意為之,因為在某些情況下,管理員可能會更改telnet服務的端口(這里不只是光指Telnet),那么我們就無法使用這個腳本了。聰明的你一定想到了更改上方的23端口吧!但是這還不夠靈活~ 我們可以將端口號自制成一個變量,通過我們的腳本參數傳遞進去。這里不再過多贅述,有違文章主體。
等等……還記得我們的-sC參數嗎?其實它等價與--script=default,那么default調用了那些腳本呢?
在這里:
點進去你一定會驚訝,為什么會調用那么多,而且會影響掃描速度(懶人方案)。所以最好的方案就是根據服務去手動調用合適的腳本。
下面我們來實戰一下,今日剛發現的運營商漏洞,就出在Telnet上。
我家上網是沒有分配公網IP的,就是路由那里是一個內網,於是我先用nmap探測了一下這個內網,發現有某些網絡設備。
Nmap scan report for bogon (10.14.16.106) Host is up (0.021s latency). Not shown: 95 filtered ports PORT STATE SERVICE 23/tcp open telnet 53/tcp open domain 1723/tcp open pptp 8081/tcp open blackice-icecap 49152/tcp open unknown
作為一個搞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.106
在這我用--script-trace開啟了數據的收發開關:
經過耐心等待,得到爆破結果:
看來都是真的,童話原來不是謊言。
我們登錄看看~
What ? 多協議路由?
為此我還復習了以前干網絡工程的知識。這個不談了。我們繼續再來個例子 ~
root@ThundeRobot:/usr/share/nmap/nselib/data# nmap --script=http-ls vault.centos.org Starting Nmap 7.01 ( https://nmap.org ) at 2017-04-28 04:01 CST Nmap scan report for vault.centos.org (109.72.83.61) Host is up (0.38s latency). Other addresses for vault.centos.org (not scanned): 2607:ff28:0:28:5054:ff:fe4b:3e8a Not shown: 998 filtered ports PORT STATE SERVICE 80/tcp open http | http-ls: Volume / | maxfiles limit reached (10) | SIZE TIME FILENAME | - 19-Aug-2009 01:36 2.1/ | 1.2M 19-Aug-2009 01:36 2.1/centos2-scripts-v1.tar | - 07-Sep-2004 13:04 2.1/extras/ | - 13-May-2004 03:26 2.1/final/ | - 15-Apr-2004 05:11 2.1/i386/ | - 08-Jan-2004 00:50 2.1/source/ | - 30-Dec-2003 06:18 2.1/updates/ | - 31-Jul-2005 16:05 3.1/ | - 20-Apr-2012 10:14 3.1/SRPMS/ | - 15-Sep-2004 14:17 3.1/addons/ |_ 873/tcp open rsync Nmap done: 1 IP address (1 host up) scanned in 58.35 seconds root@ThundeRobot:/usr/share/nmap/nselib/data#
這邊是掃描了http://centos.org的列目錄的安全隱患。
HTTP認證爆破:
nmap --script=http-brute dvwa.vuln.leafsec.com
0X03 延伸
漏洞利用方面: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
broadcast
brute
default
discovery
dos
exploit
external
fuzzer
intrusive
malware
safe
version
vuln
all
以上參數都可以作為--script的通配參數,例如:--script=vuln
--script=all 調用所有腳本掃描
0x04 總結
這篇文章沒什么技術含量,只是彈性較高,算是一個小干貨了,Nmap可以做數據庫、系統、協議、網絡等方面的評估。就是因為插件很豐富,省時省力。也希望大家在使用工具的同時細心一點,多做總結,這些腳本都是可以繼續優化起來的。那么就先到此結束啦~ 另外關於字典,我們可以讓nmap的字典更加強大,全部放到nmap/nselib/data就可以了,方便后期的調用與整理。
參考