第1关:访问过程参数
实验任务概述
本实验中缓冲区溢出攻击的目标是一个名为bufbomb二进制可执行程序,实验的任务是设计、构造合适的攻击字符串(“exploit string”),当输入攻击字符串至目标程序bufbomb后,通过造成缓冲区溢出改变目标程序的行为,达成预定的实验目标。
本实验的目标程序bufbomb在运行时调用如下getbuf过程从标准输入读入一个字符串:
int getbuf()
{
other variables ...;
char buf[BUFFER_SIZE]; // BUFFER_SIZE是预定义的一个正整数常量
Gets(buf);
return 1;
}
其中,过程Gets从标准输入读入一个字符串(以换行‘\n’或文件结束end-of-file字符结尾),并将字符串(以null空字符结尾)存入指定的目标内存位置,即getbuf过程中定义的局部数组变量buf在栈上的具有BUFFER_SIZE个字节的存储空间。需要注意的是,过程Gets并不判断buf数组的大小是否足够容纳全部的输入字符串,而只是简单地向目标地址依次复制输入字符串的所有字符,因此当用户输入给getbuf过程的字符串长度超过(BUFFER_SIZE-1)个字符时,后续字符(以及字符串结尾的null空字符)在栈中的存储位置将超出buf数组的存储空间边界,即发生缓冲区溢出,从而覆盖栈中原来保存的数据。本实验的任务就是设计合适的输入(攻击