我试图在一个需要密码的简单程序上进行缓冲区溢出(我使用的是 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;
}
OK,现在我编译好了,没有错误,保存为overflow.c。
现在我打开终端,进入文件目录(桌面),然后写道:
./overflow.c AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
终端说:“检测到堆栈粉碎”(或类似的东西)然后退出程序执行。
现在,我正在阅读 Jon Erickson 的一本书,名为“Hacking - The Art Of Exploitation”。在一个章节中,他解释了这种类型的利用(我从书中获取了代码)并执行了与我相同的命令。内存溢出,程序打印“Access grant.”。现在,为什么我的操作系统检测到我正在尝试利用该程序?我做错了什么?
我还在 Mac OS X 上尝试了该漏洞利用。同样的事情也发生了。请问,有人可以帮我吗?提前致谢。