scan,是一切入侵的基礎(chǔ),,掃描探測一臺主機包括是為了確定主機是否活動,、主機系統(tǒng)、正在使用哪些端口,、提供了哪些服務(wù),、相關(guān)服務(wù)的軟件版本等等,對這些內(nèi)容的探測就是為了“對癥下藥”,。對主機的探測工具非常多,,比如大名鼎鼎的nmap、netcat,、superscan,,以及國內(nèi)的x-scanner等等。
icmp協(xié)議——ping是最常用的,,也是最簡單的探測手段,,用來判斷目標(biāo)是否活動。實際上ping是向目標(biāo)發(fā)送一個要求回顯(type = 8)的icmp數(shù)據(jù)報,,當(dāng)主機得到請求后,,再返回一個回顯(type = 0)數(shù)據(jù)報。而且ping 程序一般是直接實現(xiàn)在系統(tǒng)內(nèi)核中的,,而不是一個用戶進程,。ping是最基本的探測手段,ping sweep(ping掃射)就是對一個網(wǎng)段進行大范圍的ping,,由此確定這個網(wǎng)段的網(wǎng)絡(luò)運作情況,,比如著名的fping工具就是進行ping掃射的。 不過現(xiàn)在連基本的個人防火墻都對ping做了限制,,這個也太基本了,。如果透過防火墻,如何獲得最理想的目標(biāo)圖,,也是很多人整天思考的問題,。我們這里介紹的一些掃描技術(shù)就是要盡可能地繞過一些安全防護設(shè)備,并且盡量保護自己,,同時達到我們需要的目的,。 一、高級icmp掃描技術(shù) ping就是利用icmp協(xié)議走的,,高級的icmp掃描技術(shù)主要是利用icmp協(xié)議最基本的用途:報錯,。根據(jù)網(wǎng)絡(luò)協(xié)議,,如果按照協(xié)議出現(xiàn)了錯誤,那么接收端將產(chǎn)生一個icmp的錯誤報文,。這些錯誤報文并不是主動發(fā)送的,,而是由于錯誤,根據(jù)協(xié)議自動產(chǎn)生,。 當(dāng)ip數(shù)據(jù)報出現(xiàn)checksum和版本的錯誤的時候,,目標(biāo)主機將拋棄這個數(shù)據(jù)報,如果是checksum出現(xiàn)錯誤,,那么路由器就直接丟棄這個數(shù)據(jù)報了,。有些主機比如aix、hp-ux等,,是不會發(fā)送icmp的unreachable數(shù)據(jù)報的,。 我們利用下面這些特性:
向目標(biāo)主機發(fā)送一個ip數(shù)據(jù)報,但是協(xié)議項是錯誤的,,比如協(xié)議項不可用,,那么目標(biāo)將返回destination unreachable的icmp報文,但是如果是在目標(biāo)主機前有一個防火墻或者一個其他的過濾裝置,,可能過濾掉提出的要求,,從而接收不到任何回應(yīng)??梢允褂靡粋€非常大的協(xié)議數(shù)字來作為ip頭部的協(xié)議內(nèi)容,,而且這個協(xié)議數(shù)字至少在今天還沒有被使用,應(yīng)該主機一定會返回unreachable,,如果沒有unreachable的icmp數(shù)據(jù)報返回錯誤提示,那么就說明被防火墻或者其他設(shè)備過濾了,,我們也可以用這個辦法來探測是否有防火墻或者其他過濾設(shè)備存在,。 利用ip的協(xié)議項來探測主機正在使用哪些協(xié)議,我們可以把ip頭的協(xié)議項改變,,因為是8位的,,有256種可能,。通過目標(biāo)返回的icmp錯誤報文,來作判斷哪些協(xié)議在使用,。如果返回destination unreachable,,那么主機是沒有使用這個協(xié)議的,相反,,如果什么都沒有返回的話,,主機可能使用這個協(xié)議,但是也可能是防火墻等過濾掉了,。nmap的ip protocol scan也就是利用這個原理,。 利用ip分片造成組裝超時icmp錯誤消息,同樣可以來達到我們的探測目的,。當(dāng)主機接收到丟失分片的數(shù)據(jù)報,,并且在一定時間內(nèi)沒有接收到丟失的數(shù)據(jù)報,就會丟棄整個包,,并且發(fā)送icmp分片組裝超時錯誤給原發(fā)送端,。我們可以利用這個特性制造分片的數(shù)據(jù)包,然后等待icmp組裝超時錯誤消息,??梢詫dp分片,也可以對tcp甚至icmp數(shù)據(jù)包進行分片,,只要不讓目標(biāo)主機獲得完整的數(shù)據(jù)包就行了,,當(dāng)然,對于udp這種非連接的不可靠協(xié)議來說,,如果我們沒有接收到超時錯誤的icmp返回報,,也有可能時由于線路或者其他問題在傳輸過程中丟失了。 我們能夠利用上面這些特性來得到防火墻的acl(access list),,甚至用這些特性來獲得整個網(wǎng)絡(luò)拓撲結(jié)構(gòu),。如果我們不能從目標(biāo)得到unreachable報文或者分片組裝超時錯誤報文,可以作下面的判斷:
二、高級tcp掃描技術(shù) 最基本的利用tcp掃描就是使用connect(),,這個很容易實現(xiàn),,如果目標(biāo)主機能夠connect,就說明一個相應(yīng)的端口打開,。不過,,這也是最原始和最先被防護工具拒絕的一種。 在高級的tcp掃描技術(shù)中主要利用tcp連接的三次握手特性和tcp數(shù)據(jù)頭中的標(biāo)志位來進行,也就是所謂的半開掃描,。 先認(rèn)識一下tcp數(shù)據(jù)報頭的這六個標(biāo)志位,。
tcp協(xié)議連接的三次握手過程是這樣的: 首先客戶端(請求方)在連接請求中,發(fā)送syn=1,,ack=0的tcp數(shù)據(jù)包給服務(wù)器端(接收請求端),,表示要求同服務(wù)器端建立一個連接;然后如果服務(wù)器端響應(yīng)這個連接,,就返回一個syn=1,,ack=1的數(shù)據(jù)報給客戶端,表示服務(wù)器端同意這個連接,,并要求客戶端確認(rèn),;最后客戶端就再發(fā)送syn=0,ack=1的數(shù)據(jù)包給服務(wù)器端,,表示確認(rèn)建立連接,。 我們就利用這些標(biāo)志位和tcp協(xié)議連接的三次握手特性來進行掃描探測,。 syn 掃描 這種掃描方式也被稱為“半打開” 掃描,因為利用了tcp協(xié)議連接的第一步,,并且沒有建立一個完整的tcp連接。 實現(xiàn)辦法是向遠端主機某端口發(fā)送一個只有syn標(biāo)志位的tcp數(shù)據(jù)報,,如果主機反饋一個syn || ack數(shù)據(jù)包,,那么,這個主機正在監(jiān)聽該端口,,如果反饋的是rst數(shù)據(jù)包,,說明,主機沒有監(jiān)聽該端口,。在x-scanner 上就有syn的選擇項,。 ack 掃描 發(fā)送一個只有ack標(biāo)志的tcp數(shù)據(jù)報給主機,如果主機反饋一個tcp rst數(shù)據(jù)報來,,那么這個主機是存在的,。也可以通過這種技術(shù)來確定對方防火墻是否是簡單的分組過濾,還是一個基于狀態(tài)的防火墻,。 fin 對某端口發(fā)送一個tcp fin數(shù)據(jù)報給遠端主機,。如果主機沒有任何反饋,那么這個主機是存在的,,而且正在監(jiān)聽這個端口,;主機反饋一個tcp rst回來,那么說明該主機是存在的,,但是沒有監(jiān)聽這個端口,。 null 即發(fā)送一個沒有任何標(biāo)志位的tcp包,根據(jù)rfc793,,如果目標(biāo)主機的相應(yīng)端口是關(guān)閉的話,,應(yīng)該發(fā)送回一個rst數(shù)據(jù)包。 fin+urg+push 向目標(biāo)主機發(fā)送一個fin,、urg和push分組,,根據(jù)rfc793,如果目標(biāo)主機的相應(yīng)端口是關(guān)閉的,,那么應(yīng)該返回一個rst標(biāo)志,。 上面這些辦法可以繞過一些防火墻,從而得到防火墻后面的主機信息,,當(dāng)然,,是在不被欺騙的情況下的。這些方法還有一個好處就是比較難于被記錄,,有的辦法即使在用netstat命令上也根本顯示不出來,,而且一般的安全防護設(shè)備也根本不記錄這些內(nèi)容,這樣能夠更好地隱藏自己。 三,、高級udp掃描技術(shù) 在udp實現(xiàn)的掃描中,,多是了利用和icmp進行的組合進行,這在icmp中以及提及了,。還有一些特殊的就是udp回饋,,比如sql server,對其1434端口發(fā)送‘x02'或者‘x03'就能夠探測得到其連接端口,。 |
|