我有一项家庭作业要利用给定程序中的缓冲区溢出。
#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);
}
教授希望我们利用输入 gets()。我们不应该以任何方式修改代码,只会创建一个会造成缓冲区溢出的恶意输入。我在网上看过,但我不确定该怎么做。我使用的是 gcc 5.2.0 版和 Windows 10 1703 版。任何提示都会很棒!
更新:
我查阅了一些教程,至少找到了我试图溢出的隐藏函数的地址,但我现在被卡住了。我一直在尝试运行这些命令:
gcc -g -o vuln -fno-stack-protector -m32 homework5.c
gdb ./vuln
disas main
break *0x00010880
run $(python -c "print('A'*256)")
x/200xb $esp
对于最后一个命令,它会提示“值无法转换为整数”。我尝试将 esp 替换为 rsp,因为我使用的是 64 位,但结果相同。是否有解决此问题或其他方法来查找 buf 地址的方法?
最佳答案
由于 buf 指向长度为 12 的字符数组,因此输入任何长度大于 12 的内容都会导致缓冲区溢出。
关于c - 我如何利用缓冲区溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44556590/