banner
肥皂的小屋

肥皂的小屋

github
steam
bilibili
douban
tg_channel

信息收集-端口掃描及服務識別

端口掃描及服務識別#

這部分重點介紹nmap常見參數搭配用法,這也是我一直想弄懂的,借寫文章的機會來梳理一下

這篇文章先介紹在已知主機的情況下對主機進行端口掃描,最後補充下前面文章遺留的問題:

nmap zmap massca對 C 段進行掃描

御劍高速 TCP 全端口掃描工具#

屬於純端口掃描工具

工具主要針對一段 IP 段內的詳細全端口檢測,下載地址就不提供了很好搜,用軟件掃一下我網站的真實 ip 看下結果:

image

還是有一些端口掃描不到,不過速度還是非常快的

censys.io#

這是一個在線伺服器掃描網站,能掃描網站的伺服器信息,暫且把它歸為端口掃描工具:

image

掃描速度還是很快的,而且識別出了我用的是騰訊雲的 CDN,掃描出了伺服器的真實 ip 以及三個端口 (雖然還是沒掃全),值得推薦!

nmap#

如果是自己去網上找 nmap 用法,由於每個師傅的用法不同以及 nmap 版本更新中的參數作用變化等原因

你可能會在不同的師傅那看到某個參數不同的解釋和用法 (踩坑的人對自己踩過的坑總是顯得尤為在意)

所以,直接查看官方文檔:https://nmap.org/book/man.html

雖然官方中文文檔也有,但是它是根據Nmap4.5.0版本來介紹的,而截至寫文章時Nmap的版本是7.70

故要看最新的用法還是用谷歌瀏覽器翻譯英文文檔看好了

nmap 安裝及配置#

Linux比如Kali中是自帶的,就不說了,我們這裡下載的是Window下的便捷版:

image

下載完我們先配置一下環境變量,就不用每次進到nmap的目錄打開命令行了:

image

nmap 參數解釋#

nmap有六種常用的端口狀態:

Open 表示目標計算機上的應用程序正在侦听该端口上的连接/数据包。
Closed 端口没有应用程序监听它们。
Filtered 意味着防火墙,过滤器,或其他网络障碍物阻塞的端口,使得Nmap不能确定是open或closed。
unfiltered 当端口响应Nmap的探测器时,Nmap无法确定它们是打开还是关闭。
open|filtered、closed|filtered nmap不能确定端口处于这两种状态中的哪种状态

以下為官方文檔翻譯過來的參數,我將一部分一部分做講解

參考文章:

選擇目標:

可以傳遞主機名,IP地址,網絡等。
例如:scanme.nmap.org,microsoft.com / 24,192.168.0.1; 10.0.0-255.1-254
-iL <inputfilename>:從主機/網絡列表輸入
-iR <num hosts>:選擇隨機目標
--exclude <host1 [,host2] [,host3],...>:排除主機/網絡
--excludefile <exclude_file>:從文件中排除列表

這個就很簡單了:

  • 掃描網站:nmap soapffz.com
  • 掃描內網網段:nmap 192.168.2.0/24或者nmap 192.168.2.3-5

選擇目標這裡的參數基本都用不到

主機發現:

-sL 列表掃描,仅将指定的目标IP列举出来,不进行主机发现
-sn 和 -sP一样,只利用ping扫描进行主机发现,不扫描目标主机的端口
-Pn 将所有指定的主机视为已开启状态,跳过主机发现过程
-PS TCP SYN ping,发送一个设置了SYN标志位的空TCP报文,默认端口为80,也可指定端口
-PA TCP ACK ping,发送一个设置了ACK标志位的空TCP报文,默认端口为80,也可指定端口
-PU UDP ping,发送一个空的UDP报文到指定端口,可穿透只过滤TCP的防火墙
-PR 使用ARP ping
-n/-R -n不用域名解析,加速扫描,-R为目标IP做反向域名解析,扫描较慢一些
-dns-servers 自定义域名解析服务器地址
--system-dns:使用OS的DNS解析器
-traceroute 目标主机路由追踪

-sn-Pn是對立的,前者使用ping掃描,禁用端口掃描,後者禁用ping掃描,為什麼會有這兩個選項呢?

