我试图通过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。
任何见解或评论都会有所帮助。
答案 0 :(得分:0)
我将怀疑这一点,并假设这是一个旨在了解堆栈(可能是家庭作业)而不是学习如何做任何恶意行为的练习。
考虑goodFunctionUserInput的返回地址在堆栈上的位置以及如果更改它会发生什么。您可能希望检查反汇编以查看编译器为goodFunctionUserInput创建的堆栈空间以及buf的确切位置。当您确定要输入的字符串的长度时,请考虑机器的字节顺序以及对于要覆盖到goodFunctionUserInput的返回地址的地址的含义。担心这对堆栈造成什么样的糟糕事情并不重要,因为你要调用的函数只是调用exit。