第五章 攻擊-直搗龍門(上)yeti_第1頁
第五章 攻擊-直搗龍門(上)yeti_第2頁
第五章 攻擊-直搗龍門(上)yeti_第3頁
第五章 攻擊-直搗龍門(上)yeti_第4頁
第五章 攻擊-直搗龍門(上)yeti_第5頁
已閱讀5頁,還剩124頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第五章攻擊——直搗龍門(上)5.1簡介5.2一般的攻擊方法本章重點(diǎn)和復(fù)習(xí)要點(diǎn)本章重點(diǎn)和復(fù)習(xí)要點(diǎn)描述PingofDeath攻擊的實(shí)現(xiàn)原理?描述TearDrop攻擊的實(shí)現(xiàn)原理?描述SYNFlood攻擊的實(shí)現(xiàn)原理?如何防范?描述LandAttack攻擊的實(shí)現(xiàn)原理?描述SmurfAttack攻擊的實(shí)現(xiàn)原理?什么是DDoS攻擊,畫出相應(yīng)的攻擊模型?詳細(xì)描述反射式DDoS攻擊的攻擊原理。網(wǎng)絡(luò)蠕蟲型DDoS攻擊的入侵機(jī)制是什么?反彈端口型DDoS攻擊的入侵機(jī)制是什么?返回首頁本章重點(diǎn)和復(fù)習(xí)要點(diǎn)基于IP地址的認(rèn)證(即基于信任的認(rèn)證)與基于口令的認(rèn)證有什么不同?詳細(xì)描述IP欺騙攻擊的詳細(xì)實(shí)現(xiàn)過程?如果黑客已經(jīng)控制了本地的DNS服務(wù)器,如何偽造DNS應(yīng)答信息?如果黑客沒有辦法可以控制本地的DNS服務(wù)器,那應(yīng)該如何通過偽造DNS應(yīng)答信息實(shí)現(xiàn)DNS欺騙?什么是會話劫持?它大體上分為哪兩類?有什么不同?中間人攻擊類型的會話劫持一般使用哪些欺騙技術(shù)實(shí)現(xiàn)?本章重點(diǎn)和復(fù)習(xí)要點(diǎn)什么是緩沖區(qū)溢出?緩沖區(qū)溢出如何進(jìn)行分類?對一個(gè)程序設(shè)置SUID位的含義是什么?為什么我們一般會尋找如下一個(gè)程序的漏洞進(jìn)行緩沖區(qū)溢出攻擊:具有root執(zhí)行權(quán)限且設(shè)置了SUID位?簡單說明在什么情況下就能實(shí)現(xiàn)堆/BSS緩沖區(qū)溢出攻擊的?如何實(shí)現(xiàn)的?分別利用類printf函數(shù)的哪幾個(gè)特性就能實(shí)現(xiàn)格式化串溢出攻擊?針對緩沖區(qū)溢出攻擊有哪些對策?5.1簡介

從黑客攻擊的目的來看,無非兩種:一種是給目標(biāo)以致命打擊,雖然黑客自己不一定能得到直接利益,但能讓目標(biāo)系統(tǒng)受損,甚至癱瘓。另一種攻擊,其目的在于獲取直接的利益,比如截取到目標(biāo)系統(tǒng)的機(jī)密信息,或者得到目標(biāo)系統(tǒng)的最高控制權(quán)。在此過程中,黑客無意對目標(biāo)系統(tǒng)的正常工作能力進(jìn)行破壞,他可能更希望非常隱蔽地實(shí)現(xiàn)自己的目的。返回首頁5.2一般的攻擊方法

5.2.1拒絕服務(wù)攻擊只要網(wǎng)絡(luò)系統(tǒng)或應(yīng)用程序還存在漏洞,只要網(wǎng)絡(luò)協(xié)議的實(shí)現(xiàn)還存在隱患,甚至只要提供服務(wù)的系統(tǒng)仍然具有網(wǎng)絡(luò)開放的特性,拒絕服務(wù)攻擊就會存在。拒絕服務(wù)攻擊并非某一種具體的攻擊方式,而是攻擊所表現(xiàn)出來的結(jié)果。黑客可以采用種種手段,最終使得目標(biāo)系統(tǒng)因遭受某種程度的破壞而不能繼續(xù)提供正常的服務(wù),甚至導(dǎo)致物理上的癱瘓或崩潰。具體的操作方法可以是多種多樣,但其最終目的就是導(dǎo)致目標(biāo)系統(tǒng)無法正常的運(yùn)行或處理正常的服務(wù)請求。返回首頁1.PingOfDeath(死亡之Ping)

一個(gè)完整的IP數(shù)據(jù)包最大為65535Byte,ICMP(Ping使用的協(xié)議)作為內(nèi)嵌于IP中的協(xié)議,其所允許的最大數(shù)據(jù)量應(yīng)該是65535-20-8=65507Byte,其中20為IP頭大小,8為ICMP頭大小。如果底層協(xié)議的MTU(最大傳輸單元)小于上層IP數(shù)據(jù)包的大小,IP包就應(yīng)該分片,并由接收者進(jìn)行重組,典型的以太網(wǎng)的MTU為1500Byte。

在早期操作系統(tǒng)TCP/IP協(xié)議棧實(shí)現(xiàn)中,對單個(gè)IP報(bào)文的處理過程中通常是設(shè)置有一定大小的緩沖區(qū)(65535Byte),以應(yīng)付IP分片的情況。接收數(shù)據(jù)包時(shí),網(wǎng)絡(luò)層協(xié)議要對IP分片進(jìn)行重組。但如果重組后的數(shù)據(jù)報(bào)文長度超過了IP報(bào)文緩沖區(qū)的上限時(shí),就出現(xiàn)溢出現(xiàn)象,導(dǎo)致TCP/IP協(xié)議棧的崩潰。

早期的Ping工具有個(gè)特點(diǎn),允許任意設(shè)置發(fā)送數(shù)據(jù)的字節(jié)數(shù),于是黑客只需要簡單地利用Ping工具就可以讓目標(biāo)主機(jī)拒絕服務(wù)。當(dāng)然,這個(gè)問題并不局限于Ping,黑客發(fā)送其他類型的數(shù)據(jù)包(包括TCP和UDP)時(shí),只要能讓IP分片重組后超過正常IP數(shù)據(jù)包的大小限制,會導(dǎo)致同樣結(jié)果。

