(SEED-Lab) TCP/IP Attack Lab
欢迎大家访问我的GitHub博客
https://lunan0320.cn
文章目录
一、实验目标
掌握TCP协议
利用TCP SYN Flood攻击,以及TCP cookies
应用TCP reset attack
执行TCP会话劫持攻击
掌握使用反向shell
二、实验原理
ARP攻击是利用了在TCP会话的各个阶段出现的问题。
TCP SYN Flood攻击就是一种Dos攻击方式,利用的是在短时间内与Server建立多个TCP的半连接(未发送ACK数据包),因此Server在没有防御措施的情况下都会接收并建立连接等待ACK数据包。
抵御该模式的方式就是TCP cookies,在完成三次握手之前不会为任何一个连接分配资源。
TCP的reset以及会话劫持攻击都是在已经建立的连接的基础上,通过嗅探到seq以及ack序列号以及相关信息从而伪造数据包,破坏连接。
反向shell,即是攻击者通过nc建立一个tcp server,然后在会话劫持的基础上,可以让受害者执行命令把shell通过nc的端口反弹回攻击者的主机中,从而拿到了受害者机器的执行权限。
三、实验过程
Server 、Client、以及Attacker的IP地址以及MAC地址如下表
Host IP
Server 10.0.2.5
Client 10.0.2.6
Attacker 10.0.2.8
3.1 Task 1: SYN Flooding Attack
首先查看系统中设定好的SYN队列的长度是128。
查看队列的使用情况
检查是否开启了SYN的cookie策略
由红色部分可知,已经开启了cookie策略
因此,需要关闭这个SYN cookie策略**。如下图所示。
使用Client去telnet到Server,观察这个过程前后的队列端口使用情况。
在成功登录到Server之后,再次查看。可以看到ESTABLISHED,表示已经建立了从Server到Client的TCP连接。
为了在Attacker中实现SYN flood Attack,此时考虑使用netwox工具。
根据文档提示,此处应该使用的number是76,目的IP地址就是Server的IP地址,即10.0.2.5。端口号是23(因为此处使用的是telnet连接方式)。
此处的-s raw表示的是对源IP地址的混淆,使得其随机,更好的达到欺骗目的主机的作用。
接着在Server中查看端口以及SYN队列的使用情况。可以看到,Server建立的一些半连接状态其实都是与一些不存在的主机建立的,此处就是使用的raw的作用,使得IP地址变为随机的。
从端口上可以看出,均是23号端口,就是一个SYN flood Attack
的过程,实现的都是tcp的连接。
从连接状态中可以看出,大量的连接都已经是处于SYN_RECV的状态,表示这个连接是半打开的。
为了验证SYN flood
Attack是否已经成功,即SYN序列是否已满。此时需要Client再度尝试telnet连接Server,从结果中可以看到,等待较长时间后,Client都没有和Server建立起连接,这说明Client的tcp的SYN请求被Server搁置了,因为Server的SYN队列都被半开放的连接攻击给占满了,不能再给出新的连接了。
此时,考虑打开Server的SYN cookies机制。
重复上述过程。
首先查看一下Server的连接状态。与之前相同。
接着在Client中telnet Server。发现也是可以正常连接成功的。
接着在Server中使用netstat -na |gerp
tcp查看tcp连接。同样可以看到Server与Client建立起来的这条tcp连接。
然后在Attacker中使用netwox的SYN洪泛攻击技术对Server的SYN序列展开攻击。
在Server中继续使用netstat -na |gerp
tcp去查看tcp连接。可以看到,同样是有许多随机IP地址发起的连接,这也是一种SYN_RECV的状态,表示是半连接的。
3.2 Task 2: TCP RST Attacks on telnet and ssh Connections
3.2.1 TCP RST Attack
首先在Client中去通过telnet命令去连接Server
10.0.2.5,在正确输入password之后成功登录。
首先考虑使用netwox命令去破环连接。
在Attacker中使用netwox命令对该连接实施攻击。
可以看到,在Client中原本建立的连接已经被中断。说明攻击成功。
接着考虑使用scapy的方式去破环连接。
在Client与Server通过telnet命令建立了连接之后,在Attacker中通过Wireshark抓包方式,查看二者之间的数据包。
通过头部获取Client与Server之间的IP、Port、Sequence信息。
因此可以在Attacker中写出Scapy的代码:
此处需要注意的是需要以root权限运行程序
在Attacker中运行该程序
然后回到Client中继续想使用ls命令的时候,发现连接已经中断了,说明使用scapy程序攻击的方式也是取得了成功的。
3.2.2 SSH connection
首先是通过ssh命令建立Client与Server之间的连接。
此时可以看到的是连接状态是ESTABLISHED.
第一种方法是考虑使用netwox命令:
在Attacker中使用netwox命令去攻击:
回到Client中查看连接情况,可以看到当输入ls时候,提示连接被破坏了。此时继续查看ip地址,发现是10.0.2.6,这是Client的地址,说明这个连接是被破坏了的。说明攻击成功。
第二种方法是考虑使用scapy程序:
在Client与Server之间建立连接时,在Attacker中使用Wireshark抓包工具,查看到了二者直接的数据包。(数据部分被加密)
分析查看可追踪数据包的IP、Port、NextSequence
因此可以在Attacker中写出代码:
此处需要注意的是sport应该为22,因为ssh是默认22端口的。
此时回到Client中可以看到连接被破坏了。
在wireshark中可以看到,说明对ssh方式的连接,通过scapy的方式也可以攻击成功。
3.3 Task 3: TCP RST Attacks on Video Streaming Applications
首先在Client中打开一个video,可以正常观看。
此时可以看到Client与video Server建立了多条tcp连接。处于Established状态。
接着在Attacker中使用netwox命令去破环Client与video Server的连接。
然后在Client中就可以看到正常播放的视频此时出现了卡顿,一直显示的是缓冲中。其实这就是因为Client已经与video
Server断开了连接,因此会一直显示处于缓冲的状态。
此时在Client中查看之前建立的几条连接是否正常。可以看到几条连接均已经断开,说明攻击是成功的,破坏了Client与video
Server的连接。
3.4 Task 4: TCP Session Hijacking
3.4.1 netwox hijacking
为了模拟会话劫持之后以Client的身份删除Server上的重要文件,因此首先在Server中创建一个demo文件,本实验的成功取决于该文件是否能够被Attacker删除。
接着对rm -rf demo\r命令做十六进制。
原因解释:此处用hex是因为netwox命令中的TCP data部分是十六进制的格式。
此处‘\r’是为了使得我们注入的指令能够正确执行,与其他指令相区分。
首先是在Client中通过telnet 10.0.2.5的方式连接到Server中。
接着在Attacker中通过wireshark分析最后一个数据包的seq以及ack序列号。
此处的数据包提示了是从Client到Server的数据包,提示了序列号和确认号。
此处在劫持过程中Attacker中所使用的就是从Client发送到Server的序列号为seq,确认号为Ack。
根据文档中所给提示,需要在使用netwox时候对参数进行相关的设置。
执行的命令如下。
在Attacker执行上述命令之后得到如下回显。这是我们构造的hijacking的数据包。
在Attacker中的Wireshark中查看,可以看到出现了Retransmission的信息,表示数据包一直在重传。这是合理的,因为这个会话已经被Attacker劫持了。Client与Server之间将无法通信。
此时,在Server中查看会发现demo文件已经被删除。表示进行的会话劫持是成功的。
3.4.2 scapy hijacking
首先是Client与Server建立telnet的TCP连接。
此处,在Server中创建一个demo2的文件
与netwox劫持原理相同,使得Client telnet 10.0.2.5连接到Server中。
在Attakcer中抓包查看telnet过程中的最后一个数据包,由此可以得到IP、port、seq、ack等信息
根据上述信息构建此处代码TCP_hijacking.py
在Attacker中运行该文件(root身份运行)。可以看到构造的数据包的信息如下。
此时,回到Client中,发现已经无法在其中键入命令。光标被锁死。
查看Attacker中的TCP数据包信息。
对这些重传的数据包追踪TCP流信息。可以清楚的看到我们构造的命令已经通过Client在Server中执行。
此时,在Server中查看文件信息,发现之前文件demo2还在,但是当执行完攻击命令之后,demo2文件已经被删除。说明通过scapy命令也完成了会话劫持攻击。
3.5 Task 5: Creating Reverse Shell using TCP Session Hijacking
首先在Attacker中开启监听9090端口,从Server中反射回的shell会通过9090端口返回回来。
此处nc命令的使用是表示在Attacker中开启的是9090端口,也就是相当于启动了一个tcp服务,此服务监听了从9090端口输入进来的内容。
接着在Client中使用telnet命令去连接Server 10.0.2.5的IP地址。
在Server中使用netstat
-na命令,可以看到已经建立了从10.0.2.5到10.0.2.6,即Server到Client的连接。
在连接过程中,Attacker捕获其中的tcp数据包,并提取最后一个数据包的信息如下。得到IP、Port、Seq、Ack这类相关信息。
以此信息,在Attacker中构建TCP_reverse_shell.py程序文件。
在Attacker中运行该Scapy程序。得到了构造的数据包的信息。
接着在Attacker中的9090端口回显了从Server 10.0.2.5的信息。
在Server中查看此时的连接。可以看到已经和Attacker 10.0.2.8
的9090端口建立了tcp连接。
在Client中由于会话被劫持,已经不能再输入其他的命令了。输入命令也会没有反应。
此时查看IP地址,发现已经是Server的IP地址了,即已经拿到了Server的Reverse_shell。攻击成功!
文件描述符概念:标准输入为0,标准输出为1,标准错误输出为2。
&1是标准输出文件的主机。0<&1是将标准输入由标准输出的主机输入。2>&1是将标准错误输出到标准输出的主机上。也就是说shell的输入输出都是由攻击者来控制的了。因此就可以实现了远程控制反弹shell。
四、参考文献
[1] 深入浅出TCP中的SYN-Cookies - SegmentFault
思否
https://segmentfault.com/a/1190000019292140
[2]TCP SYN-Cookie的原理和扩展_Netfilter,iptables/OpenVPN/TCP guard:
https://blog.csdn.net/dog250/article/details/51468729
[3] Linux Netcat 命令——网络工具中的瑞士军刀 -
简书
https://www.jianshu.com/p/877d72133987
[4] Linux 文件 1.4—文件描述符0 12(文件操作简述)https://cxymm.net/article/qq_45831156/107469716