缓冲区溢出不适用于 Mac OSX El Capitan
Buffer Overflow does not work on Mac OSX El Capitan
我买了 Jon Erickson 的书 "Hacking - The Art of Exploitation",他在书中描述了一个缓冲区溢出的简单示例,如下所示:
int check_authentication(char *password) {
int auth_flag = 0;
char password_buffer[16];
strcpy(password_buffer, password);
if(strcmp(password_buffer, "password") == 0)
auth_flag = 1;
return auth_flag
}
int main(int argc, char* argv[]) {
if(argc < 2) {
printf("Usage: %s <password>\n", argv[0]);
}
if(check_authentication(argv[1])) {
printf("Access Granted.\n");
} else {
printf("Access Denied.\n");
}
}
首先编译后,我用 ./a.out password
进行了测试,这显然有效,然后用 ./a.out testtest
进行了测试,它也按预期工作。但是,如果我想通过输入 ./a.out AAAAAAAAAAAAAAAAA
(恰好是 17 个“A”,因此对于 password_buffer
而言太多了)来调用缓冲区溢出,从而使程序出现异常并打印 Access Granted.
,程序刚刚退出,OSX El Capitan 告诉我我有一个 segmentation fault
。 (顺便说一句。我也尝试了更多的“A”,但显然仍然有同样的错误。)
这是为什么? Apple 的内存管理是否已经进化到不能被这样简单的事情所欺骗?帮助将不胜感激!如果您知道其他介绍如何学习黑客技术的好网站,请随时参考!
我刚刚找到了解决方案! (yay \o/)
起初我尝试通过以下方式编译它:
gcc -fno-stack-protector auth_overflow.c
然而,这并没有多大帮助。我还必须将 -D_FORTIFY_SOURCE=0
-flag 设置为零,如下所示:
gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 auth_overflow.c
。
这样终于成功了,我得到了:
./a.out AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Access Granted.
我买了 Jon Erickson 的书 "Hacking - The Art of Exploitation",他在书中描述了一个缓冲区溢出的简单示例,如下所示:
int check_authentication(char *password) {
int auth_flag = 0;
char password_buffer[16];
strcpy(password_buffer, password);
if(strcmp(password_buffer, "password") == 0)
auth_flag = 1;
return auth_flag
}
int main(int argc, char* argv[]) {
if(argc < 2) {
printf("Usage: %s <password>\n", argv[0]);
}
if(check_authentication(argv[1])) {
printf("Access Granted.\n");
} else {
printf("Access Denied.\n");
}
}
首先编译后,我用 ./a.out password
进行了测试,这显然有效,然后用 ./a.out testtest
进行了测试,它也按预期工作。但是,如果我想通过输入 ./a.out AAAAAAAAAAAAAAAAA
(恰好是 17 个“A”,因此对于 password_buffer
而言太多了)来调用缓冲区溢出,从而使程序出现异常并打印 Access Granted.
,程序刚刚退出,OSX El Capitan 告诉我我有一个 segmentation fault
。 (顺便说一句。我也尝试了更多的“A”,但显然仍然有同样的错误。)
这是为什么? Apple 的内存管理是否已经进化到不能被这样简单的事情所欺骗?帮助将不胜感激!如果您知道其他介绍如何学习黑客技术的好网站,请随时参考!
我刚刚找到了解决方案! (yay \o/)
起初我尝试通过以下方式编译它:
gcc -fno-stack-protector auth_overflow.c
然而,这并没有多大帮助。我还必须将 -D_FORTIFY_SOURCE=0
-flag 设置为零,如下所示:
gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 auth_overflow.c
。
这样终于成功了,我得到了:
./a.out AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Access Granted.