目前,所有標(biāo)準(zhǔn)TCP/IP協(xié)議棧已經(jīng)具備了對付超大尺寸包的能力。另外多數(shù)防火墻都可自動過濾掉這種攻擊行為?,F(xiàn)在,Windows2000中的Ping命令最多只允許發(fā)送65500Byte大小的數(shù)據(jù),Linux則一律是84Byte。2.IGMPFlood

與PingOfDeath類似,都是利用IP分片進(jìn)行攻擊的。所不同的是,IGMPFlood利用的是IGMP協(xié)議,IGMP類型為0(不可識別),但它并不使用多播的D類IP地址,而是將目的IP地址設(shè)置為被攻擊目標(biāo)的IP地址。許多OS并不能很好地處理這樣的IGMP報(bào)文,包括Windows95/98/NT4等,一旦遭受攻擊,受害主機(jī)的反應(yīng)會明顯變慢,甚至藍(lán)屏。3.WindowsOOBAttack

專門針對Windows3.1/95/NT的攻擊,受攻擊的主機(jī)可以在片刻間出現(xiàn)藍(lán)屏現(xiàn)象(系統(tǒng)崩潰)。原因是系統(tǒng)中某些端口的監(jiān)聽程序不能處理“意外”來臨的帶外數(shù)據(jù),從而造成嚴(yán)重的非法操作。通常黑客最多選擇的目標(biāo)是TCP139端口,黑客只要先跟目標(biāo)主機(jī)的139端口建立連接,繼而發(fā)送一個(gè)帶URG標(biāo)志的帶外數(shù)據(jù)報(bào)文,目標(biāo)系統(tǒng)即告崩潰。

所謂帶外(Out-Of-Band,OOB)數(shù)據(jù),是指在網(wǎng)絡(luò)通信中,當(dāng)某一方有重要信息需要告知另一方時(shí)所采用的不同于正常數(shù)據(jù)的模式。這些信息可以被快速地遞交給另一方并被特殊處理。通常,傳輸這種數(shù)據(jù)信息所采用的傳輸通道與普通數(shù)據(jù)的是不同的,這就是帶外數(shù)據(jù)的來歷。

在TCP協(xié)議中,傳輸帶外數(shù)據(jù)并沒有使用特殊的通道,而是使用與普通數(shù)據(jù)傳輸相同的連接,只不過傳輸?shù)臋C(jī)制不同而已。TCP協(xié)議提供了一個(gè)緊急模式的帶外數(shù)據(jù)傳輸機(jī)制,通過設(shè)置TCP頭中的URG標(biāo)志,接收方可以對數(shù)據(jù)中的某些信息進(jìn)行特殊處理。TCP協(xié)議只支持一個(gè)字節(jié)的帶外數(shù)據(jù),并用緊急指針標(biāo)識出帶外數(shù)據(jù)字節(jié)的偏移位置。網(wǎng)絡(luò)上這類攻擊工具很多(通過perl腳本程序即可實(shí)現(xiàn)),多是以Winnuke冠名,又稱為藍(lán)屏炸彈。4.Teardrop(淚滴)利用早期某些OS中TCP/IP協(xié)議棧IP分片包進(jìn)行重組時(shí)的漏洞(沒有考慮到一種特殊的分片重疊,導(dǎo)致系統(tǒng)非法操作)進(jìn)行的攻擊,受影響的系統(tǒng)包括Windows3.1/95/NT以及Linux2.1.63之前的版本,其結(jié)果是直接導(dǎo)致系統(tǒng)崩潰,Windows系統(tǒng)則表現(xiàn)為典型的藍(lán)屏癥狀。

協(xié)議棧在處理IP分片時(shí),要對收到的相同ID的分片進(jìn)行重組,這時(shí)免不了出現(xiàn)一些重疊現(xiàn)象,分片重組程序要對此進(jìn)行處理。對一個(gè)分片的標(biāo)識,可以用offset表示其在整個(gè)包中的開始偏移,用end表示其結(jié)束偏移。對于其他一些重疊情況,分片重組程序都能很好地處理,但對于一種特殊情況,分片重組程序就會出現(xiàn)致命失誤,即第二個(gè)分片的位置整個(gè)包含在第一個(gè)分片之內(nèi)。

分片重組程序中,當(dāng)發(fā)現(xiàn)offset2小于end1時(shí),會將offset2調(diào)整到和end1相同,然后更改len2:len2=end2-offset2,在這里,分片重組程序想當(dāng)然地認(rèn)為分片2的末尾偏移肯定是大于其起始偏移的,但在這種情況下,分片2的新長度len2變成了一個(gè)負(fù)值,這在隨后的處理過程中將會產(chǎn)生致命的操作失誤。

后來還有一些拒絕服務(wù)攻擊利用的也是IP分片重組過程中的眾多漏洞,例如Jolt2攻擊,其原理是所有IP分片的偏移經(jīng)過疊加后超出了正常IP包的最大限制,受影響的系統(tǒng)包括Windows95/98/NT/2000,以及一些Linux內(nèi)核版本。對IP分片包的處理也是防火墻需要解決的一個(gè)問題,現(xiàn)在狀態(tài)檢測類型的防火墻,對異常分片的出現(xiàn)都有相應(yīng)的一些處理方法,如對特殊重疊分片的丟棄等。5.UDPFlood

有些系統(tǒng)在安裝后,沒有對缺省配置進(jìn)行必要的修改,使得一些容易遭受攻擊的服務(wù)端口對外敞開著。UDPFlood利用的就是Echo和Chargen(CharacterGenerator)這兩種UDP服務(wù)。

Echo服務(wù)(TCP7和UDP7)對接收到的每個(gè)字符進(jìn)行回送;Chargen(TCP19和UDP19)對每個(gè)接收到的數(shù)據(jù)包都返回一些隨機(jī)生成的字符(如果是與Chargen服務(wù)在TCP19端口建立了連接,它會不斷返回亂字符直到連接中斷)。

黑客一般會選擇兩個(gè)遠(yuǎn)程目標(biāo),生成偽造的UDP數(shù)據(jù)包,目的地是一臺主機(jī)的Chargen服務(wù)端口,來源地假冒為另一臺主機(jī)的Echo服務(wù)端口。這樣,第一臺主機(jī)上的Chargen服務(wù)返回的隨機(jī)字符就發(fā)送給第二臺主機(jī)的Echo服務(wù)了,第二臺主機(jī)再回送收到的字符,如此反復(fù),最終導(dǎo)致這兩臺主機(jī)應(yīng)接不暇而拒絕服務(wù),同時(shí)造成網(wǎng)絡(luò)帶寬的損耗。

