我试图做一个缓冲区溢出(我使用Linux)在一个简单的程序,需要密码。这里的程序代码:缓冲区溢出不工作
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int check_authentication(char *password){
int auth_flag = 0;
char password_buffer[16];
strcpy(password_buffer, password);
if(strcmp(password_buffer, "pass1") == 0)
auth_flag = 1;
if(strcmp(password_buffer, "pass2") == 0)
auth_flag = 1;
return auth_flag;
}
int main(int argc, char **argv)
{
if(argc < 2){
printf("\t[!] Correct usage: %s <password>\n", argv[0]);
exit(0);
}
if(check_authentication(argv[1])){
printf("\n-=-=-=-=-=-=-=-=\n");
printf(" Access granted.\n");
printf("-=-=-=-=-=-=-=-=\n");
} else {
printf("\nAccess Denied.\n");
}
return 0;
}
好的,现在我编译它,没有错误,并保存为overflow.c。
现在我打开终端,我搬进了文件目录(桌面),然后写道:
./overflow.c AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
的码头说:“德艺双馨检测堆栈”(或类似的东西),然后退出程序执行。
现在,我正在阅读Jon Erickson的一本名为“Hacking - The Art Of Exploitation”的书。在一章中,他解释了这种类型的漏洞利用(我从书中拿走了代码),并做了我所做的同样的命令。内存溢出,程序打印“访问授权”。现在,为什么我的操作系统正在检测我正在尝试利用该程序?我做错了什么?
我也尝试了在Mac OS X上的漏洞利用。同样的事情发生了。请,有人可以帮我吗?提前致谢。
好的,感谢您的回复,并帮助! – jndok
不客气:) –
好帖子,队友!你也许也知道Cygwin环境的解决方案吗? '-fno-stack-protector'似乎没有任何区别。 – Powerslave