1

我遇到了一个有缓冲区溢出缺陷的 C 程序。我们需要让程序以我们的方式工作。根据我的理解,缓冲区溢出会覆盖下一个内存位置。如果我们考虑以下代码,如果密码是goodpassword,程序将授予访问权限。我想利用缓冲区溢出漏洞并将输入作为aaaaaaaaaaaaaaaaaaaaaaa(24 a's)覆盖下一个内存位置,以便程序接受输入授予访问权限。

但是,它无法正常工作,因为我认为该程序正在崩溃并且我无法利用该漏洞。你能告诉我我的方法出了什么问题吗?

#include <stdio.h>
#include <string.h>

int IsPasswordOk( ) { 
    char password[13]; 
    gets(password); 
    if(!strcmp(password,"goodpassword"))
        return 1; 
    else
        return 0; 
} 

int main(int argc, char* argv[]) { 
    int pwdStatus; 
    puts("Enter password"); 
    pwdStatus = IsPasswordOk(); 
    if(!pwdStatus) { 
        puts("Access denied!"); 
        return -1; 
    } 
    else puts("Access granted!"); 

    return 0; 
}
4

1 回答 1

0

溢出不一定总是指向有效位置。假设下一个位置可能位于下一页中并且您无权访问它。这取决于您的操作系统发行版如何处理这种情况。

于 2013-04-19T13:18:58.590 回答