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

相关文章

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

Linux网络配置之网桥和虚拟网络的配置指南

《Linux网络配置之网桥和虚拟网络的配置指南》这篇文章主要为大家详细介绍了Linux中配置网桥和虚拟网络的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、网桥的配置在linux系统中配置一个新的网桥主要涉及以下几个步骤:1.为yum仓库做准备,安装组件epel-re

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

python如何下载网络文件到本地指定文件夹

《python如何下载网络文件到本地指定文件夹》这篇文章主要为大家详细介绍了python如何实现下载网络文件到本地指定文件夹,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...  在python中下载文件到本地指定文件夹可以通过以下步骤实现,使用requests库处理HTTP请求,并结合o

Java使用WebView实现桌面程序的技术指南

《Java使用WebView实现桌面程序的技术指南》在现代软件开发中,许多应用需要在桌面程序中嵌入Web页面,例如,你可能需要在Java桌面应用中嵌入一部分Web前端,或者加载一个HTML5界面以增强... 目录1、简述2、WebView 特点3、搭建 WebView 示例3.1 添加 JavaFX 依赖3

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

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.