現(xiàn)在的大多數(shù)OS即便提供這兩種服務(wù),但對于1024以下的源端口,Echo和Chargen都“置之不理”。最好的方法是盡量減少不必要的網(wǎng)絡(luò)服務(wù)。在Windows2000安裝好之后,應(yīng)禁止掉“SimpleTCP/IPServices”服務(wù),包括Echo、Discard(9)、Daytime(13)、Quote(17)、Chargen等。6.SYNFlood

?攻擊原理是較為流行的DoS攻擊方式之一,當(dāng)然,在單機(jī)上實(shí)行SYNFlood早已經(jīng)“過時(shí)”了,但將它應(yīng)用到DDoS攻擊中,其后果往往是很嚴(yán)重的。一個(gè)正常的TCP連接,需要經(jīng)過三次握手過程才能真正建立。但是如果客戶端不按常規(guī)辦事(假定源IP根本就是一個(gè)不會產(chǎn)生響應(yīng)的虛假地址),并不向服務(wù)器最終返回三次握手所必須的ACK包,這種情況下服務(wù)器對于未完成連接隊(duì)列中的每個(gè)連接表項(xiàng)都設(shè)置一個(gè)超時(shí)定時(shí)器,一旦超時(shí)時(shí)間到,則丟棄該表項(xiàng)。

但黑客并不會只發(fā)送一次這樣的SYN包,如果他源源不斷發(fā)送,每個(gè)SYN包的源IP都是隨機(jī)產(chǎn)生的一些虛假地址(導(dǎo)致受害者不可能再進(jìn)行IP過濾或追查攻擊源),受害者的目標(biāo)端口未完成隊(duì)列就不斷壯大,因?yàn)槌瑫r(shí)丟棄總沒有新接收的速度快,所以直到該隊(duì)列滿為止,正常的連接請求將不會得到響應(yīng)。?攻擊的簡單檢測通過簡單的netstat命令,如果發(fā)現(xiàn)系統(tǒng)中存在大量的SYN_RECEIVED的網(wǎng)絡(luò)連接,就基本上可以斷定系統(tǒng)正在遭受SYNFlood攻擊。

netstat–n–ptcp?攻擊的防御防御起來不是很容易:一是因?yàn)檫@種攻擊使用的是正常TCP網(wǎng)絡(luò)服務(wù)都不會禁止的SYN類型數(shù)據(jù)包,而且因?yàn)閿?shù)據(jù)包很小,黑客可以在短時(shí)間內(nèi)產(chǎn)生大量這樣的數(shù)據(jù)包;二是黑客根本不需要得到目標(biāo)主機(jī)的返回信息,所以他可以偽造數(shù)據(jù)包的源IP和源端口,讓目標(biāo)主機(jī)無法追查攻擊來源,也很難對隨機(jī)產(chǎn)生的源IP和源端口進(jìn)行過濾。

有兩類可以防止SYNFlood攻擊的方法。主機(jī)系統(tǒng)中可以采取下列措施(重新設(shè)置TCP/IP協(xié)議棧的參數(shù)):

?增加TCP監(jiān)聽套接字未完成連接隊(duì)列的最大長度;

?減少未完成隊(duì)列的超時(shí)等待時(shí)間;

?使用諸如SYNCookies這樣的特殊措施。這種方法是Linux內(nèi)核特有的機(jī)制,服務(wù)器并不是一收到SYN包就建立一個(gè)半連接(即在未完成隊(duì)列中添加一個(gè)表項(xiàng)),而是先向SYN請求的發(fā)送方返回一個(gè)附帶Cookies的SYN/ACK包,如果收到客戶端的響應(yīng),才真正建立連接。

這種方法可以一定程度上抵御攻擊,但不是根本的辦法。因?yàn)橄到y(tǒng)資源有限,增加了連接隊(duì)列長度,消耗的內(nèi)存資源就更多。黑客發(fā)動攻擊的效率總比系統(tǒng)資源的調(diào)整更高一些,如果黑客發(fā)動DDoS攻擊,系統(tǒng)還是無法抵御。上述這些方法并不能從本質(zhì)上提高抵御SYNFlood攻擊的能力。

現(xiàn)在成熟的防火墻產(chǎn)品,基本上都有針對SYNFlood攻擊的防御措施,其技術(shù)實(shí)現(xiàn)可以分為3類:?SYNThreshold

設(shè)定一個(gè)未完成連接隊(duì)列的限定值,如果超過了該值,則丟棄SYN數(shù)據(jù)報(bào)文,最有代表性的就是Cisco的PIX防火墻。

?SYNDefender

防火墻在轉(zhuǎn)發(fā)客戶端到服務(wù)器的SYN請求并收到服務(wù)器返回的SYN/ACK之后,立刻向服務(wù)器返回ACK,而不是等待客戶端的最后應(yīng)答。最有代表性的就是CheckPoint的Firewall-1防火墻。它比SYNThreshold更有效,但也存在自身的缺陷:一方面,可能造成服務(wù)器的資源浪費(fèi);另一方面,防火墻本身成了可被利用的一個(gè)潛在的弱點(diǎn)。?SYNProxy

是對SYNDefender的一種改進(jìn)機(jī)制。防火墻在收到客戶端的SYN請求后,不會立即轉(zhuǎn)發(fā)給服務(wù)器,它會在代表服務(wù)器建立了完整的TCP連接后,才向服務(wù)器轉(zhuǎn)發(fā)真正的連接請求。最有代表性的就是Netscreen防火墻和天網(wǎng)防火墻。

采用SYNDefender機(jī)制的防火墻,能夠抵御每秒發(fā)送500個(gè)以內(nèi)SYN包的SYNFlood攻擊,而采用SYNProxy機(jī)制的防火墻,能夠有效抵御每秒發(fā)送20000個(gè)以內(nèi)SYN包的SYNFlood攻擊。通常情況下,即便黑客占用了所有ISDN的有限帶寬,發(fā)送SYN包的頻率也不會超過200個(gè)/秒,所以利用防火墻來防御SYNFlood攻擊,一般情況下都是比較有效的,但如果黑客采用大規(guī)模的DDoS攻擊,恐怕任何防御措施都不能完全有效。7.LandAttack

如果向Windows95的某開放端口(例如139端口)發(fā)送一個(gè)包含SYN標(biāo)識的特殊的TCP數(shù)據(jù)包,將導(dǎo)致目標(biāo)系統(tǒng)立即崩潰。做法很簡單,就是設(shè)置該SYN包的源IP為目標(biāo)主機(jī)的IP,源端口為目標(biāo)主機(jī)受攻擊的端口。(WindowsNT4.0+SP3、Windows3.11、某些FreeBSD系統(tǒng)、CISCOIOS11.3之前的版本)因試圖與自己連接而陷入死循環(huán)。該方法如今也比較陳舊,對于WinowsNT4.0來說,只要安裝了SP4就可以防止這種攻擊。