因為如果主機屏蔽了 ping 請求,Nmap 可能會認為該主機沒有開機。這將使得 Nmap 無法進行進一步檢測,比如端口掃描、服務版本識別和操作系統識別等探測工作。為了克服這一問題,就需要禁用 Nmap 的主機檢測功能。在指定這個選項之後,Nmap 會認為目標主機已經開機並會進行全套的檢測工作,所以,一般來說在這兩個選項之前我們更傾向於使用後者

一般建議使用-Pn選項

另外域名解析會浪費一部分時間,雖然默認是有時會解析域名,但是我建議設置為-n從不進行DNS解析以節約解析時間。

掃描方法:

-sS / sT / sA / sW / sM:TCP SYN / Connect()/ ACK / Window / Maimon掃描

-sS TCP 同步掃描 (TCP SYN),因為不必全部打開一個 TCP 連接,所以這項技術通常稱為半開掃描 (half-open)。這項技術最大的好處是,很少有系統能夠把這記入系統日誌。不過,你需要 root 權限來定制 SYN 數據包(Windows即為管理員權限)。
-sT TCP connect() 掃描,建立TCP的三次握手連接來進行信息的傳遞。這種掃描很容易被檢測到,在目標主機的日誌中會記錄大批的連接請求以及錯誤信息。一般不建議使用。
-sA ACK 掃描,原理是發送一個ACK包給目標主機,不論目標主機的端口是否開啟,都会返回相应的RST包,通过判断RST包中的TTL来判断端口是否开启,TTL值小于64端口开启,大于64端口关闭。這項高級的掃描方法通常可以用來穿過防火牆。
-sW 滑動窗口掃描,非常類似於 ACK 的掃描。
-sM 探測報文是 FIN/ACK。 根據 RFC 793 (TCP) ,無論端口開放或者關閉,都應該對這樣的探測響應 RST 報文。 然而,Uriel 注意到如果端口開放,許多基於 BSD 的系統只是丟棄該探測報文。

-sU:UDP掃描,唯一的UDP掃描方式。

雖然UDP掃描結果沒有 TCP掃描結果的可靠度高,但滲透測試人員不能因此而輕視UDP掃描,畢竟UDP端口代表著可能會有價值的服務端程序。但是UDP掃描的最大問題是性能問題。由於Linux內核限制1秒內最多發送一次ICMP Port Unreachable信息。按照這個速度,對一台主機的65536個UDP端口進行完整掃描,總耗時必定會超過18個小時。
優化方法主要是:
1.進行並發的UDP掃描;
2.優先掃描常用端口;
3.在防火牆後面掃描;
4.啟用--host-timeout選項以跳過響應過慢的主機。
假如我們需要找到目標主機開放了哪些 UDP端口。為提高掃描速度,我們僅掃描53端口(DNS)和161端口(SNMP)。
可以使用命令nmap -sU 192.168.56.103 -p 53,161

-sN / sF / sX:TCP Null,FIN和Xmas掃描

NULL 掃描不設置任何控制位; FIN掃描僅設置FIN標誌位:XMAS掃描設置FIN、PSH和URG的標識位。如果目標主機返回了含有RST標識位的響應數據,則說明該端口處於關閉狀態;如果目標主機沒有任何回應,則該端口處於打開|過濾狀態。

NULL掃描是一種反向的掃描方法,通過發送一個沒有任何標誌位的數據包給伺服器,然後等待伺服器的返回內容。這種掃描的方法比前面提及的掃描方法要隱蔽很多,但是這種方法的準確度也是較低的, 主要的用途是用來判斷操作系統是否為windows,因為windows不遵守RFC 793標準,不論端口是開啟還是關閉的都返回RST包

但是雖然NULL具有這樣的一些用處,但是NULL也有如下缺點
1、NULL方法的精確度不高,端口的狀態返回的不是很準確
2、要獲取目標主機的運行系統,可以使用參數(-O),來獲取對於一些操作系統無法準確判斷的,可以加上參數(-osscan-guess)
3、NULL掃描易被過濾

