介绍
该实验能够帮助你更好的理解IA-32的过程调用和程序栈的组织情况。在实验中我们需要对于文件夹中bufbomb可执行文件进行栈溢出攻击
。
实验前准备
- 下载相应的buffer Lab实验文件,里面包含三个可执行文件
相关实验代码的Github下载链接如下https://github.com/Davon-Feng/CSAPP-Labs 中的Buffer Lab
文件名 | 作用 |
---|---|
bufbomb | 栈溢出实验主要的攻击目标 |
makecookie | 根据用户输入的userid生成唯一(很大可能)的4字节字符串 |
hex2raw | 将用户构造的2进制字符串转换为字符串 |
2. makecookie使用方法
3. hex2raw使用方法
4. bufbomb的参数
在下载的Buffer lab文件夹中buflab.pdf中有以上四点的指导内容,在实验前要仔细阅读
注意:这个程序运行时要有一个userid参数,我的设置的是yzf, 不同的userid会对应不同的结果.我的答案如果换成别的userid的话就不成功.
而且也可能和机器有关,因为程序中一些变量的存放位置可能不同.
实验过程
level0:Candle
在bufbomb中getbuf()
方法会被test()
调用。两个函数的C语言程序如下所示
/*Buffer size for getbuf*/
#define NORMAL_BUFFER_SIZE 32
int getbuf()
{
char bur[NORMAL_BUFFER_SIZE];
Gets(buf);
return 1;
}
void test()
{
int val;
/* Put canary on stack to detect possible corruption*/
volatile int local = uniqueval();
val = getbuf();
/*Check for corrupted stack*/
if(local != uniqueval){
printf("Sabotaged:the stack has been corrupted\n");
}else if(val == cookie){
printf("Boom!:getbuf returned 0x%x\n",val);
validate(3);
}else{
printf("Dud:getbuf return 0x%x\n",val);
}
}
Level0实验需要我们在getbuf()函数执行返回之后不是接下来执行test()函数的剩余部分,而是改变程序的运行方向,执行下面的smoke()函数。
vo