Land攻擊利用TCP初始連接建立期間的應(yīng)答方式存在的問題,攻擊的關(guān)鍵在于服務(wù)器端和客戶端有各自的序列號。當(dāng)目標(biāo)機(jī)器把包發(fā)送給自己,目標(biāo)機(jī)器等待自己的序列號(如5000)得到應(yīng)答,而這個(gè)應(yīng)答卻是它自己剛剛才發(fā)送出去的,而且其應(yīng)答序列號是攻擊者的序列號(如1002)。由于這個(gè)序列號同目標(biāo)機(jī)器所期望的序列號相差太大(不在接收窗口范圍內(nèi)),TCP認(rèn)為這個(gè)包有問題,被丟棄。這樣目標(biāo)機(jī)器再次重發(fā)數(shù)據(jù)包,將導(dǎo)致無限循環(huán):目標(biāo)機(jī)器一直給自己發(fā)送錯(cuò)誤應(yīng)答,并希望能夠看到具有正確序列號的應(yīng)答返回。8.SmurfAttack

黑客以受害主機(jī)的名義向某個(gè)網(wǎng)絡(luò)地址發(fā)送ICMPecho請求廣播,收到該ICMPecho請求的網(wǎng)絡(luò)中的所有主機(jī)都會向“無辜”的受害主機(jī)返回ICMPecho響應(yīng),使得受害主機(jī)應(yīng)接不暇,導(dǎo)致其對正常的網(wǎng)絡(luò)應(yīng)用拒絕服務(wù)。之所以Smurf攻擊屢屢奏效,并非受害主機(jī)的OS或網(wǎng)絡(luò)協(xié)議有什么問題,而在于這種攻擊的“借力”效果。黑客可以利用自己有限的帶寬,同時(shí)找到一個(gè)高帶寬的網(wǎng)絡(luò)作為“反彈攻擊跳板”,轉(zhuǎn)而攻擊一個(gè)有限帶寬的受害系統(tǒng)。

要防御Smurf攻擊,通常需要從3方面來考慮:1)為了防止本網(wǎng)絡(luò)內(nèi)某個(gè)主機(jī)發(fā)動Smurf攻擊,在網(wǎng)絡(luò)的邊界網(wǎng)關(guān)(路由器)就應(yīng)該設(shè)置過濾規(guī)則,禁止源地址非本網(wǎng)絡(luò)IP的數(shù)據(jù)包出去。2)設(shè)置防火墻禁止可疑的ICMP數(shù)據(jù)包進(jìn)入本網(wǎng)絡(luò)(例如,某些狀態(tài)監(jiān)測防火墻,可以對非本地請求卻返回給本地的ICMPecho響應(yīng)進(jìn)行過濾),或者干脆屏蔽ICMP。3)設(shè)置路由器,使其禁止對定向廣播的支持(防止成為跳板)。9.FraggleAttack

與Smurf類似,所有偽造了源IP地址的UDP包,都被發(fā)送到一個(gè)支持定向廣播的網(wǎng)絡(luò),其目標(biāo)端口為UDP7,也就是Echo服務(wù)的端口,如果該網(wǎng)絡(luò)的一些主機(jī)開啟了Echo服務(wù)(對于沒有開啟Echo服務(wù)的主機(jī),因?yàn)槭盏椒祷氐腎CMP不可達(dá)信息,也會造成大量的網(wǎng)絡(luò)流量),依據(jù)Echo服務(wù)的特性,它們都會向源主機(jī)回送接收到的數(shù)據(jù),最終效果與返回ICMPecho響應(yīng)是相同的,會導(dǎo)致受害主機(jī)停止服務(wù)。拒絕服務(wù)攻擊并不是一個(gè)組織一個(gè)網(wǎng)絡(luò)就可以解決的問題,它需要的是整個(gè)網(wǎng)絡(luò)環(huán)境的同步改善。10.垃圾郵件攻擊(郵件炸彈)

基于標(biāo)準(zhǔn)SMTP協(xié)議的郵件服務(wù)器,在客戶端請求發(fā)送郵件時(shí),是不對其身份進(jìn)行驗(yàn)證的。另外,許多郵件服務(wù)器都允許郵件中繼(對任何接收者地址非本地的郵件提供轉(zhuǎn)發(fā)服務(wù)),這兩點(diǎn)給郵件炸彈的傳播帶來了方便。

黑客利用某個(gè)“無辜”的郵件服務(wù)器,持續(xù)不斷地向攻擊目標(biāo)(郵件地址)發(fā)送垃圾郵件,很可能“撐破”用戶的信箱,導(dǎo)致正常郵件的丟失。這種方法簡單但很“奏效”,一方面它導(dǎo)致用戶正常通信的中斷,另一方面,也會給垃圾郵件“策源地”的郵件服務(wù)器帶來沉重負(fù)擔(dān)。如果該服務(wù)器被受害的郵件服務(wù)器列入過濾名單,損失就更為慘重。5.2.2分布式拒絕服務(wù)攻擊1.簡介DDoS攻擊是DoS攻擊的一種延伸,它之所以威力巨大,是因?yàn)槠鋮f(xié)同攻擊的能力。黑客使用DDoS工具,往往可以同時(shí)控制成百上千臺攻擊源,向某個(gè)單點(diǎn)目標(biāo)發(fā)動攻擊,它還可以將各種傳統(tǒng)的DoS攻擊手段結(jié)合使用。對DDoS的防御,至今沒有一個(gè)很好的解決方法。

