粉碎堆栈

时间:2013-10-01 00:57:50

标签: c++ buffer-overflow stack-smash

所以我正在为一个安全类做一个赋值,并且赋值是使用堆栈溢出来调用从未使用它的函数oopsDidISmashTheStack。

#include <stdio.h>
#include <stdlib.h>

int oopsDidISmashTheStack(void)
{
    printf("Yup, smashing the stack is fun!\n");
    exit(0);
}

int getUserInput (void)
{
    char buf[12];
    gets(buf);
    return(1);
}

int main(void)
{
    getUserInput ();
    printf("Overflow failed, normal return\n");
    return(1);
}

我理解了buf变量之后的概念是sfp然后返回地址我想不到的是将返回值更改为地址0x080484fc的输入,这是函数所在的位置。我认为它需要12个字符来填充缓冲区,然后我的印象是sfp并返回4个字节,所以我试图用另外4个随机字符填充sfp然后使用\ xfc \ x84 \ x04 \ x08来制作返回地址指向函数。

如果有人熟悉堆栈内存是如何工作的,并且可以解释我哪里出错那会很棒?

1 个答案:

答案 0 :(得分:0)

你几乎走在正确的轨道上。我建议你查看堆栈,看看返回地址是否在你认为的位置。那里可能还有别的东西。还要仔细检查内部性,

我认为这是你的输入字符串?

“012345678901xxxx \ XFC \ X84 \ X04 \ X08”

你的程序输出是什么,一般来说,如果你已经关闭但是程序崩溃得不是很正确:)