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