2.DDoS攻擊模型有4種不同的角色:?黑客(Intruder):黑客親自操作的主機(jī)用戶接口(Netcat或Telnet),其作用是向Master發(fā)送各種命令,包括攻擊指令等。?主控端(Master):監(jiān)聽來自Intruder的命令,并向網(wǎng)絡(luò)上分布的各個(gè)Daemon發(fā)起攻擊命令,使其真正開始攻擊。?守護(hù)進(jìn)程端(Daemon):接收和響應(yīng)來自Master的攻擊命令,是真正實(shí)施攻擊的前鋒。?受害者(Victim):即被攻擊的目標(biāo)主機(jī)。4.DDoS攻擊對策最基本的攻擊對策,還是要解決好OS、協(xié)議棧,以及各種網(wǎng)絡(luò)服務(wù)和應(yīng)用系統(tǒng)的漏洞問題。及時(shí)安裝補(bǔ)丁程序,進(jìn)行合理配置,對網(wǎng)絡(luò)流量以及通信過程進(jìn)行監(jiān)視(IDS),設(shè)置嚴(yán)格的過濾規(guī)則(路由器和防火墻)。廣泛的合作和協(xié)同一致。為了及時(shí)發(fā)現(xiàn)自己的系統(tǒng)是否被種植了DDoS工具,使用find_ddos系列工具,這些工具針對不同種類的系統(tǒng)類型,可以幫助管理員發(fā)現(xiàn)多種常見的DDoS工具(包括其Master端以及Daemon端)。5.2.4網(wǎng)絡(luò)欺騙類型的攻擊1.IP欺騙攻擊(1)IP欺騙原理

IP欺騙就是偽造數(shù)據(jù)包源IP地址的攻擊,基于兩個(gè)前提:一是目前的TCP/IP網(wǎng)絡(luò)在路由數(shù)據(jù)包時(shí),不對源IP地址進(jìn)行判斷,這就給偽造IP包創(chuàng)造了條件;二是兩臺主機(jī)之間,存在著基于IP地址的認(rèn)證授權(quán)訪問,就可以進(jìn)行“會話劫持”。

一:UNIX平臺的主機(jī)對外提供某些網(wǎng)絡(luò)服務(wù),都是基于簡單的IP地址來進(jìn)行認(rèn)證的,最有代表性的就是rlogin、rsh、rcp等。當(dāng)客戶端要求建立這些服務(wù)連接時(shí),如果服務(wù)器主機(jī)上設(shè)置有/etc/hosts.equiv或$HOME/.rhosts這樣的文件,往往就不需要進(jìn)行身份驗(yàn)證。正是基于這種簡單的信任關(guān)系,黑客只要知道哪臺主機(jī)是受目標(biāo)主機(jī)信任的(最好是對root用戶的信任),就可以冒充受信任主機(jī),進(jìn)行rlogin登錄,但是,對黑客來說,目標(biāo)主機(jī)作出的任何反應(yīng)他都是看不見的。1)信任和認(rèn)證是一種相反的關(guān)系,信任關(guān)系越強(qiáng),認(rèn)證的嚴(yán)格性越低。2)最初的認(rèn)證是由基于信任關(guān)系的源地址來進(jìn)行的。3)由于IP地址(以及IP頭中的大部分域)可以偽造,因此基于IP源地址的認(rèn)證是不可靠的。4)要進(jìn)行欺騙攻擊,必須要有某種信任關(guān)系存在。使用IP欺騙技術(shù)以后,攻擊過程再也不必使用任何用戶名和口令了。

IP欺騙受歡迎的另一個(gè)原因是它是其它攻擊形式(如“會話劫持”)的重要基礎(chǔ)。二:另一個(gè)技術(shù)上的難點(diǎn),在于對TCP連接的初始序列號ISN的精確猜測。如果序列號不正確,所傳輸?shù)膱?bào)文就不能被正確接收。在IP欺騙過程中,黑客只是單方面向目標(biāo)主機(jī)發(fā)送數(shù)據(jù)包(因?yàn)楹诳褪褂玫氖羌倜暗脑碔P地址),不可能收到目標(biāo)主機(jī)的會應(yīng),所以確定目標(biāo)主機(jī)的ISN就是關(guān)鍵了。在TCP報(bào)文頭部,ISN是一個(gè)32位的值,TCP協(xié)議為每一個(gè)連接選擇一個(gè)ISN,為了防止因?yàn)檠舆t、重傳等擾亂三次握手,ISN不能隨便選取。理解TCP如何分配ISN以及ISN隨時(shí)間的變化規(guī)律,對于成功的進(jìn)行IP欺騙很重要。

通常,ISN的取值每秒增加128000,如果有新的連接,每次連接ISN的值增加64000。黑客可以先與目標(biāo)主機(jī)建立正常的TCP連接,提取其ISN值,并且多次嘗試,以找到穩(wěn)定的規(guī)律,將最近一次的ISN記錄下來。此外,黑客還需要掌握到目標(biāo)主機(jī)的往返時(shí)間(RTT),這樣的話,所估算的目標(biāo)主機(jī)的ISN就是最近一次的記錄加上128000*(RTT/2)。當(dāng)然,如果在黑客兩次反應(yīng)之間,目標(biāo)主機(jī)又建立了新的連接,所估算的ISN還要加上64000??梢姴聹yISN并不容易。

猜測的序列號有出入三:黑客發(fā)送給目標(biāo)主機(jī)的數(shù)據(jù)包,目標(biāo)主機(jī)的回應(yīng)都返回給受信任的主機(jī)。正常情況下,受信任主機(jī)會立刻返回給目標(biāo)主機(jī)RST報(bào)文而終止連接。所以還有一個(gè)先決條件,就是不能讓被冒充的主機(jī)對外界產(chǎn)生任何響應(yīng)。如果被冒充的主機(jī)處于關(guān)機(jī)狀態(tài),就不必理會;否則黑客就要想辦法使其停止響應(yīng),最常用的就是SYNFlooding等拒絕服務(wù)攻擊。(2)IP欺騙攻擊過程(3)IP欺騙攻擊對策原理較簡單,但實(shí)施起來難度相當(dāng)大。而且現(xiàn)在大多數(shù)OS使用較強(qiáng)壯的隨機(jī)序列號生成器,要準(zhǔn)確猜測TCP連接的ISN幾乎不可能。

?在邊界路由器上進(jìn)行源地址過濾,也就是說,對進(jìn)入本網(wǎng)絡(luò)的IP包,要檢查其源IP地址,禁止外來的卻使用本地IP的數(shù)據(jù)包進(jìn)入,這也是大多數(shù)路由器的缺省配置。

?禁止r-類型的服務(wù),用SSH代替Telnet、rlogin這樣的不安全的網(wǎng)絡(luò)服務(wù)。

?如果是Linux系統(tǒng),可以借助路由模塊的源地址過濾功能防止IP欺騙。

?TCP的序列號不是隨機(jī)選擇的或者隨機(jī)增加的。Bellovin描述了一種彌補(bǔ)TCP不足的方法,就是分割序列號空間,每一個(gè)連接都將有自己獨(dú)立的序列號空間。2.DNS欺騙攻擊(1)DNS欺騙攻擊原理針對DNS服務(wù)器向另一個(gè)DNS服務(wù)器發(fā)送某個(gè)解析請求,黑客冒充被請求方,向請求方返回一個(gè)被篡改了的應(yīng)答。

