计算机系统实验报告
实验报告
实 验(四)
题
目
Buflab
缓冲器漏洞攻击
软件工程
1170500704
软件 1 班
魏孝文
吴锐
G712
专
学
班
学
业
号
级
生
指 导 教 师
实 验 地 点
实 验 日 期
10/30
计算机科学与技术学院
- 1 -
计算机系统实验报告
目 录
第 1 章 实验基本信息................................................................................................- 3 -
1.1 实验目的........................................................................................................... - 3 -
1.2 实验环境与工具............................................................................................... - 3 -
1.2.1 硬件环境....................................................................................................- 3 -
1.2.2 软件环境....................................................................................................- 3 -
1.2.3 开发工具....................................................................................................- 3 -
1.3 实验预习........................................................................................................... - 3 -
第 2 章 实验预习........................................................................................................- 4 -
2.1 请按照入栈顺序,写出 C 语言 32 位环境下的栈帧结构(5 分)..............- 4 -
2.2 请按照入栈顺序,写出 C 语言 62 位环境下的栈帧结构(5 分).............. - 4 -
2.3 请简述缓冲区溢出的原理及危害(5 分).....................................................- 5 -
2.4 请简述缓冲器溢出漏洞的攻击方法(5 分).................................................- 5 -
2.5 请简述缓冲器溢出漏洞的防范方法(5 分).................................................- 6 -
第 3 章 各阶段漏洞攻击原理与方法 ........................................................................- 7 -
3.1 SMOKE 阶段 1 的攻击与分析........................................................................... - 7 -
3.2 FIZZ 的攻击与分析............................................................................................- 7 -
3.3 BANG 的攻击与分析..........................................................................................- 9 -
3.4 BOOM 的攻击与分析....................................................................................... - 11 -
3.5 NITRO 的攻击与分析.......................................................................................- 11 -
第 4 章 总结..............................................................................................................- 12 -
4.1 请总结本次实验的收获................................................................................. - 12 -
4.2 请给出对本次实验内容的建议..................................................................... - 12 -
参考文献....................................................................................................................- 13 -
- 2 -
计算机系统实验报告
第 1 章 实验基本信息
1.1 实验目的
理解 C 语言函数的汇编级实现及缓冲器溢出原理
掌握栈帧结构与缓冲器溢出漏洞的攻击设计方法
进一步熟练使用 Linux 下的调试工具完成机器语言的跟踪调试
1.2 实验环境与工具
1.2.1 硬件环境
X64 CPU;2GHz;2G RAM;256GHD Disk 以上
1.2.2 软件环境
Windows7 64 位以上;VirtualBox/Vmware 11 以上;Ubuntu 16.04
LTS 64 位/优麒麟 64 位;
1.2.3 开发工具
Visual Studio 2010 64 位以上;GDB/OBJDUMP;DDD/EDB 等
1.3 实验预习
了解实验的目的、实验环境与软硬件工具、实验操作步骤,复习
与实验有关的理论知识。
- 3 -
计算机系统实验报告
第 2 章 实验预习
2.1 请按照入栈顺序,写出 C 语言 32 位环境下的栈帧结构(5 分)
调用函数的帧的参数 n,参数 n-1,,,,,,参数 5,返回地址。
正在执行的函数的帧为:被保存的寄存器(四个),局部变量,参数构造区,
栈顶
2.2 请按照入栈顺序,写出 C 语言 64 位环境下的栈帧结构(5 分)
调用函数的帧的参数 n,参数 n-1,,,,,,参数 7,返回地址.
正在执行的函数的帧为:被保存的寄存器(六个),局部变量,参数构造区,
栈顶
- 4 -
计算机系统实验报告
。
2.3 请简述缓冲区溢出的原理及危害(5 分)
原理:所有程序在执行前,先进入缓冲区再被执行,而缓冲区是程序员可以
操作的,所以可以超过缓冲区的大小对程序的返回地址或参数或较早的帧进行操
作,破坏了程序原有的结构,实现缓冲区溢出。
危害:如果是因为用户无知造成缓冲区溢出,会使程序无法正常运行,黑客
也可以利用缓冲区溢出对程序进行攻击。
2.4 请简述缓冲器溢出漏洞的攻击方法(5 分)
- 5 -
计算机系统实验报告
通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使
程序转而执行其它指令,以达到攻击的目的。
⒈ 在程序的内存地址里安排适当的代码。
⒉ 通过适当的初始化寄存器和内存,让程序跳转到入侵者安排的地址空间执行。
2.5 请简述缓冲器溢出漏洞的防范方法(5 分)
1.栈随机化。栈的位置在程序每次运行时都有变化,因此,即使许多机器都运行同
样的代码,它们的栈地址都是不同的。
2.栈破坏检测。在栈帧任何局部缓冲区和栈状态之间存储一个特殊的金丝雀值,在
恢复寄存器状态和从函数返回之前,程序检查这个金丝雀值是否改变,如果是的,
则程序异常终止。
3.限制可执行代码区域。消除攻击者向代码中插入可执行代码的能力,一种方法是
限制哪些内存区能存放可执行代码。
- 6 -
计算机系统实验报告
第 3 章 各阶段漏洞攻击原理与方法
每阶段 25 分,文本 10 分,分析 15 分,总分不超过 80 分
3.1 Smoke 阶段 1 的攻击与分析
文本如下:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 bb 8b 04 08
分析过程:
由图可知,要返回的地址 smoke 的首地址是 0x08048bbb。
由 getbuf 可知,存放 buf 的空间有 40 个字节,而 getbuf 首先压入了一个%ebp,
占 4 字节,所以前 44 个字节可以随意输入,而 44-48 字节是要更改的返回地
址,即 0x08048bbb,由小端法的输入规则,输入的数字是 bb 8b 04 08。得到要
输入的数字,带入,得到结果。
3.2 Fizz 的攻击与分析
文本如下:
11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77
88 99 00 11 22 33 44 55 66 77 88 99 00 11 22 33 44 e8 8b 04 08 00 00 00 00 48 b1
5e 1c
- 7 -
计算机系统实验报告
分析过程:此题构造攻击字符串造成缓冲区溢出,使目标程序转而调用 fizz
函数,而且要将 cookie 值传入,使 fizz 函数中的判断成功,在这里我的 cookie
值为 0x1c5eb148。
先观察 fizz 函数的返回地址
再看 fizz 函数的结构:
可 知 , cookie 存 储 的 地 址 为 0x8(%ebp), 又 因 为 fizz 函 数 的 起 始 地 址 为
0x0848be8,由 smoke 函数的结论可知,首先输入 40 个非\n 的任意值,接下
来输入 4 个代表%ebp 的非\n 任意值,接下来输入 fizz 函数的小段法地址 e8 8b
04 08,接下来再输入 4 个非\n 任意值,最后输入自己 cookie 值的小端法表示
48 b1 5e 1c。带入,
- 8 -