端口掃描這個詞,大家並不陌生,無論是在邊界資產探測,還是在內網服務掃描,都離不開端口掃描這個技術,當然,不可能手工來做,必須依賴工具進行,那麼有哪些端口掃描工具可以用呢?它們又有那些特點呢?
一個優秀的端口掃描工具,最核心功能就是可以百分之百將開放的端口識別出來,無論是通過 TCP SYN 掃描還是通過全連接掃描。接下來就總結一下有哪些開源工具可可用。
0x01 業界冠軍:Nmap
nmap 是最古老的端口掃描工具,也是如今使用最多最為廣泛的工具,無論是安全從業者還是運維、研發人員,都知道它並且在實際的工作中使用它來驗證遠程服務是否正常,端口是否開放等。
經歷了多年的發展,它不僅僅驗證端口是否開放,而且還可以根據不同的端口發送特定 payload 來抓取端口返回信息,從而識別端口指紋,判斷其運行的服務類型,除此之外還集成了腳本引擎,可以做一些漏洞探測的工作,直接實現從端口掃描到漏洞檢測的完整流程。
nmap 官方網站:
https://nmap.org/
0x02 業界新秀:masscan
masscan 是以互聯網全端口掃描而誕生,掃描速度極快,它的核心思想是異步掃描,與 Nmap 的同步掃描相反,異步掃描可以同時發送和處理多個網絡連接。
理論上一次最多可以處理 1000 萬個數據包,限制在於 TCP/IP 的堆棧處理能力,以及運行掃描工作的主機系統能力。
其優點是掃描速度快以及獨特的探針隨機化功能,其缺點是只能掃描 IP 或者 IP 段,無法指定域名目標。
項目地址:
https://github.com/robertdavidgraham/masscan
0x03 Naabu
Naabu 是一款比較新的掃描器,是由一家開源軟件公司開發,其專注於 web 應用程序安全和漏洞狩獵。Naabu 是用 GO 語言編寫,畢竟 Go 工具往往擁有運行速度快和出色的穩定性。
該工具的特點是其設計考慮到了功能,他的目標在於與 Project Discovery 庫中的其他工具以及 Nmap 等常用工具結合使用,所以輸出的結果非常靈活。
除此之外,它還可以通過端口掃描自動將 IP 的重複數據刪除來減少掃描資源的浪費,這對於 web 滲透來說是非常有用的,而且還集成了 nmap 的端口服務指紋識別能力。
項目地址:
https://github.com/projectdiscovery/naabu
0x04 Rustscan
Rustscan 被稱為現代端口掃描器,使用 Rust 語言編寫,速度極快,能夠在三秒內將一個 IP 的全端口(65535)掃描完成。
雖然只是簡單的 SYN 和 Connect 掃描,但是它擁有完整的腳本引擎支持結果導出到 nmap 來進行詳細的掃描。其還有個特點是在不改變參數的情況下,可以根據系統的性能來自動調整掃描速度,從而達到一個最佳掃描狀態。
其掃描原理是通過對內部線程的管理,為了實現異步掃描的功能,在掃描過程中,每個端口掃描創建一個線程,每次可以創建數千個線程,而線程的多少取決於系統允許打開的最大文件數。
項目地址:
https://github.com/RustScan/RustScan
0x05 其他小工具
1、Scanrand ,最早的異步掃描工具之一,其開發了兩個獨立的進程,一個用於發送探測包,一個用於接受探測包,不幸的是這個工具很久沒有更新了。
2、Knocker,寫於 2002 年,通過引入多線程處理的端口掃描器,同樣是很長時間不更新
https://github.com/gabgio/knocker
3、PNScan,與 Knocker 類似,它的特點是可以根據系統性能動態調整線程的數量來獲得最佳掃描狀態
https://github.com/ptrrkssn/pnscan
4、Unicornscan,相對較新的端口掃描器,理論上,通過將端口掃描相關的網絡連接處理從內核轉移到用戶分配的處理資源,從而獲得更好的性能,其擁有可以 Nmap 相媲美的功能,但是該工具已不再維護。
0x06 特殊場景的掃描器
1、Zmap,專門為了全網端口掃描而設計的工具,Zmap 工具本身可用於短時間內對大量網絡地址進行特定端口的掃描,而且可以與 Zgrab2 結合使用,後者可以獲取端口的指紋信息,缺點是只能針對單端口,而不像其他工具那些對多個端口。
https://github.com/zmap/zmap
2、AngryIP Scanner,該工具一審計為重點,無需安裝就可以使用,因為有大量黑客使用,從而導致它出現在大量設備的黑名單中,它也是少數具有 GUI 界面的端口掃描工具,能夠輸出優質的掃描報告。
https://angryip.org/
3、Scantron,集成 nmap 和 masscan 的分布式掃描器,利用 SSH 隧道來實現分布式控制掃描節點
https://github.com/opsdisk/scantron
4、Scanless,一個命令行工具,調用第三方端口掃描服務的 API 來實現間接端口掃描
https://github.com/vesche/scanless
5、Unimap,針對大量子域進行端口掃描時,有非常多的域名指向相同的 IP,那麼就會出現重複掃描的情況,使用這個工具可以先通過解析獲取 IP,去重之後再發送給 Nmap 進行掃描,從而提高掃描的速度。
https://github.com/Edu4rdSHL/unimap
6、Advanced Port Scanner,windows 下的一款 GUI 版端口掃描器
https://www.advanced-port-scanner.com/
0x07 總結
其實做端口掃描,使用 nmap 可以解決大部分場景的工作,而其他的一些工具會有一些特殊場景使用,比如單個目標,使用 nmap 用不了多久就可以掃描完成,而如果你要掃描的是幾千,幾萬甚至百萬級目標,還能只使用 nmap 嗎,一定是要先使用類似 zmap、masscan 等快速掃描工具,確定端口開放,然後再使用 namp 做進一步的驗證以及指紋識別,從而提升掃描速度。
以上不是所有端口掃描工具的合集,還有非常多其他優秀的掃描工具,比如 goby 等,還有一些自定的腳本,當然自己也可以編寫屬於自己的腳本和工具,集成到自己的自動化系統中。更多有意思的功能,還需大家在使用的時候進行挖掘。
參考網站:
https://s0cm0nkey.gitbook.io/port-scanner-shootout/port-scanner-shootout-part-2-the-contenders