DNS欺騙能夠成功,首先一個(gè)條件就是DNS服務(wù)器會在本地Cache中進(jìn)行緩存(有可能是被黑客篡改了的信息),以后向該DNS服務(wù)器發(fā)送的對同一域名的解析請求,得到的結(jié)果都將被篡改(在該條目被緩存的生存期內(nèi))。

其實(shí)這樣的欺騙并不局限于正常的域名解析,反向域名解析(PTR)和郵件交換解析(MX),都可能被欺騙利用,可能導(dǎo)致的結(jié)果是:利用域名進(jìn)行訪問認(rèn)證的服務(wù)將允許黑客登錄,而郵件中繼的過程,也可能因?yàn)镸X欺騙而將郵件投遞到了偽造的郵件服務(wù)器中。有了進(jìn)行欺騙的可能,問題焦點(diǎn)是怎樣偽造DNS應(yīng)答信息。

一:黑客可以控制本地的域名服務(wù)器,在其數(shù)據(jù)庫中增加一個(gè)附加條目,將攻擊目標(biāo)的域名指向黑客自己的IP。......最后將在本地域名服務(wù)器上偽造的該條目“注射”到攻擊目標(biāo)的域名服務(wù)器的Cache中。

二:更為現(xiàn)實(shí)的情況,就是黑客并不能控制任何DNS服務(wù)器,但它可以控制該服務(wù)器所在網(wǎng)絡(luò)的某臺主機(jī),并可以通過Sniffer監(jiān)聽所有該網(wǎng)絡(luò)中的通信情況。這時(shí)候,黑客要對遠(yuǎn)程的DNS服務(wù)器進(jìn)行欺騙攻擊,所采用的手段很象IP欺騙攻擊:首先黑客要冒充某個(gè)域名服務(wù)器的IP地址;其次黑客要能預(yù)測某個(gè)目標(biāo)域名服務(wù)器所發(fā)送DNS數(shù)據(jù)包的ID號。DNS服務(wù)器之間同時(shí)可能會進(jìn)行多個(gè)解析過程,而不同的過程使用的是相同的端口號(53),是通過DNS報(bào)文中的ID號來彼此區(qū)分的。不同的解析會話,采用不同的ID號。如果黑客所偽造的DNS應(yīng)答包中含有正確的ID號,并且搶在被假冒DNS服務(wù)器之前向目標(biāo)DNS服務(wù)器返回偽造信息,攻擊就是成功的。而多數(shù)DNS服務(wù)器采用一種有規(guī)律的ID生成機(jī)制,對于每次發(fā)送的域名解析請求,DNS服務(wù)器都會將數(shù)據(jù)包中的ID加1。如此一來,黑客如果可以在DNS服務(wù)器的網(wǎng)絡(luò)中進(jìn)行嗅探,他只要向攻擊目標(biāo)DNS服務(wù)器發(fā)送一個(gè)對本地某域名的解析請求,通過嗅探得到的來自目標(biāo)DNS服務(wù)器的請求數(shù)據(jù)包(因?yàn)檫h(yuǎn)程DNS服務(wù)器肯定會轉(zhuǎn)而請求本地的DNS服務(wù)器),黑客就可以得到想要的ID號了。知道了ID號和ID增長的規(guī)律,以下的過程類似于IP欺騙攻擊。(2)DNS欺騙攻擊過程(3)DNS欺騙攻擊對策現(xiàn)在大多數(shù)DNS服務(wù)器軟件,都有防御DNS欺騙的相應(yīng)措施,不過在配置DNS服務(wù)器時(shí)還應(yīng)該注意:?使用最新版本的DNS服務(wù)器軟件(BIND),并及時(shí)安裝補(bǔ)丁。

?限制區(qū)域傳輸?shù)姆秶?/p>

?限制動態(tài)更新。

?采用分層的DNS體系結(jié)構(gòu)。

DNSExpert是DNS服務(wù)器分析工具,運(yùn)行于Windows系統(tǒng),可以對各種類型和版本的DNS服務(wù)器進(jìn)行全面分析,掃描其安全問題,并給出直接的解決方法。5.2.5會話劫持攻擊1.會話劫持原理所謂會話劫持(SessionHijack),就是在一次正常的通信過程中,黑客作為第三方參與到其中,或者是在數(shù)據(jù)流里注射額外的信息,或者是將雙方的通信模式暗中改變,即從直接聯(lián)系變成交由黑客中轉(zhuǎn)。

一、中間人攻擊(ManInTheMiddle,MITM)

通過ARP欺騙進(jìn)行的MITM攻擊,要求黑客必須置身于通信雙方任意一方的網(wǎng)絡(luò)中(共享式/交換式),他通過構(gòu)造假的ARP響應(yīng)包,污染受害主機(jī)的ARP緩沖區(qū),使受害主機(jī)彼此之間發(fā)送的數(shù)據(jù)包先到達(dá)黑客的主機(jī)(但I(xiàn)P地址正確),再由黑客重新構(gòu)造轉(zhuǎn)發(fā)(改變MAC地址)。

對于DNS欺騙,因?yàn)槭腔贗P地址的,所以在廣域網(wǎng)內(nèi)也可以操作進(jìn)行,例如Web服務(wù)器重定向。MITM攻擊相當(dāng)于在通信雙方之間加入了一個(gè)透明的代理,而且這種攻擊方式不僅對常規(guī)的通信協(xié)議有效(明文傳輸),對于配置不當(dāng)?shù)募用軈f(xié)議也有利用的可能,如SSH和SSL協(xié)議。

二、注射式會話劫持不需要改變通信雙方數(shù)據(jù)的流向,只是在正常的數(shù)據(jù)流中插入黑客填充的內(nèi)容。涉及到兩種技術(shù):IP欺騙和序列號判斷(僅TCP通信需要)。黑客首先要能夠?qū)Ρ还魧ο蟮木W(wǎng)絡(luò)通信進(jìn)行監(jiān)聽,其次,他要等待一次TCP會話連接完全建立之后(成功地進(jìn)行了身份認(rèn)證)。他沒有必要猜測序列號,因?yàn)樗梢愿鶕?jù)嗅探得到的數(shù)據(jù)來構(gòu)造正確的序列號。

有一個(gè)致命的弱點(diǎn),就是可能導(dǎo)致ACK風(fēng)暴(Storm),但如果源主機(jī)是Linux系統(tǒng),就不會導(dǎo)致ACK風(fēng)暴。黑客的注射數(shù)據(jù)會導(dǎo)致雙方通信的不同步,并最終導(dǎo)致會話失敗,當(dāng)然黑客只要略施技巧就能恢復(fù)原有會話通信的同步。