--scanflags <flags>:自定義TCP掃描標誌
-sI <zombie host [:probeport]>:空閒掃描

採用-sI選項後,將通過指定的僵尸主機發送掃描數據包。本機並不與目標主機直接通信。如果對方網絡裡有IDS,IDS將認為發起掃描的主機是僵尸主機。

-sY / sZ:SCTP INIT / COOKIE-ECHO掃描

SCTP INIT 掃描類似 TCP SYN 掃描,他也是打開一個半開的連接,而不是建立一個完整的 SCTP 關聯。如果目標端口回覆一個 INIT-ACK 數據包,則說明端口是開放的,如果回覆一個 ABORT 數據包,端口是關閉的,如果沒有回覆,端口會被標記標記為被過濾,當然如果收到了 ICMP 不可達的消息( type 3, code 0, 1, 2, 3, 9, 10, or 13 )也會被標記為被過濾。
如果目標端口開放,則會丟棄之前沒有發起關聯請求的 SCTP COOKIE ECHO 數據包,如果端口是關閉的則會返回一個 SCTP ABORT 數據包。所以這個掃描技術,無法分辨過濾和開放,只能分辨出關閉的端口。

-sO:IP協議掃描
-b <FTP中繼主機>:FTP反彈掃描

從參數解釋中我們可以看出-sT選項是默認的也是最不推薦的,一般我們使用半開掃描-sS

當發現可能有防火牆時,我們可以使用-sA-sW選項來嘗試繞過防火牆掃描。

另外,我們也可以使用-sUUDP 掃描方式來探測常見的 UDP 端口,可能會有意外收穫。

掃描端口及掃描端口的方式:

-p <端口範圍>:僅掃描指定的端口
例如:-p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
--exclude-ports <端口範圍>:從掃描中排除指定的端口
-F:快速模式 - 掃描比默認掃描更少的端口,一般來說只掃描100個常用端口
-r:連續掃描端口,從小到大掃描端口
--top-ports <number>:掃描<number>最常見的端口,比如掃描最常見的300個端口:--top-ports 300
--port-ratio <ratio>:掃描端口比<ratio>更常見

個人建議,在快速概覽主機端口的時候使用選項--top-ports 1000

當你想要完整的掃描報告的時候,還是需要所有端口都掃一遍-p1-65535

服務 / 版本檢測:

-sV:探測開放端口以確定服務/版本信息

由於不是所有的 Nmap 侦测都会得到反馈,需要对侦测的强度进行设定,在服务侦测中有三个等级。
等级越高,侦测过程中的尝试次数越多,识别服务的可能性就会越大。

--version-intensity <level>:从0(亮)到9(尝试所有探针)设置
--version-light:限制最可能的探针(强度2)
--version-all:尝试每一个探针(强度9)

--version-trace:显示详细的版本扫描活动(用于调试)

-sV建議使用,但是後面的-A 選項的功能中包含這個功能

腳本掃描:

-sC:相當於--script = default
--script = <Lua scripts>:<Lua scripts>是逗號分隔的列表
目錄,腳本文件或腳本類別
--script-args = <n1 = v1,[n2 = v2,...]>:為腳本提供參數
--script-args-file = filename:在文件中提供NSE腳本args
--script-trace:顯示發送和接收的所有數據
--script-updatedb:更新腳本數據庫。
--script-help = <Lua scripts>:顯示有關腳本的幫助。
<Lua scripts>是以逗號分隔的腳本文件列表或腳本的類別。

-sC建議使用,但是後面的-A 選項的功能中包含這個功能

操作系統檢測:

-O:啟用OS檢測
--osscan-limit:將OS檢測限制為有希望的目標
--osscan-guess:更積極地猜測操作系統

這裡的--osscan-guess可能會在你想知道對方的主機系統時派上用場。

時間和性能:

採用<time>的選項以秒為單位,或追加'ms'(毫秒),
該值的's'(秒),'m'(分鐘)或'h'(小時)(例如30m)。
-T <0-5>:設置時序模板(越高越快)

