缓冲区溢出更改返回的地址

时间:2015-07-26 20:26:10

标签: c buffer overflow memory-address

我试图通过oopsIGotToTheBadFunction中的用户输入更改返回地址来调用goodFunctionUserInput。 这是代码:

#include <stdio.h>
#include <stdlib.h>

int oopsIGotToTheBadFunction(void)
{
    printf("Gotcha!\n");
    exit(0);
}

int goodFunctionUserInput(void)
{
    char buf[12];
    gets(buf);
    return(1);
}

int main(void)
{
    goodFunctionUserInput();
    printf("Overflow failed\n");
    return(1);
}


/**
> gcc  isThisGood.c

> a.out

hello

Overflow failed

*/

我已经尝试使用0123456789012345加载缓冲区,但不确定要为其余部分添加什么来获取地址。地址是0x1000008fc。

任何见解或评论都会有所帮助。

1 个答案:

答案 0 :(得分:0)

我将怀疑这一点,并假设这是一个旨在了解堆栈(可能是家庭作业)而不是学习如何做任何恶意行为的练习。

考虑goodFunctionUserInput的返回地址在堆栈上的位置以及如果更改它会发生什么。您可能希望检查反汇编以查看编译器为goodFunctionUserInput创建的堆栈空间以及buf的确切位置。当您确定要输入的字符串的长度时,请考虑机器的字节顺序以及对于要覆盖到goodFunctionUserInput的返回地址的地址的含义。担心这对堆栈造成什么样的糟糕事情并不重要,因为你要调用的函数只是调用exit。