MITM和注射式會話劫持并沒有清晰區(qū)別,兩種機(jī)制往往緊密結(jié)合在一起。

2.會話劫持工具及實(shí)例

Hunt可以在共享式/交換式網(wǎng)絡(luò)中工作,在混雜模式或ARP欺騙條件下進(jìn)行嗅探,可進(jìn)行注射式會話劫持或MITM。也可以中斷指定的連接會話,讓紊亂的會話恢復(fù)同步。Juggernaut基于傳統(tǒng)的Sniffer技術(shù),可以監(jiān)視網(wǎng)絡(luò)中所有的TCP會話,特性在于還可以主動劫持會話。由于攻擊者可以看到序列號,有必要的話,它可以把偽造的數(shù)據(jù)包放到TCP流中。這將允許攻擊者以被欺騙的客戶具有的特權(quán)來訪問服務(wù)器。攻擊者同樣也可以查看所有同攻擊相關(guān)的輸出,而且不把它們送往客戶機(jī),這樣的攻擊是透明的。在這種情況下,攻擊者甚至不需要知道訪問機(jī)器所需的口令。攻擊者只需簡單地等待用戶登錄到服務(wù)器,然后劫持會話數(shù)據(jù)流即可。

TCP會話劫持能成功的前提首先是TCP建立連接的三次握手過程中沒有任何的認(rèn)證機(jī)制。TCP假定只要接收的數(shù)據(jù)包包含正確的序列號就認(rèn)為數(shù)據(jù)是可接受的。一旦連接建立,服務(wù)器將無法確定進(jìn)入的數(shù)據(jù)包是確實(shí)來自真實(shí)的客戶機(jī)器而不是某一臺假冒的機(jī)器。

即使攻擊者無法進(jìn)行竊聽,可以通過IP地址欺騙方法來猜測服務(wù)器的序列號完成會話劫持。當(dāng)然有可能猜錯(cuò)序列號,真正的客戶和服務(wù)器會對這些數(shù)據(jù)包進(jìn)行應(yīng)答,并要求重發(fā)。有可能產(chǎn)生大量的要求對方重發(fā)的TCPACK應(yīng)答包,形成TCPACK風(fēng)暴。攻擊者就可能不能完成會話劫持,并可能被發(fā)現(xiàn)。5.2.6緩沖區(qū)溢出攻擊1.緩沖區(qū)溢出概述十多年來應(yīng)用非常廣泛的一種攻擊手段,近年來,許多著名的安全漏洞都與緩沖區(qū)溢出有關(guān)。所謂緩沖區(qū)溢出,就是由于填充數(shù)據(jù)越界而導(dǎo)致程序原有流程的改變,黑客借此精心構(gòu)造填充數(shù)據(jù),讓程序轉(zhuǎn)而執(zhí)行特殊的代碼,最終獲得系統(tǒng)的控制權(quán)。

棧溢出(格式化字符串溢出)按填充數(shù)據(jù)溢出的緩沖區(qū)位置:堆溢出

BSS溢出按黑客重定向程序流程的方式:直接植入黑客自己代碼;跳轉(zhuǎn)執(zhí)行系統(tǒng)中已經(jīng)加載的代碼。按利用的外部條件的不同:本地緩沖區(qū)溢出;遠(yuǎn)程緩沖區(qū)溢出。(1)堆棧概念基礎(chǔ)與棧幀相關(guān)的3個(gè)寄存器:SP(ESP):棧頂指針,它隨著數(shù)據(jù)入棧出棧而發(fā)生變化;BP(EBP):基地址指針,它用于標(biāo)識棧中一個(gè)相對穩(wěn)定的位置,通過BP,可以方便地引用函數(shù)參數(shù)以及局部變量;IP(EIP):函數(shù)調(diào)用返回后下一個(gè)執(zhí)行語句的地址。

在函數(shù)調(diào)用之前,堆棧中首先被壓入所傳遞的參數(shù),然后是返回地址(當(dāng)前IP的值);進(jìn)入函數(shù)后,由所調(diào)用的函數(shù)負(fù)責(zé),將BP值入棧(并將SP的值賦給BP,作為新的棧幀基地址),接著為函數(shù)中的局部變量留出空間。函數(shù)執(zhí)行完畢,在返回之前,要將局部變量所占用的棧空間清除,然后彈出保存的BP值(即恢復(fù)前一個(gè)棧幀的基地址),最后,利用彈出的IP值,程序執(zhí)行又恢復(fù)到原有的流程。

棧是從內(nèi)存高地址向內(nèi)存低地址增長的,在函數(shù)的棧幀中,很重要的就是給函數(shù)局部變量留出的空間,通常函數(shù)中會通過類似“charbuffer[20]”之類的C語言語句定義一個(gè)緩沖區(qū),如果要向該緩沖區(qū)中填充數(shù)據(jù),其增長方向?qū)⑹怯傻偷刂返礁叩刂返摹?/p>

這樣一來,就存在問題,如果給緩沖區(qū)填充的數(shù)據(jù)超過了預(yù)先分配給它的空間大小,即發(fā)生這種緩沖區(qū)“溢出”,很有可能覆蓋掉EBP甚至RET(返回地址),這也正是緩沖區(qū)溢出攻擊的“奧秘”所在。黑客只要特殊構(gòu)造傳遞給程序的參數(shù)字串,使其緩沖區(qū)溢出,用黑客自己的代碼覆蓋原有的返回地址,就可以實(shí)現(xiàn)改變程序流程的目的,讓進(jìn)程轉(zhuǎn)而執(zhí)行黑客特意設(shè)定的代碼。(2)關(guān)于SUID/SGID

一般來講,用戶執(zhí)行某個(gè)程序,系統(tǒng)中相應(yīng)的進(jìn)程將以該用戶的身份運(yùn)行,繼而就要遵循對該用戶的權(quán)限設(shè)置,就算能夠讓進(jìn)程轉(zhuǎn)向運(yùn)行任意設(shè)定的代碼,還是無法突破這種限制,因?yàn)闊o論怎樣,進(jìn)程始終是以該用戶身份運(yùn)行的。

