seedlabs_网络攻防技术_lab4

2023-11-28 15:50

本文主要是介绍seedlabs_网络攻防技术_lab4,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

lab4 缓冲区溢出实验

一、实验要求

​ 本实验的学习目标是让学生将从课堂上学到的有关缓冲区溢出漏洞的知识进行实践,从而获得有关该漏洞的第一手经验。缓冲区溢出是指程序试图将数据写入预先分配的固定长度缓冲区边界之外的情况。恶意用户可利用此漏洞改变程序的流控制,甚至执行任意代码。此漏洞是由于数据存储(如缓冲区)和控件存储(如返回地址)的混合造成的:数据部分的溢出会影响程序的控制流,因为溢出会改变返回地址。
​ 本实验将提供四台不同的服务器,每台服务器运行一个带有缓冲区溢出漏洞的程序。实验任务是开发一个利用漏洞的程序,并最终获得这些服务器上的root权限。除了进行这些攻击实验之外,还将试验几种针对缓冲区溢出攻击的对策。学生需要评估这些计划是否有效,并解释原因。

二、实验步骤及结果

task1: Get Familiar with the Shellcode

  1. 进入shellcode文件夹,修改shellcode_32.py ,使其能够删除文件

在这里插入图片描述

  1. 编译运行(需要先行创建一个tmpfile)

在这里插入图片描述

task2: Level-1 Attack

  1. 进入server-code文件夹,执行下列命令

make
make install

在这里插入图片描述

  1. 回到labsetup文件夹下,执行下列命令

dcbuild

dcup

在这里插入图片描述
在这里插入图片描述

  1. 保持上述终端窗口,另开一个终端到attack-code文件夹下执行下述命令

nc 10.9.0.5 9090

  1. ctrl+C终止后,可以看到server显示

在这里插入图片描述

  1. 修改exploit.py为下图

在这里插入图片描述
6. 注意要关闭ASLR(地址空间随机化),不然后面运行会失败

sysctl -w kernel.randomize_va_space=0
在这里插入图片描述

​ 像这样两次输出一致且都是0xffffxxxx的形式就成功了
在这里插入图片描述

  1. 再根据ebp和buffer address计算ret和offset

ret = ebp + 8

offset = ebp - buffer address + 4 # 需要注意统一进制

在这里插入图片描述

  1. 运行exploit.py后,传输badfile,查看输出,得知成功运行

在这里插入图片描述

task3: Level-2 Attack

  1. 输入echo hello | nc 10.9.0.6 9090,连接2号服务器

​ 可以看到只提供了buffer address
在这里插入图片描述

  1. 根据文档可知offset范围为100~300
    在这里插入图片描述
  2. 新建一个exploit2.py,修改代码如下由于不知offset,所以用循环进行尝试

在这里插入图片描述
4. 运行并传输文件,攻击成功
在这里插入图片描述

task4: Level-3 Attack

  1. 输入echo hello | nc 10.9.0.7 9090,连接3号服务器

​ 可以看到3号服务器使用64位系统,rbp就是上面的ebp
在这里插入图片描述

  1. 修改exploit3.py,注意shellcode部分使用shellcode_64.py中的代码

ret = buffer address

offset = rbp - buffer address + 8 # 注意进制 32位系统+4,64位系统+8 十进制

在这里插入图片描述
在这里插入图片描述

  1. 运行并传输文件,攻击成功

在这里插入图片描述

task5: Level-4 Attack

  1. 连接服务器

​ 4号服务器与3号服务器相同,但是buffer size更小
在这里插入图片描述
2. 与task4原理相同,修改exploit4.py文件如下

在这里插入图片描述

  1. 运行后传输文件,成功

在这里插入图片描述

task6: Experimenting with the Address Randomization

  1. 开启ASLR,观察它是如何影响攻击的

sudo /sbin/sysctl -w kernel.randomize_va_space=2

在这里插入图片描述

  1. 向1号服务器和3号服务器发送hello信息,多发送几次,进行观察

在这里插入图片描述
在这里插入图片描述

为什么ASLR使缓冲区溢出攻击更加困难

地址空间随机化(Address Space Layout Randomization)(ASLR)是一种操作系统用来抵御缓冲区溢出攻击的内存保护机制。ASLR通过对攻击者在进行缓冲区溢出攻击时所要用到的内存布局中的偏移做了随机化,加大了攻击成功的难度,从而增强了系统的控制流完整性。这种技术使得系统上运行的进程的内存地址无法被预测,使得与这些进程有关的漏洞变得更加难以利用。

通常认为ASLR在64位系统上效果更好,因为64位系统有更大的可随机的地址范围。

克服32位系统的ASLR

​ 根据pdf给出的shell脚本进行循环攻击

在这里插入图片描述

​ 攻击成功就会停下,理论上十分钟内能得到结果

​ 但是我这里运行了16分钟、11万次都没有成功

在这里插入图片描述

task7: Experimenting with Other Countermeasures

a. Turn on the StackGuard Protection

进入server-code文件夹,移除gcc的栈溢出保护机制-fno-stack-protector。编译stack.c,并将badfile作为输入

在这里插入图片描述

​ 可以看到检测到了 stack smashing

b. Turn on the Non-executable Stack Protection

​ 进入 shellcode 文件夹,去除 -z execstack 编译 call_shellcode.c 并运行

在这里插入图片描述
可以看到,发生了segmentation fault,栈不可再用

这篇关于seedlabs_网络攻防技术_lab4的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/429918

相关文章

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如