【BUPT计算机系统基础】CSAPP-lab3-缓冲区溢出攻击.docx
需积分: 0 173 浏览量
更新于2023-03-23
3
收藏 1002KB DOCX 举报
【计算机系统基础】- 缓冲区溢出攻击详解
缓冲区溢出攻击是一种常见的安全漏洞利用技术,主要针对C语言及其类似编程语言编写的应用程序。这种攻击利用了程序处理数组或缓冲区时未进行边界检查的缺陷,使得攻击者能够向程序的内存空间写入超出预期的数据,从而改变程序执行流程,甚至执行任意代码。本文以北京邮电大学(BUPT)计算机系统基础课程中的实验为例,详细介绍如何理解和应对缓冲区溢出攻击。
### 一、实验目的
实验的主要目的是让学生了解C语言程序在机器层面上的表示,掌握GDB调试器的使用,理解x86-64架构下的基本指令模式,以及通过实践了解缓冲区溢出攻击的危害。
### 二、实验环境
实验在Linux环境下进行,使用`objdump`命令进行反汇编,`GDB`作为调试工具,以及积分榜系统监控实验进度。实验过程中,需要分析两个存在缓冲区溢出漏洞的程序——`ctarget`和`rtarget`。
### 三、实验内容
实验分为两个部分,即代码注入攻击和返回导向编程(Return-Oriented Programming,ROP)攻击。在`ctarget`中,通过填充缓冲区并覆盖返回地址,实现调用`touch1`、`touch2`、`touch3`三个目标函数。而在`rtarget`中,利用ROP技术寻找内存中的小工具,组合成特定功能的指令序列,同样调用`touch2`和`touch3`。
### 四、实验步骤与分析
#### 1. 准备工作
登录到服务器,解压文件,了解实验内容,确认实验分为5个阶段,并分别针对`ctarget`和`rtarget`进行攻击。
#### 2. 代码注入攻击
- **阶段一**:分析`test`函数调用的`getbuf`函数,发现缓冲区大小为24字节。通过覆盖返回地址,使用`touch1`函数的地址(0x00401945)来改变程序执行流。由于x86-64的little-endian存储方式,需使用`45 19 40 00`覆盖内存,通过`hex2raw`将数据转换后输入`ctarget`,成功调用`touch1`。
- **阶段二**:继续分析,发现需要修改 `%edi` 寄存器的值以匹配`cookie`。通过`cookie.txt`获取cookie值(0x64113650),编写汇编代码注入,将其转换为机器码,以达到调用`touch2`的目的。
#### 3. ROP攻击
对于`rtarget`,攻击者需要在内存中找到一系列短指令(gadgets),利用它们构建一个逻辑上完整的指令序列,以达到调用`touch2`或`touch3`的目标。这需要深入理解程序内存布局和x86-64的指令集。
### 五、实验总结
缓冲区溢出攻击实验不仅锻炼了学生对C语言底层的理解,还提高了他们在实际环境中识别和利用安全漏洞的能力。通过这样的实践,学生能更好地理解软件安全的重要性,以及在编程时应如何预防这类攻击,如使用安全的编程语言、进行边界检查、使用栈保护等措施。
Nik0_niko
- 粉丝: 3
- 资源: 4