利用缓冲区溢出

问题描述 投票:0回答:2

我遇到过一个存在缓冲区溢出缺陷的 C 程序。 我们需要让这个计划按照我们的方式运作。根据我的理解,缓冲区溢出将覆盖下一个内存位置。如果我们考虑以下代码,如果密码是 goodpassword,程序就会授予访问权限。我想利用缓冲区溢出缺陷并将输入指定为 aaaaaaaaaaaaaaaaaaaaaaaa (24 a) 来覆盖下一个内存位置,以便程序接受以下输入授予访问权限。

然而,它不起作用,因为我认为该程序正在崩溃并且我无法利用该缺陷。您能让我知道我的方法出了什么问题吗?

#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; 
}
c buffer security buffer-overflow
2个回答
0
投票

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


0
投票

简单的答案,您无需溢出此处的缓冲区即可获得访问权限。由于该程序所做的只是将您的输入与固定字符串进行比较,因此只需提供该值即可。您使这个问题变得过于复杂,也无需覆盖现有变量,以防它用某个值初始化并与其他值进行比较,并且您无法控制输入,但这很简单,即使如果你有缓冲区溢出,你会用它做什么,没有你想调用的函数或你想覆盖的变量。如果您想了解何时利用缓冲区溢出以及发生缓冲区溢出时该怎么做,请查看此 github 存储库 https://github.com/Jeetu855/Binary-Exploitation

© www.soinside.com 2019 - 2024. All rights reserved.