無意中看到的,算是科普類型的文章吧。簡單收藏一下
按照目前的協議類型,我們大致可以知道有:
一個IP地址可以有65535(2^16)個端口,范圍則是從0到65535(2^16-1),每個端口按照協議又可以分為兩種類型:一種是TCP端口;另一種是UDP端口。
TCP、UDP都是IP層的傳輸協議,其中TCP是面向連接、可靠的字節流服務;UDP則是不可靠的,面向數據報的服務。每一個端口都會支持這兩種協議,因此可以基於這兩種協議進行端口掃描。
以及現在還有通過在 TCP/IP 模型中的網絡層 ICMP 協議來探測端口的掃描技術。
TCP
TCP報文這里就不再細講了,也不是重點,放一張TCP數據報文的圖,具體可以去百度百科了解:
TCP三次握手:
TCP CONNECT SCAN
原理很簡單,與目標端口建立3次握手,如果成功建立則為open
,收到RST
則為close
usage
MSF 模塊:
1 |
use auxiliary/scanner/portscan/tcp |
Nmap 選項參數:
1 |
nmap -sT scanme.nmap.org |
TCP SYN SCAN
也稱為TCP半連接掃描,只發送三次握手的第一次SYN報文段,如果收到ACK+SYN
則為open
,收到RST
則為close
,這種好處是不必等待三次握手完全完成,速度快且不容易被防火牆記錄進日志。
Nmap 處理方式:
Probe Response | Assigned State |
---|---|
TCP SYN/ACK response | open |
TCP RST response | closed |
No response received (even after retransmissions) | filtered |
ICMP unreachable error (type 3, code 1, 2, 3, 9, 10, or 13) | filtered |
usage
MSF 模塊:
1 |
use auxiliary/scanner/portscan/syn |
Nmap 參數
1 |
nmap -sS scanme.nmap.org |
TCP Xmas Tree SCAN
客戶端向服務端發送帶有 PSH
,FIN
,URG
標識的數據包(即不含有ACK SYN RST
),被稱為TCP Xmas Tree掃描。其利用的是RFC
的規定:
如果不設置SYN,RST,或者ACK位的報文發送到開放端口,理論上,這不應該發生,如果您確實收到了,丟棄該報文,返回。
那么就有:
如果掃描系統遵循該RFC,當端口關閉時,任何不包含SYN,RST,或者ACK位的報文會導致 一個RST返回而當端口開放時,應該沒有任何響應。只要不包含SYN,RST,或者ACK, 任何其它三種(FIN,PSH,and URG)的組合都行。
Nmap 對 NULL, FIN, or Xmas 掃描的處理:
Probe Response | Assigned State |
---|---|
No response received (even after retransmissions) | open or filtered |
TCP RST packet | closed |
ICMP unreachable error (type 3, code 1, 2, 3, 9, 10, or 13) | filtered |
usage
MSF 模塊:
1 |
use auxiliary/scanner/portscan/xmas |
Nmap 選項參數:
1 |
Null scan (`-sN`) |
TCP NULL SCAN
空掃描即flag
位全 0 ,如果沒有回復則為open
,收到RST
則為close
TCP ACK SCAN
使用TCP ACK掃描不能夠確定端口的關閉或者開放,因為當發送給對方一個含有 ACK 表示的TCP報文的時候,都返回含有RST標志的報文,無論端口是開放或者關閉。所以,不能使用TCP ACK掃描來確定端口是否開放或者關閉。但是可以利用它來掃描防火牆的配置,用它來發現防火牆規則,確定它們是有狀態的還是無狀態的,哪些端口是被過濾的。
向服務端發送一個帶有 ACK 標識的數據包,如果收到帶有 RST 標識的響應,則說明服務端沒有過濾,不存在狀態防火牆。
usage
可以使用 msf 的模塊
1 |
use auxiliary/scanner/portscan/ack |
Nmap 可以用以下命令
1 |
nmap -sA scanme.nmap.org |
TCP WINDOW SCAN
TCP 窗口掃描的流程類似於 ACK 掃描,都是向服務端發送帶有 ACK 標識的數據包,不同的在於 TCP 窗口掃描會檢查收到的 RST 數據包中的窗口大小,如果 RST 數據包中的窗口大小不為零,則說明目標端口是開放的。
如果 RST 數據包中的窗口大小為零,則說明目標端口處於關閉狀態。
Nmap 對 TCP Window 掃描的處理:
Probe Response | Assigned State |
---|---|
TCP RST response with non-zero window field | open |
TCP RST response with zero window field | closed |
No response received (even after retransmissions) | filtered |
ICMP unreachable error (type 3, code 1, 2, 3, 9, 10, or 13) | filtered |
usage
Nmap 掃描參數:
1 |
nmap -sW docsrv.caldera.com |
TCP Idle Scan
1998年,安全研究員Antirez(曾參與編輯nmap中有關hping2工具的相關文章)在Bugtraq郵件列表中發布了一篇關於新的端口掃描技術的文章。Idle Scan,也就慢慢的為眾人所了解,它允許進行完全盲目的端口掃描。事實上,攻擊者可以不用向目標發送數據包就完成掃描工作!相反,用猥瑣的邊信道攻擊是能夠讓掃描映射到一個Zombie 主機上的。除了極其隱蔽的情況,這種掃描方式允許挖掘機器之間基於IP的信任關系。
雖然 Idle Scan 比目前討論的任何技術都復雜,但您無需成為TCP / IP專家就能理解它。你只需要知道這些就夠了:
- 確定TCP端口是否打開的一種方法是向端口發送SYN(會話建立)數據包。如果端口打開,目標機器將響應SYN / ACK(會話請求確認)數據包,如果端口關閉,則響應RST(重置)。這是前面討論的SYN掃描的基礎。
-
接收未經請求的SYN / ACK數據包的計算機將使用RST進行響應。未經請求的RST將被忽略。
-
Internet上的每個IP數據包都有一個片段標識號(IP ID)。由於許多操作系統只是為它們發送的每個數據包遞增此數字,因此探測IPID可以告訴攻擊者自上次探測以來已發送了多少數據包。
結合以上特征,就可以偽造身份去掃描目標網絡,所以看起來就像是無辜的 Zombie 主機在掃描。
Idle Scan Step by Step
從本質上來看,Idle Scan 只需要重復3個步驟就ok了。
- 探查Zombie的IP ID並記錄下來。
- 在Zombie主機上偽造一個包,然后把包發送給目標主機端口。根據端口的狀態,目標主機可能會也有可能不會導致Zombie主機IPID值增加。
- 再探查Zombie主機的IP ID。比較兩次得到IPID值
經過這樣一個流程,Zombie主機的 IP ID 應該會增加1~2。如果只是增加了1,那么就可以說明Zombie主機還沒有發出任何包,當然,響應攻擊者的探查請求除外。沒有發送包也就意味着目標端口沒有被打開(也可能是目標主機向Zombie主機發送了一個RST包,導致請求被忽略,或者是根本就是什么都沒有做)。增加的如果是2,那就表明Zombie主機成功在兩個探測器之間發送了包。這種情況一般情況都意味着目標端口是開着的(目標大概會向Zombie主機發送一個SYN/ACK包去響應攻擊者偽造的SYN,從Zombie主機誘導RST包)。如果是增加了一個比2還大的數字,那么就說明Zombie主機太糟糕了!它可能不能勝任預測IPID數值,也可能是正在忙於其他與Idle Scan無關的事情。
雖然關閉了端口和被過濾的端口會發生的事情稍微有點點不同,但是攻擊者處理的方法都一樣,IPID都只是增加1。所以,在Idel Scan中無法區別端口到底是關閉的還是已經過濾了。當Nmap記錄的IPID增加了1,也就被標記成了close丨filterred。
以下三張圖大略可以說明端口被打開,關閉,過濾的情況。
端口開放:
端口關閉:
端口被過濾:
Idel Scan根本上來講就是一個隱性掃描,Nmap提供了decoy scanning (-D),幫助使用者保護自己的身份。如果不是使用的(類似Idel Scan掃描方式)仍然需要攻擊者通過自身真實IP向目標發送數據包以獲取掃描結果。Idel Scan掃描結果其中之一就有入侵檢測系統通常會發送一個Zombie主機已經開始掃描的通知。所以它可以作為一個框架去掃描另外一個目標,當你查閱入侵檢測系統(IDS)時,請記住這種可能性。
Idel Scan的一個獨特優勢便是,它可以繞開某些過濾防火牆和路由器。IP源地址過濾,是一種常見的(雖然很弱)用於限制機器連接到敏感主機或者說網絡上的安全機制。舉個例子,一個公司數據庫服務器,只允許公共網絡連接。或者,家庭用戶只允許SSH連接到工作機上面。
Idel Scanning有時也可以被用來映射信任關系,關鍵在於Idel Scan最終會從Zombie主機獲取開放端口列表。一個正常的掃描對於上述數據庫服務器可能會顯示沒有端口開放,但是當將Zombie主機作為Web Sever的IP,使用Idel Scan就可能將數據庫相關開放端口暴露出來。
映射出的這些信任關系就可能作為攻擊者優先考慮的目標,上面所討論的方式手法很猥瑣哇!
Idel Scan有一個缺點就是它比其他一些掃描方式所花費的時間更長。盡管在《Idel Scan算法實現》章節中有對Idel Scan的優化算法,一個只需要15秒就可以完成的SYN,Idel Scan或許需要15分鍾才能夠完成。另一個問題就是你必須能夠發送欺騙包,偽裝成好像他們來自Zombie主機一般,讓他們到達目標主機。許多ISP服務商(特別是撥號和住宅寬帶供應商)目前執行出口過濾來防止這類數據包欺騙。高端供應商(比如說主機托管,T1-Services)就不太可能這么做。如果實際存在這個過濾,Nmap會在你嘗試的每一個Zombie主機上顯示一個快速錯誤消息。如果不能夠更換ISP服務商,那么最好嘗試在讓ISP服務商給你更換一個IP。有時候這個過濾僅僅只是阻止了客戶使用范圍之外的欺騙IP地址。Idel Scan另外一個難點就是你必須尋找一個正在工作的Zombie主機。
上述描述的是Idel Scan的基礎水平。在Nmap上實現卻是有些復雜,最關鍵的差異在於Nmap能夠同時執行,而且誤報少。
Parallelizing idle scan由於是間接推導出端口所以,他比其他掃描方式要更加的猥瑣。如果Nmap探測目標主機上的多個端口,然后檢測Zombie主機上新的IP ID值,IP ID的值增加了多少就顯示出目標開放了多少個端口。實際上這並不是一個和嚴重的問題,絕大多數端口在大型掃描結果中基本上都是被關閉或者被過濾。由於只有開放端口才可以讓IP ID值增加,Nmap會認為沒有增加量,然后整個組的端口就被標記成了關閉或者被過濾。Nmap可以並行掃描一百組端口。如果Nmap在探測一組端口的時候Zombie主機IP ID同時也增加了,就說明在這一組端口中一定有開放的端口。Nmap繼而使用二進制搜索發現開放的端口。它將數據組分成兩份,分別發送探測信息,如果一個數據組顯示沒有開放端口,那么這一數據組的端口都將被標記為被關閉或者被過濾。如果一個數據組顯示有開放端口,那么在把這個數據組分成兩份,重復以上步驟,直到最終將開放端口都找出來。雖然這種方式更復雜,但是這種方式可以節約掃描時間。
可靠性是Idel Scan的另一個問題。如果Zombie主機在掃描時向任何不相干的機器發送數據包,其IP ID會增加。這就會讓Nmap誤以為已經尋找到開放的端口了。幸運的是,並行掃描在這里也是有很大作用的。如果Nmap在一個組中掃描100個端口,那么IP ID就會增加標識兩個開放端口,Nmap將這組數據分成50端口一個小組。當Nmap同時在兩個小組中進行IP ID掃描時,Zombie主機IP ID總的增加量就在加了一次。另外,Nmap如果探測到不一致,那么它會重新探測。基於檢測可靠的Zombie主機,Nmap還會修改組大小以及掃描時間。如果Nmap發現有大量不一致的結果,它將退出,並提示用戶選擇更好的Zombie主機。
具體操作可以參考TCP Idle Scan (-sI)
TCP Maimon Scan
Maimon Scan 以其發現者 Uriel Maimon 命名。 他在 Phrack 雜志第49期(1996年11月)中描述了這種技術。 除了探測器是FIN / ACK之外,此技術與NULL,FIN和Xmas掃描完全相同。 根據RFC 793(TCP),響應於這樣的探測,應該生成RST分組,無論端口是打開還是關閉。 但是,如果端口打開,許多BSD派生系統只會丟棄數據包。 Nmap利用這一點來確定開放端口,如下表所示:
Nmap 對 TCP Maimon Scan 的處理:
Probe Response | Assigned State |
---|---|
No response received (even after retransmissions) | open or filtered |
TCP RST packet | closed |
ICMP unreachable error (type 3, code 1, 2, 3, 9, 10, or 13) | filtered |
usage
1 |
nmap -sM para |
TCP FTP Bounce Scan
FTP協議(RFC 959)的一個有趣特性是支持代理FTP連接。這允許用戶連接到一個FTP服務器,然后要求將文件發送到第三方服務器。這樣的功能在很多層面上被濫用,因此大多數服務器已停止支持它。此功能允許的濫用功能之一是通過 FTP 服務器進行掃描其他主機端口。只需要求 FTP 服務器依次將文件發送到目標主機的每個端口就可以了。回顯消息將描述端口是否打開。這是繞過防火牆的好方法,因為內部的 FTP 服務器通常放置在比舊的 Internet 主機都能訪問到的其他主機的位置上。
Nmap支持使用-b選項進行FTP反彈掃描。它采用<username>:<password>@<server>:<port>
形式的參數。 <Server>
是易受攻擊的FTP服務器的名稱或IP地址。與普通URL一樣,您可以省略<username>:<password>
,在這種情況下,將使用匿名登錄憑據(user:anonymous password:-wwwuser@
)。端口號(和前面的冒號)也可以省略,在這種情況下,使用<server>
上的默認FTP端口(21)。
使用 FTP Bounce Scan 較為頻繁的用戶更好地習慣了對回顯消息的處理。這個漏洞在1997年Nmap發布時很普遍,但已在很大程度上得到修復。易受攻擊的服務器仍然存在,所以當其他所有服務器都失敗時,這個方法值得一試。如果您的目標是繞過防火牆,請掃描目標網絡以查找開放的21端口(如果使用版本檢測掃描所有端口,則掃描任何FTP服務),然后嘗試使用每個端口進行 Bounce Scan。 Nmap會告訴您主機是否容易受到攻擊。如果您只是試圖掩蓋您的曲目,您不需要(事實上,不應該)限制目標網絡上的主機。在為易受攻擊的FTP服務器掃描隨機Internet地址之前,請考慮系統管理員可能不會允許這樣濫用其服務器。
usage
Nmap 掃描方式:
1 |
nmap -p 22,25,135 -Pn -v -b XXX.YY.111.2 scanme.nmap.org |
UDP
在TCP/IP模型中,UDP為網絡層以上和應用層以下提供了一個簡單的接口。UDP只提供數據的不可靠傳遞,它一旦把應用程序發給網絡層的數據發送出去,就不保留數據備份(所以UDP有時候也被認為是不可靠的數據報協議)。UDP在IP數據報的頭部僅僅加入了復用和數據校驗字段。
UDP適用於不需要或在程序中執行錯誤檢查和糾正的應用,它避免了協議棧中此類處理的開銷。對時間有較高要求的應用程序通常使用UDP,因為丟棄數據包比等待或重傳導致延遲更可取。
UDP SCAN
UDP掃描比較簡單,一般如果返回ICMP port unreachable
說明端口是關閉的,而如果沒有回應或有回應(有些UDP服務是有回應的但不常見)則認為是open
,但由於UDP的不可靠性,無法判斷報文段是丟了還是沒有回應,所以一般掃描器會發送多次,然后根據結果再判斷。這也是為什么UDP掃描這么慢的原因。
雖然因特網上最流行的服務運行在TCP協議上,但UDP服務被廣泛部署。 DNS,SNMP和DHCP(注冊端口53,161 / 162和67/68)是最常見的三種。 由於UDP掃描通常比TCP更慢且更困難,因此某些安全審核員會忽略這些端口。 這是一個錯誤,因為可利用的UDP服務非常普遍,攻擊者肯定不會忽略整個協議。
UDP掃描通過向每個目標端口發送UDP數據包來工作。 對於大多數端口,此數據包將為空(無有效負載),但對於一些更常見的端口,將發送特定於協議的有效負載。 根據響應或缺少響應,端口被分配給四種狀態之一,如下表所示:
Nmap 對 UDP Scan 的處理:
Probe Response | Assigned State |
---|---|
Any UDP response from target port (unusual) | open |
No response received (even after retransmissions) | open or filtered |
ICMP port unreachable error (type 3, code 3) | closed |
Other ICMP unreachable errors (type 3, code 1, 2, 9, 10, or 13) | filtered |
usage
Nmap 選項參數:
1 |
nmap -sU scanme.nmap.org |
Nmap 有很多選項可以提升 UDP Scan 的准確性與速度,這里不再深入講解,具體可以參考UDP Scan (-sU)
ICMP
ICMP 格式:
根據網絡協議,如果按照協議出現了錯誤,那么接收端將產生一個icmp的錯誤報文。這些錯誤報文並不是主動發送的,而是由於錯誤,根據協議自動產生。
ICMP 相關類型解釋:
一般如果數據包被防火牆過濾的話,會收到一個 ICMP 數據包,其中類型為3,代碼為1,2,3,9,10或13。
ICMP SCAN
常見的利用:
SCTP
這里我們簡單介紹一下 SCTP 協議。
流控制傳輸協議(英語:Stream Control Transmission Protocol,縮寫:SCTP)是在2000年由IETF的SIGTRAN工作組定義的一個傳輸層協議。RFC 4960詳細地定義了SCTP,介紹性的文檔是RFC 3286。
作為一個傳輸層協議,SCTP可以理解為和TCP及UDP相類似的。它提供的服務有點像TCP,又同時將UDP的一些優點相結合。是一種提供了可靠、高效、有序的數據傳輸協議。相比之下TCP是面向字節的,而SCTP是針對成幀的消息。
SCTP主要的貢獻是對多重聯外線路的支持,一個端點可以由多於一個 IP地址 組成,使得傳輸可在主機間或網卡間做到透明的網絡容錯備援。
SCTP最初是被設計用於在IP上傳輸電話協議(SS7),把 SS7 信令網絡的一些可靠特性引入IP。IETF 的這方面的工作稱為信令傳輸 SIGTRAN。
SCTP將數據傳給應用層的方式,是將數據視為message(bytes的集合),SCTP的特征是message-oriented,意思就是說它發送的是一串message(每一個message是byte為單位的集合),相對於TCP是以byte為單位,發送的是破碎的流。在SCTP發送端用一個動作提交消息,接收端也是用一個動作取出消息傳給對應的應用程序。相較於TCP,是一個流導向的協議,可靠地且有順序地發送以bytes為單位的流。然而TCP並不允許接收端知道發送端的應用程序調用提交bytes集合的次數。在發送端TCP只是簡單的附加更多bytes在queue里等待着送到網絡上,而SCTP是將要提交的outband message都保有自己獨立的queue。
簡而言之,SCTP是TCP和UDP協議的一種相對較新的替代方案,它結合了TCP和UDP的大多數特性,還增加了多宿主和多流等新功能。它主要用於SS7 / SIGTRAN相關服務,但也有可能用於其他應用程序。
下圖是 TCP 與 SCTP 建立連接的對比圖:
SCTP INIT scan
SCTP INIT掃描是TCP SYN掃描的SCTP等效物。它可以快速執行,在快速網絡上每秒掃描數千個端口,而不受限制性防火牆的限制。與SYN掃描一樣,INIT掃描相對不顯眼且隱蔽,因為它永遠不會完成SCTP關聯。它還允許在打開,關閉和過濾狀態之間進行清晰,可靠的區分。
此技術通常稱為半開掃描,因為您不打開完整的SCTP關聯。您發送一個INIT塊,就好像您要打開一個真正的關聯,然后等待響應。 INIT-ACK塊表示端口正在偵聽(打開),而ABORT塊表示非偵聽器。如果在多次重新傳輸后未收到響應,則將端口標記為已過濾。如果收到ICMP不可達錯誤(類型3,代碼0,1,2,3,9,10或13),則端口也會被標記為已過濾。
usage
1 |
nmap -sY ip |
SCTP COOKIE ECHO SCAN
SCTP COOKIE ECHO SCAN 是一種更先進的SCTP掃描。 它利用了SCTP實現應該在開放端口上靜默丟棄包含COOKIE ECHO塊的數據包這一事實,但如果端口關閉則發送ABORT。 這種掃描類型的優點是端口掃描不像INIT掃描那么明顯。 此外,可能存在阻止INIT塊的非狀態防火牆規則集,但不阻止COOKIE ECHO塊。 不要誤以為這會使端口掃描不可見; 一個好的IDS也能夠檢測到SCTP COOKIE ECHO掃描。 缺點是SCTP COOKIE ECHO掃描不能區分打開和過濾的端口,在這兩種情況下都會打開狀態。
usage
1 |
nmap -sZ ip |
IP
IP Scan
IP協議掃描允許您確定目標計算機支持哪些IP協議(TCP,ICMP,IGMP等)。這在技術上不是端口掃描,因為它循環通過IP協議號而不是TCP或UDP端口號。然而,它仍然使用-p
選項來選擇掃描的協議號,以正常的端口表格式報告其結果,甚至使用與真正的端口掃描方法相同的底層掃描引擎。所以它足夠接近它所屬的端口掃描。
協議掃描的工作方式與UDP掃描類似。它不是遍歷UDP數據包的端口號字段,而是發送IP數據包標頭並迭代通過8位IP協議字段。標頭通常是空的,不包含任何數據,甚至不包括所聲明協議的正確標頭。某些流行協議(包括TCP,UDP和ICMP)例外。包含適當的協議頭,因為一些系統不會發送它們,因為Nmap已經具有創建它們的功能。協議掃描不是在觀察ICMP端口不可達消息,而是在尋找ICMP協議不可達消息。如下表顯示了對IP探測的響應如何映射到端口狀態。
Nmap 對 IP Scan 的處理:
Probe Response | Assigned State |
---|---|
Any response in any protocol from target host | open (for protocol used by response, not necessarily probe protocol) |
ICMP protocol unreachable error (type 3, code 2) | closed |
Other ICMP unreachable errors (type 3, code 1, 3, 9, 10, or 13) | filtered (though they prove ICMP is open if sent from the target machine) |
No response received (even after retransmissions) | open or filtered |
與TCP或UDP協議中的開放端口一樣,每個開放協議都是潛在的利用向量。此外,協議掃描結果有助於確定機器的用途以及采用何種類型的數據包過濾。終端主機通常只有TCP,UDP,ICMP和(有時)IGMP打開,而路由器通常提供更多,包括路由相關協議,如GRE和EGP。防火牆和VPN網關可能會顯示與加密相關的協議,如IPsec和SWIPE。
與UDP掃描期間收到的ICMP端口不可達消息一樣,ICMP協議不可達消息通常是速率限制的。例如,默認Linux 2.4.20框中每秒發送的ICMP目標無法訪問響應不超過一個。由於只有256個可能的協議號,因此與65,536端口UDP掃描相比,這不是問題。
usage
協議掃描的使用方法與命令行上的大多數其他掃描技術的使用方法相同。除了一般的Nmap選項外,請簡單指定-sO
。普通端口-p
選項用於選擇協議號。或者,您可以使用-F
掃描nmap-protocols數據庫中列出的所有協議。默認情況下,Nmap掃描所有256個可能的值。
1 |
nmap -sO 62.233.173.90 para |