NSE中的腳本採用Lua語言編寫。NSE設計出來是爲了提供Nmap的靈活性,式版的NSE包含14個大類的腳本,總數達500多個,這些腳本的功能包括對各類網絡口令強度的審計,對各類服務器安全性配置的審計,對各類服務器漏洞的審計等。mysql
咱們使用NSE腳本測試一臺主機,咱們來看一下這條指令使用的參數,-O進行操做系統檢測,-sV對目標系統的服務進行檢測,這裏咱們沒有使用腳本的參數全部使用的是默認腳本,默認腳本會使用-sC參數。默認腳本通常不會對目標系統形成危害,可是其餘的一些腳本可能會引發安全防護設備的報警。git
nmap -sV -sC -O scanme.Nmap.org
默認分類中的腳本:github
咱們能夠在命令行中輸入 --script 選項來進行對腳本的選擇,--script 後跟腳本的名字、腳本的種類或腳本存放的路徑,或一個包含多個腳本的目錄...
我這裏是隨便用了一個,檢測主機是否有常見漏洞(直接用腳本的分類名稱做爲參數的話,掃描的時候是調用該分類下全部腳本去掃描)web
nmap -script vuln 192.168.126.139
可使用http-methods方法來枚舉目標web服務器上所運行的服務sql
nmap -p 80,443 --script http-methods www.*****.com
從檢測的結果中能夠看到,目標服務器支持的方法有GET、HEAD、POST、OPTIONS 、TRACE。 數據庫
另外也能夠同時使用多個分類中的腳本去掃描瀏覽器
nmap --script exploit,malware 192.168.126.139
使用指定路徑來執行NSE腳本,腳本在nmap目錄下,/nmap/scripts/xxx.nse安全
nmap --script D:/Nmap/scripts/banner.nse 192.168.126.139
若是你會編寫掃描腳本的話,能夠在建立完成後放到文件夾裏,若是這個文件夾有多個腳本,你能夠將路徑只寫到目錄,這樣會使用這個目錄下全部腳本進行掃描,也能夠將路徑指定到文件裏的腳本,這樣是使用單個腳本進行掃描。服務器
使用運算符來選擇使用的腳本:cookie
使用除 exploit分類之外的腳本進行掃描
nmap --script "not exploit" 192.168.126.139
使用除intrusive、dos、exploit分類之外的腳本進行掃描
nmap --script "not (intrusive or dos or exploit)" 192.168.126.139
只使用safe和vuln進行掃描
nmap --script "safe and vuln" 192.168.126.139
此外,NSE中也支持通配符 * ,對一臺運行SNMP服務的計算機進行檢測,使用全部與SNMP相關的腳本
nmap --script "snmp-*" 192.168.126.139
這些分類和運算符能夠結合操做
nmap --script "ftp-* and not(intrusive)" 192.168.126.139
Nmap中使用 --script-args 來指定NSE腳本運行時的參數
nmap -p80 --script http-methods www.***.com
當執行這個腳本的時候,Nmap會向目標服務器發送數據包,Nmap的數據包中包含的默認客戶端信息。
這種客戶端通常會被安全機制攔截,咱們可使用 --script-args 修改客戶端信息爲Mozilla 50
nmap -p 80 --script http-methods --script-args http.useragent="Mozilla 50" www.***.com
若是想看nmap掃描時候的具體操做,這樣可能會使操做過程更加清晰,在以前咱們也講過可使用 --script-trace來查看
nmap -p 80 --script-trace --script http-methods --script-args "http.useragent=Mozilla 50" www.***.com
也可使用 -d [ 1-9 ] 切換調試模式,使用-d參數1-9,數字越大輸出信息越詳細
nmap -d3 --script-trace --script http-methods www.***.com
Nmap的基本功能只包括主機發現,端口掃描,操做系統和服務檢測功能,而NSE進一步實現了大量高級功能。
信息蒐集類腳本
NSE中大量腳本實現了這個功能,這些腳本使用不一樣的技術完成了對目標的各類信息的蒐集。利用腳本 http-methods查看目標服務器所支持的HTTP方法。
基於腳本http-methods的審計目的,web服務器須要支持HTTP方法,才能正確提供HTTP服務,常見的有如下幾種:
TRACE:回顯服務器收到的請求
目前HTTP的TRACE、CONNECT、PUT、DELETE方法多是web服務器潛在的安全風險,尤爲是服務器支持TRACE方法,有可能會遭到XSTGJ。將惡意代碼嵌入一臺已經被控制的主機的web文件中,當訪問者瀏覽時惡意代碼在瀏覽器執行,而後訪問者的cookie、HTTP基本驗證等信息會被傳到已被控制的主機,同時傳送Trace請求給目標服務器,致使cookie欺騙或中間人GJ。
高級主機發現類腳本
腳本broadcast-ping.NSE
審計目的:發現本地網絡中的活躍主機
審計方法:這個腳本向整個本地網絡中全部IP地址發送廣播包,以本身所在網絡爲目標
審計命令:
nmap --script broadcast-ping
審計結果:
腳本 targets-sniffer
審計目的:發現本地網絡中的活躍主機
審計方法:這個腳本會對你的本地網絡進行嗅探,而後發現網絡中的全部主機,以本身所在網絡爲目標
審計命令:
nmap -sL --script=target-sniffer -e xxx
審計結果:
可使用-e監聽網卡設備
網絡上提供的服務通常都具備必定的認證措施,目前應用最爲普遍的認證措施仍是用戶名和密碼。這種認證措施的優點在於簡單易行,而缺點在於不少用戶意識不到密碼強度的重要性,通常會選擇一些比較簡單容易記住的密碼,而這些密碼很容易被猜出來,所以網絡的管理者須要一個有效的工具來對本身網絡中各類服務的密碼強度進行審計。
腳本mysql-brute.NSE
審計目的:發現網絡中弱口令的MySQL數據庫
審計方法:腳本mysql-brute.NSE的審計方法很簡單,在Nmap中有兩個數據文件,是一些常見的用戶名和密碼,這個腳本將這兩個文件進行組合而後嘗試登錄。
審計命令:
nmap -p 3306 -packet-trace --script mysql-brute 192.168.126.141
這裏是沒有破解出密碼,破解的成功率取決於字典的大小哈,本身感興趣的能夠試試,github上也有爆破字典可使用的。
2.腳本smtp-brute.NSE
smtp-brute.NSE腳本用來檢測目標郵件服務器SMTP服務的密碼是否合規。
審計目的:郵件服務器中常常會存儲一些很是重要的信息,而對用戶進行認證的方式就是用戶和密碼,這裏存在一些簡單的帳戶名和密碼,他們很容易成爲被GJ的對象,所以須要先對服務器進行弱口令檢查。.
審計方法:對密碼審計的方法採用窮解的方式。這個腳本能夠對SMTP密碼的窮解,它支持LOGIN、PLAIN、CRAM-MD五、DIGEST-MD五、NTLM四種登陸方式。默認狀況下,smtp-brute.NSE會使用/NSElib/data/username.lst文件中的內容做爲用戶名,/NSElib/data/passwords.lst 文件中的內容做爲密碼。
審計命令:
nmap -p 25 --script smtp-brute 192.168.0.1
審計結果:我這裏沒有搭建smtp就不作演示了,有條件的能夠本身試試
NSE腳本擴充漏洞掃描的功能,利用這些腳本,就可使用Nmap對目標進行掃描。
1.腳本 http-slowloris.NSE
slowloris是一種GJ方法,原理是以極低的速度向服務器發送http請求。因爲web server對於併發的鏈接數都有一個上限值,若是惡意鏈接不釋放,那麼web server的全部鏈接都會被惡意鏈接佔用,致使拒絕服務。
審計方法:使用http-slowloris腳本,向目標發送鏈接,並保持這個鏈接,構造了一個畸形的http請求,是一個不完整的http請求。 審計命令:
nmap -p 80 --script http-slowloris --max-parallelism 300 www.xxx.com
審計結果:這裏不作實驗,不要隨意對網站進行測試
審計拓展:咱們能夠經過調整http-slowloris.send_interval參數來改變掃描的過程。這個參數能夠指定發送http header datas的間隔,默認爲100,咱們來修改一下
nmap -p 80 --script http-slowloris --script-args http-slowloris.send_interval=200 --max-parallelism 300
http-slowloris.timeklimit參數指定Dos持續運行時間,默認爲30分鐘,咱們修改成10分鐘
nmap -p 80 --script http-slowloris --script-args http-slowloris.timelimit=10m www.***.com
http-slowloris.runforever參數對指定目標一直髮動DoSGJ。默認值爲false
nmap -p 80 --script http-slowloris --script-args http-slowloris.runforever www.***.com
Nmap中還有一個http-slowloris-check.NSE的腳本,這個腳本不會發起DoS GJ,而是檢測目標是否具有抵抗DOS GJ的能力。
nmap -p 80 --script http-slowloris-check www.***.com