计算机系统基础:缓冲区溢出攻击实验详解

需积分: 0 0 下载量 98 浏览量 更新于2024-06-30 收藏 698KB PDF 举报
"本讲义主要讲解了缓冲区溢出攻击的概念和实验,通过一系列递增难度的实验任务,帮助学生深入理解IA-32函数调用规则、栈结构以及缓冲区溢出攻击的原理。实验环境为Linux 32-bit i386,使用的编程语言为C和汇编。实验内容包括对名为'bufbomb'的目标程序进行六级不同的缓冲区溢出攻击,以实现特定功能,如调用特定函数或修改内存映像。提供的实验数据包中包含目标程序、辅助工具等文件。" 缓冲区溢出攻击是一种常见的安全漏洞利用方式,它发生在程序尝试写入超过缓冲区边界的数据时,导致相邻内存区域的内容被覆盖。在IA-32架构的Linux系统中,函数调用通常涉及到栈操作,当函数返回地址被恶意数据篡改,攻击者可以控制程序执行流,执行非预期的代码。 在本次实验中,学生将面临六个级别的挑战,每个级别都有不同的目标: 1. Level0: smoke - 目标是通过缓冲区溢出使程序调用预设的'smoke'函数。 2. Level1: fizz - 挑战是使程序以特定参数调用'fizz'函数。 3. Level2: bang - 攻击需要调用'bang'函数,并能修改全局变量。 4. Level3: rumble - 要求不仅调用'rumble'函数,还要传递调用参数。 5. Level4: boom - 这一级别涉及栈帧修复的无感攻击,需要构造攻击字符串来传递有效的返回值。 6. Level5: kaboom - 在栈帧地址随机化的环境下执行有效攻击,这增加了攻击的复杂性,因为地址不再固定。 实验过程中,学生需要了解和利用'bufbomb'程序的函数调用结构,比如'main'函数如何调用'launcher',以及在不同级别下'test'和'getbuf'函数的不同行为。此外,'makecookie'程序生成的唯一'cookie'值和'hex2raw'工具将帮助学生处理和转换数据,以适应不同级别的攻击需求。 通过这些实验,学生不仅能掌握缓冲区溢出攻击的基本概念,还能学习到如何分析程序内存布局,理解栈的工作机制,以及如何设计和构造攻击字符串来影响程序执行流程。这种实践经验对于理解软件安全至关重要,同时也锻炼了他们在实际环境中解决问题的能力。
2022-08-03 上传