目錄
前言
在主動式資料搜集之DNS枚舉與Port掃描章節我們提到了Nmap這款port掃描工具,以及它強大的客製化Nmap腳本引擎(Nmap Scripting Engine, NSE),有時候在時間的限制下我們不適合使用Nessus這款商業化強大但耗時的工具,這時一些輕量級的漏洞掃描工具就是很好的選擇
NSE漏洞腳本
作為替代Nessus強大的插件,我們可以使用NSE來施行自動化的弱點掃描,利用NSE的腳本我們可以將Nmap從基本的網路探索功能,強化成數種網路偵察工具,例如將偵測漏洞的任務、暴力破解的任務以及基本款網路探索的功能結合在一起,甚至已經有人寫好偵測系統版本或資訊搜集能力的腳本供Nmap使用
NSE腳本可以組合超過一種任務分類,舉例來說可以分類成安全型跟漏洞行,或者侵入型跟漏洞型腳本,只要沒有影響到目標系統穩定性都視為安全的標準,因為侵入型的行為可能會破壞目標服務或系統,為了避免目標變得不穩定
讀者應該要非常清楚腳本的種類,以及執行該NSE腳本後會有何效果,在不清楚的狀況之前不要輕舉妄動,讀者可以查看NSE官方文件或者下載下來的NSE腳本內容來進行檢查
我們的實驗專注於漏洞型分類來讓Nmap可以檢測弱點資訊,在Kali Linux機器當中,NSE腳本存放在”/usr/share/nmap/scripts/”目錄底下,只要檔案格式是”.nse”的都可以點進去看腳本行為,另外還有一個”script.db”檔案用來儲存當前所有可用的NSE腳本,我們可以用這個資料庫檔來看屬於漏洞分類的腳本
kali@kali:~$ cd /usr/share/nmap/scripts/
kali@kali:/usr/share/nmap/scripts$ cat script.db | grep "\"vuln\""
Entry { filename = "afp-path-vuln.nse", categories = { "exploit", "intrusive", "vuln", } }
Entry { filename = "broadcast-avahi-dos.nse", categories = { "broadcast", "dos", "intrusive", "vuln", } }
Entry { filename = "clamav-exec.nse", categories = { "exploit", "vuln", } }
Entry { filename = "distcc-cve2004-2687.nse", categories = { "exploit", "intrusive", "vuln", } }
Entry { filename = "dns-update.nse", categories = { "intrusive", "vuln", } }
...
每一個搜尋到的項目都會顯示檔案名稱跟類型,讀者可以在這目錄底下找到該NSE腳本,儘管有些腳本針對的版本資訊有點過時,但很幸運漏洞類型的腳本都有適時地在進行更新,透過官方的Vulners Vulnerability Database蒐錄最新的漏洞,不同的腳本分類成”safe”、”vuln”以及”external”
那麼Nmap該透過何種參數選擇這些腳本呢?參數的組成可以選擇類別、布林函數表示、用逗號分隔不同的類別、用script.db裡面顯示的代號搭配萬用字元組合或者腳本的絕對路徑來指定,我們試著使用漏洞類別來進行掃描,之前提到使用”–script”可以指定腳本,而我們選擇”vuln”類別,另外搭配”-sV”來偵測服務資訊,最後用”-p”來指定掃描443
kali@kali:~$ sudo nmap -sV -p 443 --script "vuln" 192.168.50.124
[sudo] password for kali:
Starting Nmap 7.95 ( https://nmap.org )
...
PORT STATE SERVICE VERSION
443/tcp open http Apache httpd 2.4.49 ((Unix))
...
| vulners:
| cpe:/a:apache:http_server:2.4.49:
...
https://vulners.com/githubexploit/DF57E8F1-FE21-5EB9-8FC7-5F2EA267B09D *EXPLOIT*
| CVE-2021-41773 4.3 https://vulners.com/cve/CVE-2021-41773
...
|_http-server-header: Apache/2.4.49 (Unix)
MAC Address: 00:0C:29:C7:81:EA (VMware)
用這個類別我們偵測到目標機器上架設Apache服務2.4.49版本,以及使用所有漏洞分類裡的NSE腳本進行測試,如果有match到的就會顯示出偵測到的資訊以及相關的漏洞資料
這些漏洞腳本不只顯示關於CVE編號的資訊,同時也顯示CVSS分數以及一些補充資料,例如我們的實驗顯示漏洞腳本偵測到CVE-2021-41773的漏洞出現在目標的Apache機器上,另一項漏洞腳本有用的功能是針對CVE提供Proof of Concepts (PoC),其標記為可利用”EXPLOIT”,反之如果沒有match到任何漏洞,就不會顯示任何資訊出來
利用NSE腳本
在上一節我們了解了NSE的漏洞分類及腳本形式,但如果直接指定”vuln”這個分類就會從資料庫中一一比對,而有時我們只需要找到特定的CVE就好,當我們只想驗證某個漏洞是存在的,直接找特定的分類會顯示出一堆資料,而對於近代的漏洞,我們需要組合多個腳本來縮小範圍
舉例來說我們要針對CVE-2021-41773這個漏洞,為了找到適合的腳本,我們可以先在搜尋引擎裡找CVE編號加上NSE來進行搜尋

搜尋到Github有提供的,https://github.com/RootUp/PersonalStuff/blob/master/http-vuln-cve-2021-41773.nse,我們就可以下載這個腳本,一樣儲存在”usr/share/nmap/scripts/”目錄底下,以及我們要更新script.db之後才能用nmap來呼叫這個腳本,利用”–script-updatedb”參數來更新
要注意腳本名字一定要跟scripts目錄底下其他的檔案命名規則一樣,否則database不會接受
kali@kali:~$ sudo cp /home/kali/Downloads/http-vuln-cve-2021-41773.nse /usr/share/nmap/scripts/http-vuln-cve2021-41773.nse
kali@kali:~$ sudo nmap --script-updatedb
[sudo] password for kali:
Starting Nmap 7.95 ( https://nmap.org )
NSE: Updating rule database.
NSE: Script Database updated successfully.
Nmap done: 0 IP addresses (0 hosts up) scanned in 0.23 seconds
於是這一次,我們就可以將參數的腳本從類別中改為方才下載的NSE檔,針對目標機器以及port針對這個CVE進行偵測
kali@kali:~$ sudo nmap -sV -p 443 --script "http-vuln-cve2021-41773" 192.168.50.124
Starting Nmap 7.95 ( https://nmap.org )
Host is up (0.00069s latency).
PORT STATE SERVICE VERSION
443/tcp open http Apache httpd 2.4.49 ((Unix))
| http-vuln-cve2021-41773:
| VULNERABLE:
| Path traversal and file disclosure vulnerability in Apache HTTP Server 2.4.49
| State: VULNERABLE
| A flaw was found in a change made to path normalization in Apache HTTP Server 2.4.49. An attacker could use a path traversal attack to map URLs to files outside the expected document root. If files outside of the document root are not protected by "require all denied" these requests can succeed. Additionally this flaw could leak the source of interpreted files like CGI scripts. This issue is known to be exploited in the wild. This issue only affects Apache 2.4.49 and not earlier versions.
|
| Disclosure date: 2021-10-05
| Check results:
|
| Verify arbitrary file read: https://192.168.50.124:443/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd
...
Nmap done: 1 IP address (1 host up) scanned in 6.86 seconds
實驗結果可以看到我們的目標確實match到了CVE-2021-41773漏洞,還提供給了我們一些額外的背景資訊,儘管Nmap最一開始並非設計來弱點掃描的,但有了NSE腳本的擴充性讓這個工具搖身成為一個輕量化的漏洞掃描工具,在滲透測試時如果手邊沒有強大的弱點掃描工具,我們可以使用Nmap來替代,或者我們想要AB比較驗證結果時也可以考慮Nmap
然而我們也必須考量弱點掃描工具常見的問題,NSE腳本提供了很有用的資訊,可以使用侵入性或安全性等分類,但同時也要留心如果是採用其他人的NSE腳本,裡面也許會包含惡意的code,而反被別人入侵進來,所以我們需要時時刻刻注意NSE腳本除了可正常使用之外,也必須是安全的,這跟MCP的問題差不多一樣
弱點掃描在安全性評估上非常有用,設定正確的工具能為我們搜集到有用的資料,不過在取得資訊之後還得靠人工二次檢查才能確保資訊是有效的,不過讀者也要銘記在心,漏洞掃描工具的操作會對目標系統或服務造成影響,所以在使用時必須得先知道後果以及完全規劃再進行掃描
One Comment