在UNIX系統(tǒng)中,程序在沒有運(yùn)行前,作為一個(gè)靜態(tài)的文件,屬于某個(gè)創(chuàng)建它的用戶,因此也就具有屬主的UID和GID。為了規(guī)定不同用戶的訪問權(quán)限,還可以設(shè)定文件的存取模式。存取模式中除了3個(gè)表示不同用戶權(quán)限的數(shù)字外,還有一個(gè)可設(shè)置文件特性的數(shù)字,它也是八進(jìn)制數(shù),其中2表示設(shè)定了SGID,4表示設(shè)定了SUID,而SGID和SUID的特性正是緩沖區(qū)溢出攻擊所要利用的。

一旦程序開始執(zhí)行,就變成了動態(tài)的進(jìn)程,系統(tǒng)會給該進(jìn)程分配進(jìn)程標(biāo)識號(PID)。此外進(jìn)程還具有兩組特殊的標(biāo)識號,一組是真實(shí)(Real)UID和GID,另一組是有效(Effective)UID和GID。真實(shí)UID和GID用于標(biāo)識運(yùn)行該進(jìn)程的用戶,而有效UID和GID則是真正用于存取權(quán)限判斷的標(biāo)識號。

一般來講,如果該進(jìn)程對應(yīng)的程序文件并沒有設(shè)置SUID或SGID,進(jìn)程的真實(shí)UID與其有效UID就是相同的,都等于運(yùn)行該程序的用戶的UID,組標(biāo)識也是如此。但是如果程序設(shè)置了SUID,那對應(yīng)進(jìn)程的有效UID就不是運(yùn)行該進(jìn)程的用戶了,而是該程序本身屬主的UID。即設(shè)置了SUID位的X程序,無論誰運(yùn)行它,都仿佛是X的屬主自己運(yùn)行。

如果某個(gè)設(shè)置了SUID位的程序?qū)儆趓oot用戶所有,那無論誰執(zhí)行它,都相當(dāng)于用root身份在運(yùn)行。進(jìn)而可以想到,如果該程序具有緩沖區(qū)溢出漏洞,黑客就可以利用這一漏洞,以root的權(quán)限來運(yùn)行自己設(shè)定的代碼了。2.UNIX中的棧溢出攻擊voidfunction(inta,intb,intc){charbuffer1[5];charbuffer2[10];int*ret=buffer1+12;(*ret)+=8;}voidmain(){intx=0;function(1,2,3);x=1;printf{“%d\n”,x);}在這個(gè)程序中,“ret=buffer1+12”語句用于讀取棧中存放的function函數(shù)的返回地址,而“(*ret)+=8”語句則是將該返回地址加8并重新賦值。function函數(shù)返回時(shí),將越過其下一條語句“x=1”,轉(zhuǎn)而直接執(zhí)行“printf(“%d\n”,x)”語句,最終x的值將是0,而不是1。這是一個(gè)典型的修改函數(shù)返回地址的例子。通常存在緩沖區(qū)溢出漏洞的程序又是怎樣“無意中”修改了函數(shù)返回地址的呢?

voidfunction(char*str){voidmain(){charbuffer[16];charlarge_string[256];strcpy(buffer,str);inti;}for(i=0;i<255;i++)large_string[i]=‘A’;function(large_string);}

buffer后面的棧內(nèi)容將被該字串覆蓋掉(包括ebp和ret)。因?yàn)槲覀兲畛涞氖恰瓵’,最終函數(shù)返回地址將變成“0x41414141”,如果執(zhí)行這個(gè)程序,由于該地址不在程序有效虛擬內(nèi)存范圍內(nèi),系統(tǒng)會報(bào)告一個(gè)“SegmentationViolation”錯(cuò)誤。

gets、strcat、spintf、vsprintf、scanf都能導(dǎo)致緩沖區(qū)溢出。通常利用此類漏洞進(jìn)行攻擊時(shí),這種植入的字串都是通過命令行參數(shù)傳遞給程序的主函數(shù)的,再傳給被調(diào)函數(shù)的。

通常植入緩沖區(qū)的代碼執(zhí)行的是一個(gè)Shell,如果緩沖區(qū)溢出的程序本身是SUID的,其屬主是root,那黑客得到的Shell也就具有root權(quán)限了。鑒于代碼的目的性非常明確,人們就將這段代碼叫做“Shellcode”(不同的系統(tǒng),其Shellcode也各不相同)。下面是一個(gè)典型的Shellcode源程序,使用execve函數(shù)來執(zhí)行/bin/sh命令,也就是得到一個(gè)Shell。#include<stdio.h>voidmain(){char*name[2];name[0]=“/bin/sh”;name[1]=NULL;execve(name[0],name,NULL);}

但是,要將Shellcode植入緩沖區(qū)中,它必須作為可直接執(zhí)行的機(jī)器代碼才行,所以要先將該程序編譯成匯編代碼,然后經(jīng)過適當(dāng)?shù)恼{(diào)整,最后得到適合系統(tǒng)類型的機(jī)器代碼。

有了這段代碼,黑客就可以設(shè)計(jì)自己的攻擊程序了。在該程序中,他要構(gòu)造一個(gè)特殊的字串,該字串中包含Shellcode,也包含Shellcode的地址(用該地址覆蓋函數(shù)的返回地址)。然后,攻擊程序調(diào)用execve之類的函數(shù)來執(zhí)行有緩沖區(qū)溢出漏洞的命令程序,并將構(gòu)造好的字串作為參數(shù)傳遞給命令程序。這樣的程序,通常被稱為exploit程序。

那么,Shellcode的地址又是怎樣確定的呢?因?yàn)镾hellcode是被植入到棧緩沖區(qū)的,所以,定位Shellcode,也就是定位內(nèi)存中棧的地址了。下面的程序說明怎樣將包含地址和Shellcode的字串植入緩沖區(qū)的。charshellcode[]=“\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b”“\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd”“\x80\xe8\xdc\xff\xff\xff/bin/sh”;

charlarge_string[128];voidmain(){charbuffer[96];inti;long*long_ptr=(long*)large_string;

for(i=0;i<32;i++)*(long_ptr+i)=(int)buffer;for(i=0;i<strlen(shellcode);i++)large_string[i]=shellcode[i];strcpy(buffer,large_string);}

首先,在large_string中填充buffer的地址;然后,將Shellcode放到large_string的最前面;最后,將這個(gè)超長的字串拷貝到狹小的緩沖區(qū)中。其結(jié)果是,main函數(shù)的正常返回地址被buffer的地址所取代,而buffer開始處,正好是Shellcode,main函數(shù)不能正常退出,strcpy執(zhí)行之后將會轉(zhuǎn)而執(zhí)行Shellcode。當(dāng)緩沖區(qū)空間很小時(shí)(容納

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論