TCP三次握手及會(huì)話劫持原理與實(shí)例.doc_第1頁(yè)
TCP三次握手及會(huì)話劫持原理與實(shí)例.doc_第2頁(yè)
TCP三次握手及會(huì)話劫持原理與實(shí)例.doc_第3頁(yè)
TCP三次握手及會(huì)話劫持原理與實(shí)例.doc_第4頁(yè)
TCP三次握手及會(huì)話劫持原理與實(shí)例.doc_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

TCP三次握手及會(huì)話劫持原理與實(shí)例首先詳細(xì)了解一下TCP三次握手的過(guò)程三次握手Three-way Handshake 一個(gè)虛擬連接的建立是通過(guò)三次握手來(lái)實(shí)現(xiàn)的 1. (B) - SYN - (A) 假如服務(wù)器A和客戶機(jī)B通訊. 當(dāng)A要和B通信時(shí),B首先向A發(fā)一個(gè)SYN (Synchronize) 標(biāo)記的包,告訴A請(qǐng)求建立連接. 注意: 一個(gè) SYN包就是僅SYN標(biāo)記設(shè)為1的TCP包(參見TCP包頭Resources). 認(rèn)識(shí)到這點(diǎn)很重要,只有當(dāng)A受到B發(fā)來(lái)的SYN包,才可建立連接,除此之外別無(wú)他法。因此,如果你的防火墻丟棄所有的發(fā)往外網(wǎng)接口的SYN包,那么你將不 能讓外部任何主機(jī)主動(dòng)建立連接。 2. (B) - SYN/ACK ACK - (A) B收到SYN/ACK 包,B發(fā)一個(gè)確認(rèn)包(ACK),通知A連接已建立。至此,三次握手完成,一個(gè)TCP連接完成 Note: ACK包就是僅ACK 標(biāo)記設(shè)為1的TCP包. 需要注意的是當(dāng)三此握手完成、連接建立以后,TCP連接的每個(gè)包都會(huì)設(shè)置ACK位 這就是為何連接跟蹤很重要的原因了. 沒有連接跟蹤,防火墻將無(wú)法判斷收到的ACK包是否屬于一個(gè)已經(jīng)建立的連接.一般的包過(guò)濾(Ipchains)收到ACK包時(shí),會(huì)讓它通過(guò)(這絕對(duì)不是個(gè) 好主意). 而當(dāng)狀態(tài)型防火墻收到此種包時(shí),它會(huì)先在連接表中查找是否屬于哪個(gè)已建連接,否則丟棄該包 四次握手Four-way Handshake 四次握手用來(lái)關(guān)閉已建立的TCP連接 1. (B) - ACK/FIN - (A) 2. (B) - ACK - (A) 3. (B) - ACK/FIN ACK - (A) 注意: 由于TCP連接是雙向連接, 因此關(guān)閉連接需要在兩個(gè)方向上做。ACK/FIN 包(ACK 和FIN 標(biāo)記設(shè)為1)通常被認(rèn)為是FIN(終結(jié))包.然而, 由于連接還沒有關(guān)閉, FIN包總是打上ACK標(biāo)記. 沒有ACK標(biāo)記而僅有FIN標(biāo)記的包不是合法的包,并且通常被認(rèn)為是惡意的 連接復(fù)位Resetting a connection 四次握手不是關(guān)閉TCP連接的唯一方法. 有時(shí),如果主機(jī)需要盡快關(guān)閉連接(或連接超時(shí),端口或主機(jī)不可達(dá)),RST (Reset)包將被發(fā)送. 注意在,由于RST包不是TCP連接中的必須部分, 可以只發(fā)送RST包(即不帶ACK標(biāo)記). 但在正常的TCP連接中RST包可以帶ACK確認(rèn)標(biāo)記 請(qǐng)注意RST包是可以不要收到方確認(rèn)的 無(wú)效的TCP標(biāo)記Invalid TCP Flags 到目前為止,你已經(jīng)看到了 SYN, ACK, FIN, 和RST 標(biāo)記. 另外,還有PSH (Push) 和URG (Urgent)標(biāo)記. 最常見的非法組合是SYN/FIN 包. 注意:由于 SYN包是用來(lái)初始化連接的, 它不可能和 FIN和RST標(biāo)記一起出現(xiàn). 這也是一個(gè)惡意攻擊. 由于現(xiàn)在大多數(shù)防火墻已知 SYN/FIN 包, 別的一些組合,例如SYN/FIN/PSH, SYN/FIN/RST, SYN/FIN/RST/PSH。很明顯,當(dāng)網(wǎng)絡(luò)中出現(xiàn)這種包時(shí),很你的網(wǎng)絡(luò)肯定受到攻擊了。 別的已知的非法包有FIN (無(wú)ACK標(biāo)記)和NULL包。如同早先討論的,由于ACK/FIN包的出現(xiàn)是為了關(guān)閉一個(gè)TCP連接,那么正常的FIN包總是帶有 ACK 標(biāo)記。NULL包就是沒有任何TCP標(biāo)記的包(URG,ACK,PSH,RST,SYN,FIN都為0)。 到目前為止,正常的網(wǎng)絡(luò)活動(dòng)下,TCP協(xié)議棧不可能產(chǎn)生帶有上面提到的任何一種標(biāo)記組合的TCP包。當(dāng)你發(fā)現(xiàn)這些不正常的包時(shí),肯定有人對(duì)你的網(wǎng)絡(luò)不懷好意。 UDP (用戶數(shù)據(jù)包協(xié)議User Datagram Protocol)TCP是面向連接的,而UDP是非連接的協(xié)議。UDP沒有對(duì)接受進(jìn)行確認(rèn)的標(biāo)記和確認(rèn)機(jī)制。對(duì)丟包的處理是在應(yīng)用層來(lái)完成的。(or accidental arrival). 此處需要重點(diǎn)注意的事情是:在正常情況下,當(dāng)UDP包到達(dá)一個(gè)關(guān)閉的端口時(shí),會(huì)返回一個(gè)UDP復(fù)位包。由于UDP是非面向連接的, 因此沒有任何確認(rèn)信息來(lái)確認(rèn)包是否正確到達(dá)目的地。因此如果你的防火墻丟棄UDP包,它會(huì)開放所有的UDP端口(?)。 由于Internet上正常情況下一些包將被丟棄,甚至某些發(fā)往已關(guān)閉端口(非防火墻的)的UDP包將不會(huì)到達(dá)目的,它們將返回一個(gè)復(fù)位UDP包。 因?yàn)檫@個(gè)原因,UDP端口掃描總是不精確、不可靠的。 看起來(lái)大UDP包的碎片是常見的DOS (Denial of Service)攻擊的常見形式 (這里有個(gè)DOS攻擊的例子,/dos/grcdos.htm ). ICMP (網(wǎng)間控制消息協(xié)議Internet Control Message Protocol)如 同名字一樣, ICMP用來(lái)在主機(jī)/路由器之間傳遞控制信息的協(xié)議。 ICMP包可以包含診斷信息(ping, traceroute - 注意目前unix系統(tǒng)中的traceroute用UDP包而不是ICMP),錯(cuò)誤信息(網(wǎng)絡(luò)/主機(jī)/端口 不可達(dá) network/host/port unreachable), 信息(時(shí)間戳timestamp, 地址掩碼address mask request, etc.),或控制信息 (source quench, redirect, etc.) 。 你可以在/assignments/icmp-parameters中找到ICMP包的類型。 盡管ICMP通常是無(wú)害的,還是有些類型的ICMP信息需要丟棄。 Redirect (5), Alternate Host Address (6), Router Advertisement (9) 能用來(lái)轉(zhuǎn)發(fā)通訊。 Echo (8), Timestamp (13) and Address Mask Request (17) 能用來(lái)分別判斷主機(jī)是否起來(lái),本地時(shí)間 和地址掩碼。注意它們是和返回的信息類別有關(guān)的。它們自己本身是不能被利用的,但它們泄露出的信息對(duì)攻擊者是有用的。 ICMP消息有時(shí)也被用來(lái)作為DOS攻擊的一部分(例如:洪水ping flood ping,死 ping ?呵呵,有趣 ping of death)?/p 包碎片注意A Note About Packet Fragmentation 如果一個(gè)包的大小超過(guò)了TCP的最大段長(zhǎng)度MSS (Maximum Segment Size) 或MTU (Maximum Transmission Unit),能夠把此包發(fā)往目的的唯一方法是把此包分片。由于包分片是正常的,它可以被利用來(lái)做惡意的攻擊。 因?yàn)榉制陌牡谝粋€(gè)分片包含一個(gè)包頭,若沒有包分片的重組功能,包過(guò)濾器不可能檢測(cè)附加的包分片。典型的攻擊Typical attacks involve in overlapping the packet data in which packet header is 典型的攻擊Typical attacks involve in overlapping the packet data in which packet header isnormal until is it overwritten with different destination IP (or port) thereby bypassing firewall rules。包分片能作為 DOS 攻擊的一部分,它可以crash older IP stacks 或漲死CPU連接能力。 Netfilter/Iptables中的連接跟蹤代碼能自動(dòng)做分片重組。它仍有弱點(diǎn),可能受到飽和連接攻擊,可以把CPU資源耗光。握手階段: 序號(hào) 方向 seq ack 1A-B 10000 0 2 B-A 20000 10000+1=10001 3 A-B 10001 20000+1=20001解釋: 1:A向B發(fā)起連接請(qǐng)求,以一個(gè)隨機(jī)數(shù)初始化A的seq,這里假設(shè)為10000,此時(shí)ACK0 2:B收到A的連接請(qǐng)求后,也以一個(gè)隨機(jī)數(shù)初始化B的seq,這里假設(shè)為20000,意思是:你的請(qǐng)求我已收到,我這方的數(shù)據(jù)流就從這個(gè)數(shù)開始。B的ACK是A的seq加1,即10000110001 3:A收到B的回復(fù)后,它的seq是它的上個(gè)請(qǐng)求的seq加1,即10000110001,意思也是:你的回復(fù)我收到了,我這方的數(shù)據(jù)流就從這個(gè)數(shù)開始。A此時(shí)的ACK是B的seq加1,即20000+1=20001 數(shù)據(jù)傳輸階段: 序號(hào)方向 seq ack size 23 A-B 40000 70000 1514 24 B-A 70000 40000+1514-54=41460 54 25 A-B 41460 70000+54-54=70000 1514 26 B-A 70000 41460+1514-54=42920 54 解釋: 23:B接收到A發(fā)來(lái)的seq=40000,ack=70000,size=1514的數(shù)據(jù)包 24:于是B向A也發(fā)一個(gè)數(shù)據(jù)包,告訴B,你的上個(gè)包我收到了。B的seq就以它收到的數(shù)據(jù)包的ACK填充,ACK是它收到的數(shù)據(jù)包的SEQ加上數(shù)據(jù)包的大小(不包括以太網(wǎng)協(xié)議頭,IP頭,TCP頭),以證實(shí)B發(fā)過(guò)來(lái)的數(shù)據(jù)全收到了。 25:A在收到B發(fā)過(guò)來(lái)的ack為41460的數(shù)據(jù)包時(shí),一看到41460,正好是它的上個(gè)數(shù)據(jù)包的seq加上包的大小,就明白,上次發(fā)送的數(shù)據(jù)包已安全 到達(dá)。于是它再發(fā)一個(gè)數(shù)據(jù)包給B。這個(gè)正在發(fā)送的數(shù)據(jù)包的seq也以它收到的數(shù)據(jù)包的ACK填充,ACK就以它收到的數(shù)據(jù)包的seq(70000)加上包 的size(54)填充,即ack=70000+54-54(全是頭長(zhǎng),沒數(shù)據(jù)項(xiàng))。其實(shí)在握手和結(jié)束時(shí)確認(rèn)號(hào)應(yīng)該是對(duì)方序列號(hào)加1,傳輸數(shù)據(jù)時(shí)則是對(duì)方序列號(hào)加上對(duì)方攜帶應(yīng)用層數(shù)據(jù)的長(zhǎng)度.如果從以太網(wǎng)包返回來(lái)計(jì)算所加的長(zhǎng)度,就嫌走彎路了. 另外,如果對(duì)方?jīng)]有數(shù)據(jù)過(guò)來(lái),則自己的確認(rèn)號(hào)不變,序列號(hào)為上次的序列號(hào)加上本次應(yīng)用層數(shù)據(jù)發(fā)送長(zhǎng)度.通常,大家所說(shuō)的入侵,都是針對(duì)一臺(tái)主機(jī),在獲得管理員權(quán)限后,就很是得意;其實(shí),真正的入侵是占領(lǐng)整個(gè)內(nèi)部網(wǎng)絡(luò)。 針對(duì)內(nèi)部網(wǎng)絡(luò)的攻擊方法比較多,但比較有效的方法非ARP欺騙、DNS欺騙莫屬了。但是,不管使用什么技術(shù),無(wú)非都是抓取目標(biāo)的數(shù)據(jù)包,然后分析出敏感數(shù) 據(jù)。如果目標(biāo)內(nèi)部采用的是共享式網(wǎng)絡(luò)(采用HUB集線器連網(wǎng)),那只需要把網(wǎng)卡設(shè)置為“混雜模式”,掛上嗅探器(Sniffer),就能簡(jiǎn)聽到你想得到的 數(shù)據(jù)。如果是交換式網(wǎng)絡(luò)(采用交換機(jī)連網(wǎng)),這樣方法就行不通了,因?yàn)閷?duì)于嗅探器,有三種網(wǎng)絡(luò)環(huán)境是無(wú)法跨越的:“網(wǎng)橋”、“交換機(jī)”、“路由器”???惜,對(duì)于ARP欺騙,交換式網(wǎng)絡(luò)還是無(wú)能為力,如果我們借助ARP欺騙,在實(shí)現(xiàn)更高一層的“入侵手段”,從而真正的控制內(nèi)部網(wǎng)絡(luò)。這也就是本文要敘述的會(huì) 話劫持攻擊。 一、會(huì)話劫持原理1、什么是會(huì)話劫持 在現(xiàn)實(shí)生活中,比如你去市場(chǎng)買菜,在交完錢后你要求先去干一些別的事情,稍候再來(lái)拿菜;如果這個(gè)時(shí)候某個(gè)陌生人要求把菜拿走,賣菜的人會(huì)把菜給 陌生人嗎?!當(dāng)然,這只是一個(gè)比喻,但這恰恰就是會(huì)話劫持的喻意。所謂會(huì)話,就是兩臺(tái)主機(jī)之間的一次通訊。例如你Telnet到某臺(tái)主機(jī),這就是一次 Telnet會(huì)話;你瀏覽某個(gè)網(wǎng)站,這就是一次HTTP會(huì)話。而會(huì)話劫持(Session Hijack),就是結(jié)合了嗅探以及欺騙技術(shù)在內(nèi)的攻擊手段。例如,在一次正常的會(huì)話過(guò)程當(dāng)中,攻擊者作為第三方參與到其中,他可以在正常數(shù)據(jù)包中插入惡 意數(shù)據(jù),也可以在雙方的會(huì)話當(dāng)中進(jìn)行監(jiān)聽,甚至可以是代替某一方主機(jī)接管會(huì)話。我們可以把會(huì)話劫持攻擊分為兩種類型:1)中間人攻擊(Man In The Middle,簡(jiǎn)稱MITM),2)注射式攻擊(Injection);并且還可以把會(huì)話劫持攻擊分為兩種形式:1)被動(dòng)劫持,2)主動(dòng)劫持;被動(dòng)劫持實(shí) 際上就是在后臺(tái)監(jiān)視雙方會(huì)話的數(shù)據(jù)流,叢中獲得敏感數(shù)據(jù);而主動(dòng)劫持則是將會(huì)話當(dāng)中的某一臺(tái)主機(jī)“踢”下線,然后由攻擊者取代并接管會(huì)話,這種攻擊方法危害非常大,攻擊者可以做很多事情,比如“cat etc/master.passwd”(FreeBSD下的Shadow文件)。MITM攻擊簡(jiǎn)介 這也就是我們常說(shuō)的“中間人攻擊”,在網(wǎng)上討論比較多的就是SMB會(huì)話劫持,這也是一個(gè)典型的中間人攻擊。要想正確的實(shí)施中間人攻擊,攻擊者首 先需要使用ARP欺騙或DNS欺騙,將會(huì)話雙方的通訊流暗中改變,而這種改變對(duì)于會(huì)話雙方來(lái)說(shuō)是完全透明的。關(guān)于ARP欺騙黑客防線介紹的比較多,網(wǎng)上的 資料也比較多,我就不在多說(shuō)了,我只簡(jiǎn)單談?wù)凞NS欺騙。DNS(Domain Name System),即域名服務(wù)器, 我們幾乎天天都要用到。對(duì)于正常的DNS請(qǐng)求,例如在瀏覽器輸入,然后系統(tǒng)先查看Hosts文件,如果有相對(duì)應(yīng)的 IP,就使用這個(gè)IP地址訪問(wèn)網(wǎng)站(其實(shí),利用Hosts文件就可以實(shí)現(xiàn)DNS欺騙);如果沒有,才去請(qǐng)求DNS服務(wù)器;DNS服務(wù)器在接收到請(qǐng)求之后, 解析出其對(duì)應(yīng)的IP地址,返回給我本地,最后你就可以登陸到黑客防線的網(wǎng)站。而DNS欺騙則是,目標(biāo)將其DNS請(qǐng)求發(fā)送到攻擊者這里,然后攻擊者偽造 DNS響應(yīng),將正確的IP地址替換為其他IP,之后你就登陸了這個(gè)攻擊者指定的IP,而攻擊者早就在這個(gè)IP中安排好了惡意網(wǎng)頁(yè),可你卻在不知不覺中已經(jīng) 被攻擊者下了“套”DNS欺騙也可以在廣域網(wǎng)中進(jìn)行,比較常見的有“Web服務(wù)器重定向”、“郵件服務(wù)器重定向”等等。但不管是ARP欺騙,還是 DNS欺騙,中間人攻擊都改變正常的通訊流,它就相當(dāng)于會(huì)話雙方之間的一個(gè)透明代理,可以得到一切想知道的信息,甚至是利用一些有缺陷的加密協(xié)議來(lái)實(shí)現(xiàn)。注射式攻擊簡(jiǎn)介 這種方式的會(huì)話劫持比中間人攻擊實(shí)現(xiàn)起來(lái)簡(jiǎn)單一些,它不會(huì)改變會(huì)話雙方的通訊流,而是在雙方正常的通訊流插入惡意數(shù)據(jù)。在注射式攻擊中,需要實(shí) 現(xiàn)兩種技術(shù):1)IP欺騙,2)預(yù)測(cè)TCP序列號(hào)。如果是UDP協(xié)議,只需偽造IP地址,然后發(fā)送過(guò)去就可以了,因?yàn)閁DP沒有所謂的TCP三次握手,但 基于UDP的應(yīng)用協(xié)議有流控機(jī)制,所以也要做一些額外的工作。對(duì)于IP欺騙,有兩種情況需要用到:1)隱藏自己的IP地址;2)利用兩臺(tái)機(jī)器之間的信任關(guān) 系實(shí)施入侵。在Unix/Linux平臺(tái)上,可以直接使用Socket構(gòu)造IP包,在IP頭中填上虛假的IP地址,但需要root權(quán)限;在Windows 平臺(tái)上,不能使用Winsock,需要使用Winpacp(也可以使用Libnet)。例如在Linux系統(tǒng),首先打開一個(gè)Raw Socket(原始套接字),然后自己編寫IP頭及其他數(shù)據(jù)??梢詤⒖枷旅娴膶?shí)例代碼:sockfd = socket(AF_INET, SOCK_RAW, 255);setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on);struct ip *ip;struct tcphdr *tcp;struct pseudohdr pseudoheader;ip-ip_src.s_addr = xxx;pseudoheader.saddr.s_addr = ip-ip_src.s_addr;tcp-check = tcpchksum(u_short *)&pseudoheader,12+sizeof(struct tcphdr); sendto(sockfd, buf, len, 0, (const sockaddr *)addr, sizeof(struct sockaddr_in);對(duì)于基于TCP協(xié)議的注射式會(huì)話劫持,攻擊者應(yīng)先采用嗅探技術(shù)對(duì)目標(biāo)進(jìn)行簡(jiǎn)聽,然后從簡(jiǎn)聽到的信息中構(gòu)造出正確的序列號(hào),如果不這樣,你就必須先猜測(cè)目標(biāo)的ISN(初始序列號(hào)),這樣無(wú)形中對(duì)會(huì)話劫持加大了難度。那為什么要猜測(cè)會(huì)話雙方的序列號(hào)呢?請(qǐng)繼續(xù)往下看。2、TCP會(huì)話劫持本文主要敘述基于TCP協(xié)議的會(huì)話劫持。如果劫持一些不可靠的協(xié)議,那將輕而易舉,因?yàn)樗鼈儧]有提供一些認(rèn)證措施;而TCP協(xié)議被欲為是可靠的傳輸協(xié)議,所以要重點(diǎn)討論它。 根據(jù)TCP/IP中的規(guī)定,使用TCP協(xié)議進(jìn)行通訊需要提供兩段序列號(hào),TCP協(xié)議使用這兩段序列號(hào)確保連接同步以及安全通訊,系統(tǒng)的 TCP/IP協(xié)議棧依據(jù)時(shí)間或線性的產(chǎn)生這些值。在通訊過(guò)程中,雙方的序列號(hào)是相互依賴的,這也就是為什么稱TCP協(xié)議是可靠的傳輸協(xié)議(具體可參見 RFC 793)。如果攻擊者在這個(gè)時(shí)候進(jìn)行會(huì)話劫持,結(jié)果肯定是失敗,因?yàn)闀?huì)話雙方“不認(rèn)識(shí)”攻擊者,攻擊者不能提供合法的序列號(hào);所以,會(huì)話劫持的關(guān)鍵是預(yù)測(cè) 正確的序列號(hào),攻擊者可以采取嗅探技術(shù)獲得這些信息。TCP協(xié)議的序列號(hào) 現(xiàn)在來(lái)討論一下有關(guān)TCP協(xié)議的序列號(hào)的相關(guān)問(wèn)題。在每一個(gè)數(shù)據(jù)包中,都有兩段序列號(hào),它們分別為:SEQ:當(dāng)前數(shù)據(jù)包中的第一個(gè)字節(jié)的序號(hào)ACK:期望收到對(duì)方數(shù)據(jù)包中第一個(gè)字節(jié)的序號(hào)假設(shè)雙方現(xiàn)在需要進(jìn)行一次連接:S_SEQ:將要發(fā)送的下一個(gè)字節(jié)的序號(hào)S_ACK:將要接收的下一個(gè)字節(jié)的序號(hào)S_WIND:接收窗口/以上為服務(wù)器(Server)C_SEQ:將要發(fā)送的下一個(gè)字節(jié)的序號(hào)C_ACK:將要接收的下一個(gè)字節(jié)的序號(hào)C_WIND:接收窗口/以上為客戶端(Client)它們之間必須符合下面的邏輯關(guān)系,否則該數(shù)據(jù)包會(huì)被丟棄,并且返回一個(gè)ACK包(包含期望的序列號(hào))。C_ACK = C_SEQ = C_ACK + C_WINDS_ACK = S_SEQ = S_ACK + S_WIND如果不符合上邊的邏輯關(guān)系,就會(huì)引申出一個(gè)“致命弱點(diǎn)”,具體請(qǐng)接著往下看。致命弱點(diǎn) 這個(gè)致命的弱點(diǎn)就是ACK風(fēng)暴(Storm)。當(dāng)會(huì)話雙方接收到一個(gè)不期望的數(shù)據(jù)包后,就會(huì)用自己期望的序列號(hào)返回ACK包;而在另一端,這個(gè) 數(shù)據(jù)包也不是所期望的,就會(huì)再次以自己期望的序列號(hào)返回ACK包于是,就這樣來(lái)回往返,形成了惡性循環(huán),最終導(dǎo)致ACK風(fēng)暴。比較好的解決辦法是先進(jìn) 行ARP欺騙,使雙方的數(shù)據(jù)包“正?!钡陌l(fā)送到攻擊者這里,然后設(shè)置包轉(zhuǎn)發(fā),最后就可以進(jìn)行會(huì)話劫持了,而且不必?fù)?dān)心會(huì)有ACK風(fēng)暴出現(xiàn)。當(dāng)然,并不是所 有系統(tǒng)都會(huì)出現(xiàn)ACK風(fēng)暴。比如Linux系統(tǒng)的TCP/IP協(xié)議棧就與RFC中的描述略有不同。注意,ACK風(fēng)暴僅存在于注射式會(huì)話劫持。TCP會(huì)話劫持過(guò)程假設(shè)現(xiàn)在主機(jī)A和主機(jī)B進(jìn)行一次TCP會(huì)話,C為攻擊者,劫持過(guò)程如下:A向B發(fā)送一個(gè)數(shù)據(jù)包SEQ (hex): X ACK (hex): YFLAGS: -AP- Window: ZZZZ,包大小為:60B回應(yīng)A一個(gè)數(shù)據(jù)包SEQ (hex): Y ACK (hex): X+60FLAGS: -AP- Window: ZZZZ,包大小為:50A向B回應(yīng)一個(gè)數(shù)據(jù)包SEQ (hex): X+60 ACK (hex): Y+50FLAGS: -AP- Window: ZZZZ,包大小為:40B向A回應(yīng)一個(gè)數(shù)據(jù)包SEQ (hex): Y+50 ACK (hex): X+100FLAGS: -AP- Window: ZZZZ,包大小為:30攻擊者C冒充主機(jī)A給主機(jī)B發(fā)送一個(gè)數(shù)據(jù)包SEQ (hex): X+100 ACK (hex): Y+80FLAGS: -AP- Window: ZZZZ,包大小為:20B向A回應(yīng)一個(gè)數(shù)據(jù)包SEQ (hex): Y+80 ACK (hex): X+120 FLAGS: -AP- Window: ZZZZ,包大小為:10現(xiàn)在,主機(jī)B執(zhí)行了攻擊者C冒充主機(jī)A發(fā)送過(guò)來(lái)的命令,并且返回給主機(jī)A一個(gè)數(shù)據(jù)包;但是,主機(jī)A并不能識(shí)別主機(jī)B發(fā)送過(guò)來(lái)的數(shù)據(jù)包,所以主機(jī)A會(huì)以期望的序列號(hào)返回給主機(jī)B一個(gè)數(shù)據(jù)包,隨即形成ACK風(fēng)暴。如果成功的解決了ACK風(fēng)暴(例如前邊提到的ARP欺騙),就可以成功進(jìn)行會(huì)話劫持了。關(guān)于理論知識(shí)就說(shuō)到這里,下面我以具體的實(shí)例演示一次會(huì)話劫持。二、會(huì)話劫持實(shí)踐1、嘮叨幾句 可以進(jìn)行會(huì)話劫持的工具很多,比較常用有Juggernaut,它可以進(jìn)行TCP會(huì)話劫持的網(wǎng)絡(luò)Sniffer程序;TTY Watcher,而它是針對(duì)單一主機(jī)上的連接進(jìn)行會(huì)話劫持。還有如Dsniff這樣的工具包也可以實(shí)現(xiàn)會(huì)話劫持,只是看你會(huì)不會(huì)使用了。但,能將會(huì)話劫持 發(fā)揮得淋漓盡致的,還要算Hunt這個(gè)工具了。它的作者是Pavel Krauz,可以工作在Linux和一些Unix平臺(tái)下。它的功能非常強(qiáng)大,首先,無(wú)論是在共享式網(wǎng)絡(luò)還是交換式網(wǎng)絡(luò),它都可以正常工作;其次,可以進(jìn)行 中間人攻擊和注射式攻擊。還可以進(jìn)行嗅探、查看會(huì)話、監(jiān)視會(huì)話、重置會(huì)話。通過(guò)前面的敘述,我們知道在注射式攻擊中,容易出現(xiàn)ACK風(fēng)暴,解決辦法是先進(jìn) 行ARP欺騙;而使用Hunt進(jìn)行注射式攻擊時(shí),它并不進(jìn)行ARP欺騙,而是在會(huì)話劫持之后,向會(huì)話雙方發(fā)送帶RST標(biāo)志位的TCP包以中斷會(huì)話,避免 ACK風(fēng)暴繼續(xù)下去。而中間人攻擊是先進(jìn)行ARP欺騙,然后進(jìn)行會(huì)話劫持。Hunt目前最新版本是1.5,可以到Pavel Krauz網(wǎng)站下載源代碼包和二進(jìn)制文件:http:/lin.fsid.cvut.cz/kra/#hunt?,F(xiàn)在來(lái)看看如果使用Hunt,首先是下載并編譯源代碼:rootdahubaobao hunt#wget /hunt-1.5.tgzrootdahubaobao hunt#tar zxvf hunt-1.5.tgzrootdahubaobao hunt#cd hunt-1.5rootdahubaobao hunt-1.5#makerootdahubaobao hunt-1.5#./hunt/Hunt是完全交互試的操作解釋一下各個(gè)選項(xiàng)的含義l/w/r) list/watch/reset connections/l(字母l)為查看當(dāng)前網(wǎng)絡(luò)上的會(huì)話;w為監(jiān)視當(dāng)前網(wǎng)絡(luò)上的某個(gè)會(huì)話;r為重置當(dāng)前網(wǎng)絡(luò)上的某個(gè)會(huì)話。a) arp/simple hijack (avoids ack storm if arp used)/中間人攻擊(會(huì)話劫持),Hunt先進(jìn)行ARP欺騙,然后進(jìn)行會(huì)話劫持。使用此方法可以避免出現(xiàn)ACK風(fēng)暴。s) simple hijack/簡(jiǎn)單的會(huì)話劫持,也就是注射式攻擊。會(huì)出現(xiàn)ACK風(fēng)暴。d) daemons rst/arp/sniff/mac/該選項(xiàng)共實(shí)現(xiàn)四個(gè)功能,分別為:終止會(huì)話,自動(dòng)發(fā)送帶RST標(biāo)志位的TCP包;ARP欺騙后進(jìn)行數(shù)據(jù)包轉(zhuǎn)發(fā);不用說(shuō)了,嗅探功能;在當(dāng)前網(wǎng)絡(luò)上收集MAC地址。其他的選項(xiàng)很簡(jiǎn)單,不在多說(shuō)了。還是來(lái)看看具體的例子吧,我想大家都等不及了!_2、應(yīng)用實(shí)例 測(cè)試環(huán)境:攻擊者:Red Hat Linux 9.0 IP:0主機(jī)A:Windows Advanced Server IP:主機(jī)B:FreeBSD 4.9 STABLE IP:0rootdahubaobao hunt-1.5#./hunt/* hunt 1.5* multipurpose connection intruder / sniffer for Linux* (c) 1998-2000 by kra*/starting hunt- Main Menu - rcvpkt 0, free/alloc 63/64 -l/w/r) list/watch/reset connectionsu) host up testsa) arp/simple hijack (avoids ack storm if arp used)s) simple hijackd) daemons rst/arp/sniff/maco) optionsx) exit* l /查看當(dāng)前網(wǎng)絡(luò)上的會(huì)話0) 3465 ?0 23/主機(jī)A正在Telnet到主機(jī)B- Main Menu - rcvpkt 0, free/alloc 63/64 -l/w/r) list/watch/reset connectionsu) host up testsa) arp/simple hijack (avoids ack storm if arp used)s) simple hijackd) daemons rst/arp/sniff/maco) optionsx) exit* w /監(jiān)視當(dāng)前網(wǎng)絡(luò)上的會(huì)話0) 3465 ?0 23Choose conn0 /選擇打算監(jiān)視的會(huì)話。由于我的條件有限,不能模擬多個(gè)會(huì)話,請(qǐng)多見量。Dump src/dst/both b /回車Print sec/dst same charactes y/n n /回車 現(xiàn)在就可以監(jiān)視會(huì)話了。主機(jī)A輸入的一切內(nèi)容,我們都可以看到。主機(jī)A在Telnet并登陸之后,直接su root,password:后邊的就是root的密碼。現(xiàn)在這個(gè)系統(tǒng)已經(jīng)完全由你所控制了,自由發(fā)揮吧!- Main Menu - rcvpkt 0, free/alloc 63/64 -l/w/r) list/watch/reset connectionsu) host up testsa) arp/simple hijack (avoids ack storm if arp used)s) simple hijackd) daemons rst/arp/sniff/maco) optionsx) exit* s /進(jìn)行注射式會(huì)話劫持0) 3465 ?0 23choose conn 0dump connection y/n n Enter the command string you wish executed or cr cat /etc/passwd攻擊者的意圖是獲取主機(jī)B的passwd文件的內(nèi)容,但由于注射式會(huì)話劫持缺陷,導(dǎo)致了ACK風(fēng)暴,所以Hunt向會(huì)話雙方發(fā)送了一個(gè)帶RST標(biāo)志位的TCP包來(lái)阻止ACK風(fēng)暴。- Main Menu - rcvpkt 0, free/alloc 63/64 -l/w/r) list/watch/reset connectionsu) host up testsa) arp/simple hijack (avoids ack storm if arp used)s) simple hijackd) daemons rst/arp/sniff/maco) optionsx) exit* a /進(jìn)行中間

溫馨提示

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

評(píng)論

0/150

提交評(píng)論