我试图通过通过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。

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

最佳答案

我将给这个疑问带来好处,并假定这是旨在了解堆栈(也许是家庭作业)而不是学习如何进行任何恶意操作的练习。

考虑一下goodFunctionUserInput的返回地址在堆栈上的位置以及更改它会发生什么。您可能希望检查反汇编,以查看编译器为goodFunctionUserInput占用的堆栈空间以及确切的buf位置。当您确定要输入多长时间的字符串时,请考虑机器的字节序,这对于您要覆盖到goodFunctionUserInput的返回地址中的地址意味着什么。在这里,担心要对堆栈执行何种糟糕的操作并不重要,因为您要调用的函数只是调用退出。

10-06 10:44
查看更多