【问题标题】:Buffer Overflow to change address that gets returned to缓冲区溢出以更改返回的地址
【发布时间】:2015-07-26 20:26:09
【问题描述】:

我正在尝试通过goodFunctionUserInput 中的用户输入更改返回地址来调用oopsIGotToTheBadFunction。 代码如下:

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

任何见解或 cmets 都会有所帮助。

【问题讨论】:

  • 您将需要使用-fno-stack-protector 进行编译,以防止堆栈cookie 阻止您的工作。此外,您应该始终使用-Wall -Werror 进行编译以发现一堆愚蠢的错误。
  • 也许你应该去阅读原件,比如 Aleph 1 的 Smashing the stack for fun and profit
  • 每一个修铁路的工程师,都会有人为了消遣而试图让火车脱轨。
  • 如果你真的需要帮助来破坏某些东西,就去找一个帮派来壮大你。
  • 我投票结束这个问题作为题外话,因为我不是 100% 确定,但 OP 对缓冲区溢出漏洞利用比实际上对社交和/或专业有用的程序更感兴趣.

标签: c buffer overflow memory-address


【解决方案1】:

我将对此表示怀疑,并假设这是一个旨在了解堆栈(可能是家庭作业)的练习,而不是学习如何做任何恶意的事情。

考虑 goodFunctionUserInput 的返回地址在堆栈中的什么位置,如果更改它会发生什么。您可能希望检查反汇编以查看编译器为 goodFunctionUserInput 分配的堆栈空间以及 buf 的确切位置。当您确定要输入多长的字符串时,请考虑机器的字节顺序以及您想要覆盖到 goodFunctionUserInput 的返回地址中的地址意味着什么。担心这会对堆栈造成什么样的可怕事情在这里并不重要,因为您要调用的函数只是调用 exit。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-09
    • 2023-04-05
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 2015-08-26
    • 2019-01-05
    • 1970-01-01
    相关资源
    最近更新 更多