我试图通过通过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的返回地址中的地址意味着什么。在这里,担心要对堆栈执行何种糟糕的操作并不重要,因为您要调用的函数只是调用退出。