paranoid(0):掃描周期為5分鐘,且不會以並行方式同時發送多組數據。這種模式 的掃描不會被IDS檢測到。
sneaky(1):掃描周期為15秒,且不會以並行方式同時發送多組數據。
polite(2):掃描周期為0.4秒,且不會以並行方式同時發送多組數據。
normal(3):此模式同時向多個目標發送多個數據包,为	Nmap默認的模式,该模式能自動在掃描時間和網絡負載之間進行平衡。
aggressive(4):在這種模式下,Nmap對每個既定的主機只掃描5分鐘,然後掃描下一台主機。它等待響應的時間不超過1.25秒。
insane(5):在這種模式下,Nmap對每個既定的主機僅掃描75秒,然後掃描下一台主機。它等待響應的時間不超過0.3秒。
快的掃描也是有缺點的,掃描的周期過快,會很容易被防火牆和IDS發現並記錄
因為防火牆大多數會將端口周期過段識別為掃描從而屏蔽掉

--min-hostgroup / max-hostgroup <size>:並行主機掃描組大小
--min-parallelism / max-parallelism <numprobes>:探測並行化
--min-rtt-timeout / max-rtt-timeout / initial-rtt-timeout <time>:指定探測往返時間。
--max-retries <tries>:端口掃描探測重傳的上限數量。
--host-timeout <time>:在此之後放棄目標
--scan-delay /  -  max-scan-delay <time>:調整探針之間的延遲
--min-rate <number>:發送數據包的速度不低於每秒<number>
--max-rate <number>:發送數據包的速度不超過<number>每秒

時間和性能這裡,一般用不到指定並行數量和發包速度這麼詳細。

時序模板默認為-T3,也就是normal不做任何優化

防火牆 / IDS 逃脫和防禦:

-f; --mtu <val>:分段數據包(可選擇w /給定MTU),這個選項可避免對方識別出我們探測的數據包。

指定這個選項之後, Nmap將使用8字節甚至更小數據體的數據包。

-D <decoy1,decoy2 [,ME],...>:用誘餌披露掃描,這個選項應指定假IP,即誘餌的IP。

啟用這個選項之後,Nmap在發送侦测数据包的時候會掺杂一些源地址是假IP(誘餌)的數據包。這種功能意在以藏木於林的方法掩蓋本機的真實IP。也就是說,對方的log還會記錄下本機的真實IP。您可使用RND生成隨機的假IP地址,或者用RND:number的參數生成<number>個假IP地址。您所指定的誘餌主機應當在線,否則很容易擊溃目標主機。另外,使用了過多的誘餌可能造成網絡擁堵。尤其是在掃描客戶的網絡的時候,您應當極力避免上述情況。

-S <IP_Address>:欺騙源地址

源地址欺騙的原理是:通過將自己的IP伪装成为其他的IP去掃描目標主機從而騙過目標主機的追蹤
假設要伪装成为1.1.1.1:參數-S 1.1.1.1 使用1.1.1.1進行掃描,讓防火牆誤以為是來自1.1.1.1的掃描行為
在使用的時候要注意與-e進行使用,因為除了制定要伪装成为的對象IP外,還要指定返回的IP地址

-e <iface>:使用指定的接口
-g /  -  source-port <portnum>:使用給定的端口號
--proxies <url1,[url2],...>:通過HTTP / SOCKS4代理的中繼連接
--data <hex string>:為發送的數據包附加自定義有效負載
--data-string <string>:為發送的數據包附加自定義ASCII字符串
--data-length <num>:將隨機數據附加到已發送的數據包
--ip-options <options>:發送帶有指定ip選項的數據包
--ttl <val>:設置IP生存時間字段
--spoof-mac <mac address / prefix / vendor name>:欺騙你的MAC地址
--badsum:使用伪TCP / UDP / SCTP校驗和發送數據包

當你已經探測到可能有防火牆時,可以使用-F選項來減小探測包的大小,從而繞過防火牆。

-D選項構造虛假 ip 也是經常被用到的,RND生成隨機假的IP地址這個選項不建議使用,因為如果生成的 ip 對應的誘餌主機是關閉的或者不存在的,那麼就不可能發送掃描的命令給目標主機,容易造成目標主機崩潰

建議直接使用ping某個網站的 ip (禁止ping的網站除外),使用網站的ip作為誘餌主機

