我正在尝试在一个需要密码的简单程序上进行缓冲区溢出(我正在使用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的《黑客攻防艺术》一书中的一章,他解释了这种类型的漏洞(我从书中取出了代码),并执行了与我相同的命令。内存溢出,程序打印“访问已授权”。那么为什么我的操作系统会检测到我正在尝试利用该程序?我做错了什么吗?
我还在Mac OS X上尝试了这个漏洞。发生了同样的事情。请问有人可以帮助我吗?谢谢。
-fno-stack-protector
似乎没有任何效果。 - Powerslave