c - 我如何利用缓冲区溢出?

标签 c buffer overflow buffer-overflow exploit

我有一项家庭作业要利用给定程序中的缓冲区溢出。

#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/

相关文章:

c - 为什么在使用 getchar 输入时 putchar 不返回新行?

c - 如何停止一个计数器变量,该变量不断地计算先前 for 循环的值? C程序

java - 如何实现RingFiFoBuffer

java - 缓冲读取器和优先级队列一起工作?

css - 溢出-x错误?全浏览器宽度条技术

c - Pebble 不显示文本

c - 如何在c中创建一个双向链表

OpenGL:VAO 和 VBO 是否适用于大型多边形渲染任务?

c++ - 结构构造函数问题导致堆栈溢出

css - 如何揭开具有固定内容的 div