使用Me代表自己的真實地址,比如同時使用soapffz.com網站ip和我電腦真實ip一起快速掃描nmap.org

nmap -F -D 140.143.2.176,ME nmap.org

輸出報告:

-oN / -oX / -oS / -oG <file>:正常輸出掃描,XML,s | <rIpt kIddi3,和Grepable格式,分別為給定的文件名。
-oA <basename>:一次輸出三種主要格式

-oN:正常輸出,不顯示runtime信息和警告信息。
-oX:生成的XML格式文件可以轉換成HTML格式文件,還可被Nmap的圖形用戶界面解析,也便於導入數據庫。
所以建議將結果都保存為XML文件。
-oS:輸出類似於交互工具輸出
-oG:生成便於Grep使用的文件,雖然這種文件格式已經過時,但仍然很受歡迎。這種格式的文件,其內容由註釋(由#開始)和信息行組成。信息行包含6個字段,每個字段的字段名稱和字段值以冒號分割,字段之間使用制表符隔開。這些字段的名稱分別為Host、Ports、Protocols、Ignored State、OS、Seq Index、IP ID Seq 和Status。這種格式的文件便於grep或awk之類的UNIX指令整理掃描結果。
為使用方便,利用-oA選項可將掃描結果以標準格式、XML格式和Grep格式一次性輸出。分別存放在.nmap,.xml和.gnmap文件中。

-v:增加詳細級別(使用-vv或更高級別以獲得更好的效果)
-d:提高調試級別(使用-dd或更多以獲得更好的效果)
--reason:顯示端口處於特定狀態的原因
--open:僅顯示打開(或可能打開)的端口,這個很推薦使用。
--packet-trace:顯示發送和接收的所有數據包
--iflist:打印主機接口和路由(用於調試)
--append-output:附加到而不是clobber指定的輸出文件
--resume <filename>:恢復中止掃描
--stylesheet <path / URL>:用於將XML輸出轉換為HTML的XSL樣式表
--webxml:來自Nmap.Org的參考樣式表,用於更多可移植的XML
--no-stylesheet:防止與XML輸出相關聯的XSL樣式表

建議使用-open -vv選項來輸出詳細信息並且只包含打開或可能打開的端口

報告輸出建議使用-oX生成.XML的報告,或者直接-oA選項一次輸出.nmap .xml .gnmap三種報告

雜項:

-6:啟用IPv6掃描
-A:啟用操作系統檢測,版本檢測,腳本掃描和跟蹤路由
--datadir <dirname>:指定自定義Nmap數據文件位置
--send-eth /  -  send-ip:使用原始以太網幀或IP數據包發送
--privileged:假設用戶具有完全特權
--unprivileged:假設用戶缺少原始套接字權限
-V:打印版本號
-h:打印此幫助摘要頁面。

當你使用-A選項時,相當於同時使用了以下四個命令:

服務版本識別(-sV)
操作系統識別(-O);
腳本掃描(-sC);
Traceroute(–traceroute)。

至於NSE腳本的漏洞探測腳本部分本篇不做介紹,因為本篇是針對端口和服務的掃描,漏洞的掃描將在下篇漏洞掃描器中講到。

nmap 常用掃描#

** 在 nmap 運行的時候,如果我們可以像其他編程一樣打 “斷點”,直接按鍵盤的 d 鍵就行了,如果想知道運行的進度可以按下 X 鍵 **

我們用上面所學到的參數來掃描以下我的網站 (假設已繞過 CDN 獲得了真實 ip,因為掃描 CDN 節點沒有意義)

最終期望的結果是:

通過一條命令獲得所有開放的端口,猜測端口上開啟的服務,猜測伺服器版本信息並盡可能地節省時間

是的,我打我自己.jpg

先嘗試下默認的-sT掃描方式,快速掃描 100 個常見端口並打印詳細信息:

nmap -sT -F -vv 140.143.2.176

image

1. 從結果中可以看到使用了ping消耗了 1.05s,DNS查詢消耗了 3.86s 2. 我是直接掃描ip的你要查詢DNS幹啥,掃描的方式是完整的一次TCP三次握手

接下來嘗試下禁ping,使用TCP同步掃描,也就是半開掃描,使用更快的掃描速度,嘗試獲取每個端口的服務及版本信息,掃描常見 1000 個端口,禁止使用DNS查詢:

nmap -vv -Pn -sS -T4 -sV --top-ports 1000 -n 140.143.2.176

image

1. 可以看到掃描的方式變為了SYN Stealth Scan即 SYN 秘密掃描 2. 在增加了掃描的端口數量後,我們比上一次多掃出了一個888端口 3. 另外加了-sV選項之後掃描報告中多了一列VERSION,也就是服務的版本

耗費的時間只增加了一點點,但是掃描的結果比上一次更加全面了

我們在剛才的基礎上使用-sAACK 掃描方式,使用更快速的方式,掃描所有端口,並且盡可能地探測操作系統:

nmap -vv -Pn -sA -T5 -sV -p1-65535 -O --osscan-guess -n 140.143.2.176

image

可以看到在相同情況下-sA選項比-sS更耗費時間

所以一般只有在對方存在防火牆想要繞過時才建議使用-sA選項,平時使用-sS足夠

sA/sW/sM這三種探測方式消耗的時間排序:sM > sW > sA

另外三種掃描方式sN/sF/sX暫時沒用到,後面用到再做介紹

最後給出能目前我知道的能掃描出所有端口及詳細信息,最節省時間的nmap命令:

nmap -v -Pn -sS -T5 -sV -p1-13000 --version-light -O --osscan-guess -n 140.143.2.176

效果如下 (為了節省時間我只掃描前 13000 個端口):

image

image

果然我的12315端口不在常用端口裡面,直到我指定範圍才掃描出來

操作系統猜測最有可能為Linux4.4Linux4.0,實際上是3.10

image

但是這條命令還不是完美的,因為我指定了範圍,我希望能以最快的速度掃描所有端口

但是即使是-sS也不太給力,從上面這兩個例子我們可以看出nmap對全端口掃描並不在行

可以和後面介紹的無狀態端口掃描器Masscan配合起來使用,實現 “精準制導”。

zmap#

ZMap 是一個開源網絡掃描工具,可以幫助研究人員快速的進行全網檢測。只需要一台機器和足夠上行網絡速度,就可以以達到千兆以太網的理論值速度並在 45 分鐘內掃描全網絡 IPv4 地址。

它是由我們前面介紹的censys.io的站長開發的工具。

GitHub 地址:

zmap不支持 Windows,我們這裡使用一台Ubuntu Desktop 18.04.1 LTS來安裝和使用zmap

執行:sudo apt install zmap -y 即可完成安裝

常用參數如下:

-p, –target-port=port:需要掃描的TCP 端口號 (比如443)
-o, –output-file=name:將掃描結果輸出到文件
-b, –blacklist-file=path:黑名單文件,即排除在掃描範圍外的地址。在conf/blacklist.example文件中有實例,每同一行寫一個網段,比如192.168.0.0/16。
-n, –max-targets=n,檢測的上限範圍,可以是一個數字如-n 10000,也可以是掃描地址空間中的百分比
-N, –max-results=n:接收到一定數量的結果後退出掃描
-t, –max-runtime=secs:最大掃描(發包)時間
-r, –rate=pps:設置發包速率(packets/sec)
-B, –bandwidth=bps:設置發包帶寬(bits/second
-c, –cooldown-time=secs:接受返回的時間(default=8)
-T, –sender-threads=n:發包的線程數 (默認為1):-P, –probes=n
送達每個IP的探測器數量(默認為1):網絡選項
-s, –source-port=port|range:發包的源端口(s)
-S, –source-ip=ip|range:發包的源IP,也可以是IP地址段
-G, –gateway-mac=addr:發包的網關MAC地址
-i, –interface=name:網絡端口
–list-probe-modules:列出可用的探測器模塊
-M, –probe-module=name:選擇探測器模塊 (默認為tcp_synscan)
–probe-args=args:設置探測器模塊的參數
–list-output-fields:列出所選擇的探測器模塊
輸出選項:ZMap 允許用戶定義和編寫自己的輸出模塊。輸出模塊負責處理探測器模塊的返回結果並且展示給用戶。
–list-output-modules:列出所有輸出模塊
-O, –output-module=name:設置輸出模塊
–output-args=args:設置輸出模塊的參數
-f, –output-fields=fields
列出所選擇的輸出模塊:–output-filter
輸出模塊過濾器:附加選項
-C, –config=filename:讀一個配置文件,其中可以包含特殊的選項
-q, –quiet:安靜模式
-g, –summary:在掃描結束後,打印配置和結果彙總
-v, –verbosity=n:log的等級 (0-5, 默認為3)
-h, –help:顯示幫助
-V, –version:打印版本

雖然zmap-p選項是指定端口,但是不能用1-65535這樣的參數

zmap的用途更多的偏向於掃描指定範圍內主機的某個指定端口是否開放,比如:

zmap -p 80 1.2.3.4 10.0.0.3:掃描1.2.3.4,10.0.0.3這兩個ip的80端口
zmap -p 80 10.0.0.0/8 192.168.0.0/16:掃描掃描兩個子網的80端口
zmap -p 80:在Internet上查找tcp/ 80上的主機並輸出到stdout
zmap -N 5 -B 10M -p 80:找到5個HTTP伺服器,以10 Mb/s掃描

使用zmap掃描臨時獲得baidu.com的 C 段:123.125.114.1/24 的8080端口:

image

基本 1s 就能掃完,但是這與本文掃描指定主機的所有端口目標不太符合,這裡就不再繼續介紹

Masscan#

Masscan 号称是最快的互联网端口扫描器,最快可以在六分钟内扫遍互联网。

masscan雖然能在Windows下使用,但是要配置MinGW等編譯環境,所以在此做演示我們也使用Ubuntu環境

安裝方式:

sudo apt-get install git gcc make libpcap-dev -y
git clone https://github.com/robertdavidgraham/masscan
cd masscan
make

如果需要在任何位置使用masscan命令的話,執行:

cd ~
cp masscan/bin/masscan /bin

masscan常用選項:

-p               指定要掃描的端口,同時指定多個端口要用逗號隔開
--rate           指定發包速率,根據你自己的實際帶寬來定,我自己是20M的光纖,一般給1000足矣,一兩兆的vpn,給100就差不多了,都是粗略估計的,懶的算
--open-only      僅顯示開放的端口
--banners        獲取banners
-c               使用自定義的掃描配置文件
--ping           掃之前是否要先ping下目標
-oL              把掃描結果存到指定文件中
--excludefile    排除不掃描的ip段

先介紹下本文的原本目標,掃描指定 ip 的所有端口:

masscan -p1-65535 140.143.2.176

使用這條命令的話速度比nmap-sS還要慢一大截,這是因為默認情況下,

Masscan 掃描速度為每秒 100 個數據包,這是相當慢的。

你也可以使用--rate選項並指定一個值,我們比較下使用默認 100 發包速度和加快發包速率的結果:

masscan -p1-65535 140.143.2.176 --rate 1000 > 1.txt
masscan -p1-65535 140.143.2.176 > 2.txt

image

image

由此可見發包個數與掃描出來的端口數量成反比

其他的參數,保存,加載配置什麼的,都沒什麼的好說的,核心就是直接指定端口掃就行了。

端口掃描及服務識別總結#

如果只是簡單的掃描以下常見的端口,用御劍高速 TCP 全端口掃描工具或者censys.io已經完全足夠

當然,有條件的話還是非常建議直接使用nmap,對上面的參數解釋和用法最後歸結為以下幾條:

默認的掃描方式-sT不推薦,建議使用-sS選項
默認時-T3級別,日常掃描可以使用-T4
-A選項掃描太多東西了,一般使用-sV和-O --osscan-guess即可
端口掃描時

另外nmap還有很多用法比如主機探測部分我沒有一一比較,後面我用到的時候會回來更新這篇文章。

當然,nmap-sS掃描常用端口及猜測端口對應的服務信息配合上masscan不改變速率的全端口掃描

基本上就能滿足這篇文章的初衷 - 掃描指定伺服器的所有端口及信息了。

本文完。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。