CSAPP 缓冲区溢出攻击实验

实验内容

本实验设计为一个黑客利用缓冲区溢出技术进行攻击的游戏。实验仅提供一个二进制可执行文件bufbomb和部分函数的C代码,不提供每个关卡的源代码。程序运行中有3个关卡,每个关卡需要用户输入正确的缓冲区内容

要求通过查看各关卡的要求,运用GDB调试工具和objdump反汇编工具,通过分析汇编代码和相应的栈帧结构通过缓冲区溢出办法在执行了getbuf()函数返回时攻击,使之返回到各关卡要求的指定函数中。第一关只需要返回到指定函数,第二关不仅返回到指定函数还需要为该指定函数准备好参数,最后一关要求在返回到指定函数之前执行一段汇编代码完成全局变量的修改

实验过程

本次实验用到的可执行文件是32位,而实验环境是64位的,需要先安装一个32位的库和安装sendmail

CSAPP 缓冲区溢出攻击实验

CSAPP 缓冲区溢出攻击实验

第一关

先找第一关的位置

CSAPP 缓冲区溢出攻击实验

栈指针esp先传给了ebp,然后esp-0x28的作用是分配地址空间,esp-0x18是输入的字符串的起始地址。若要改变返回地址,则需要使输入的字符串足够长,填充栈直到返回地址所在的空间之前,然后再加上smoke函数的地址即可。根据上面的代码可知,需要填充(24+4)个字节。

CSAPP 缓冲区溢出攻击实验

Smoke的地址在08048eb0。那么本关的答案为00010203040506070809101112131415161718192021222324252627b08e0408

因为需要用小端法表示,所以最后几个字节倒序排序。

用vi创建一个以以上字符串为内容的exploit.txt文件,用sendstring输入到bufbomb里

CSAPP 缓冲区溢出攻击实验

依照实验要求,红色的地方是我的大名,回车后出现在team后面

第二关

CSAPP 缓冲区溢出攻击实验

esp+0x8存的应该是fizz的传入参数

CSAPP 缓冲区溢出攻击实验

0x804a1d4存放的是cookie

CSAPP 缓冲区溢出攻击实验

日常搞错命令CSAPP 缓冲区溢出攻击实验为啥makecookie前要加./ ,不是很懂,总之就这么记住吧

结合getbuf()的代码结构,这次的答案组成应该是用于填充的字符串(28字节)+fizz的地址(4字节)+填充的字符串(4字节)+我的cookie(4字节),总共40个字节

00010203040506070809101112131415161718192021222324252627608e04080102030419d47a15

CSAPP 缓冲区溢出攻击实验

第三关

这一关开始需要先把名为“栈地址的随机化”的机制关掉,不然实验走不了

CSAPP 缓冲区溢出攻击实验

CSAPP 缓冲区溢出攻击实验CSAPP 缓冲区溢出攻击实验

804a1c4存的是global_value,若其与cookie值相同则会跳转到8048e40

若要修改这个全局,则需要往栈中插入一段代码

CSAPP 缓冲区溢出攻击实验CSAPP 缓冲区溢出攻击实验CSAPP 缓冲区溢出攻击实验

还需要知道输入进去的字符串的首地址

CSAPP 缓冲区溢出攻击实验

所以字符串应该是这样:

b819d47a15890425c4a1040868108e0408c30102030405060708091030b8ffff

CSAPP 缓冲区溢出攻击实验