TCP/IP协议攻击实验2

来源:互联网 发布:nginx 点播 编辑:程序博客网 时间:2024/05/16 17:13

TCP/IP协议攻击实验2

实验环境:Linux ubuntu 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

安装工具

Telnet服务器端安装配置

参考:Ubuntu 下telnet服务安装配置

实验三、SYN 泛洪攻击

实验原理

SYN攻击是一种DoS(Denial of Service)攻击,在这种攻击中黑客向被攻击者的TCP端口发送很多SYN请求,但是黑客并不是想完成三次握手协议,而是使用伪造的IP地址或者只进行三次握手协议中的第一次握手。因为SYN数据包用来打开一个TCP连接,所以受害者的机器会向伪造的地址发送一个SYN/ACK数据包作为回应,并等待预期的ACK响应。每个处于等待状态,半开的连接队列都将进入空间有限的待处理队列。由于伪造的源地址实际上并不存在,所以将那些等待队列中的记录删除并完成建立TCP连接所需的ACK响应用于不会到来,相反每个半开的连接一定会超时,这将花费一段比较长的时间。只要攻击者使用伪造的SYN数据包继续泛洪受害者的系统,受害者的待处理队列将一直处于满员,这使得真正的SYN数据包几乎不可能到达系统并打开有效的TCP连接。

虚拟机MAC地址和IP地址

Machine Index HWAddr IPAddr 1 00:1c:42:6f:5b:ee 10.211.55.27 2 00:1c:42:cc:87:b6 10.211.55.29 3 00:1c:42:2e:73:dc 10.211.55.28

检查正常情况下的telnet连接

我们用虚拟机#3作为客户端,虚拟机#2作为服务器端。在虚拟机#3上使用命令telnet 10.211.55.29,然后输入用户名密码登陆。

这里写图片描述

注意:因为用户名相同,要使用ifconfig查看ip地址来确定是否真正连接上了。

连接上之后,检查虚拟机#2的端口占用情况,在telnet服务器端机器(虚拟机#2)上使用命令:

netstat -an | grep 23 | grep tcp

这个命令能过滤出所有所有端口号为23的tcp连接,其中23是telnet的默认端口号。

这里写图片描述

由上图的结果可以看到,已经在23号端口上和10.211.55.28建立了TCP连接,即和telnet客户端成功连接。

注意:为了进行下一步实验,要讲telnet客户端先退出,使用命令exit

用虚拟机#1进行泛洪攻击

在进行攻击之前,我们要确保作为telnet客户端的虚拟机#2的telnet端口–23号端口要空闲。一样是使用netstat -an | grep 23 | grep tcp

这里写图片描述

作为攻击者的虚拟机#1中使用SYN泛洪攻击命令:

sudo netwox 76 -i "10.211.55.29" -p "23"

这里写图片描述

使用了这个命令之后,作为被攻击的服务器端虚拟机#2已经卡的不行了,这个时候再进行查看虚拟机#2的端口可以看见SYN队列中塞满了数据包。

这里写图片描述

telnet客户端进行测试攻击成功与否

这个时候用虚拟机#3作为telnet客户端连接虚拟机#2,按理说会出现连接超时的现象,trying了半分钟,任何操作都没有办法进行,说明攻击成功,因为虚拟机#3的syn队列已经被堵塞了。

这里写图片描述

开启SYN_COOKIES之后,攻击失效

在telnet服务器端虚拟机#2上使用命令开启SYN Cookies:

sudo sysctl -w net.ipv4.tcp_syncookies=1

再进行同样的攻击,攻击无效,telnet连接能快速建立。

这里写图片描述

可见SYN cookies是一种防御泛洪攻击的手段。

实验四、对Telnet和SSH的TCP RST攻击

实验原理

有三个条件可以产生RST包:
1. 建立连接的SYN到达某端口,但是该端口上没有正在监听的服务
如:IP为192.168.1.33的主机上并没有开启WEB服务(端口号为0x50),这时我们通过IE去访问192.168.1.33,通过Wireshark抓包,可以看到,对此SYN包的回复为RST。说明此服务器(即IP192.168.1.33)是存在的,不过其上并没有运行WEB Server(如apache)的程序
2. TCP想取消一个已有连接
基于什么样的情况才会取消一个已有的连接?
3. TCP接收到了一个根本不存在的的连接上的分节
我们知道,TCP在数据传输前,要通过三路握手(three-way handshake)建立连接,即连接建立起后,服务器和客户端都有一个关于此连接的描述,具体形式表现为套接口对,如果收到的某TCP分节,根据源 IP,源tcp port number,及目的IP,目的tcp port number在本地(指服务器或客户端)找不到相应的套接口对,TCP则认为在一个不存在的连接上收到了分节,说明此连接已错,要求重新建立连接,于是发出了RST的TCP包!

虚拟机网络配置

Machine Index HWAddr IPAddr 1 00:1c:42:6f:5b:ee 10.211.55.27 2 00:1c:42:cc:87:b6 10.211.55.29 3 00:1c:42:2e:73:dc 10.211.55.28

对telnet的TCP RST攻击

1、建立telnet连接
虚拟机#3作为客户端和虚拟机#2作为服务器端建立telnet连接。虚拟机#3上键入命令:

sudo telnet 10.211.55.29

这里写图片描述

接着在虚拟机#2上查看连接情况。

这里写图片描述

由上图可以看到,telnet连接建立成功。

2、进行攻击
虚拟机#1作为攻击者,攻击虚拟机#2。攻击命令为:

netwox 78 -i "10.211.55.29"

这个命令是向虚拟机#2发送RST包。

这里写图片描述

3、检验攻击情况

使用了这个命令之后再观察虚拟机#2和虚拟机#3的telnet连接,发现断开。

虚拟机#3出现:

这里写图片描述

虚拟机#2检查端口:

这里写图片描述

可见,攻击成功。

对ssh的TCP RST攻击

和上一部分telnet连接一样的攻击方式和攻击原理。

1、建立ssh连接

ssh 10.211.55.29

这里写图片描述

这里写图片描述

2、攻击

这里写图片描述

3、检验攻击情况

这里写图片描述

这里写图片描述

可见,攻击成功。

参考文档

  1. SYN Flood攻击、SYN Cookie防御和Linux/FreeBSD的内核参数修改
  2. Netwox参考文档
0 0