【发布时间】:2019-01-22 20:46:09
【问题描述】:
我目前正在尝试对缓冲区溢出漏洞进行一些测试。 这是易受攻击的代码
void win()
{
printf("code flow successfully changed\n");
}
int main(int argc, char **argv)
{
volatile int (*fp)();
char buffer[64];
fp = 0;
gets(buffer);
if(fp) {
printf("calling function pointer, jumping to 0x%08x\n", fp);
fp();
}
}
漏洞利用非常简单且非常基本:这里我需要的只是溢出缓冲区并覆盖 fp 值以使其保存 win() 函数的地址。 在尝试调试程序时,我发现 fb 位于缓冲区下方(即内存中的较低地址),因此我无法修改其值。 我认为一旦我们在 y 之前声明了一个局部变量 x,x 在内存中会更高(即在堆栈的底部)所以x 可以覆盖 y 如果它超出了它的边界,这里不是这种情况。 我正在用 gcc gcc 版本 5.2.1 编译程序,没有特殊标志(仅测试 -O0)
有什么线索吗?
【问题讨论】:
标签: variables gcc c buffer stack