确定所需的额外字节数以进行缓冲区溢出攻击(作业)

时间:2018-02-22 05:26:25

标签: c assembly buffer-overflow

为了帮助完成大会中this buffer overflow project (.pdf)的第0级,我使用this guide

  

目标=提供比getbuf可以处理的字符串更长的时间(getbuf()   输入32个字符),导致溢出并推动其余部分   字符串到堆栈,然后你可以控制在哪里   函数getbuf在执行后返回(我们想调用smoke()函数)。

当我进入指南的第2步时,我需要在原始的32个字符输入之上计算我的输入字符串应该有多少个附加字符,以便执行缓冲区溢出并调用smoke()

(第2步摘录)

enter image description here

就我而言,我发现startingAddressOfBufVariable0x55683ddc%ebp0x55683df0

我计算buffer size = addressAt%ebp+4 - startingAddressOfBufVariable,即0x55683df0+4 - 0x55683ddc = 0x18 = 24

在下一步中,我应该从该结果中减去32,以确定我的输入字符串应该有多少个附加字符(在原始32之上)。但是,24 - 32 = -8。我得到一个负数!我不知道该怎么做。 从我的32个字符的输入字符串中减去 8个字符?我试图进行溢出,因此没有意义。

enter image description here

为了测试/猜测目的,我继续使用指南,假装我得到的-8结果实际上是正8。所以我继续使用指南,打算在我的32个字符的字符串上添加8个字符。

知道我的smoke()函数的地址为0x08048b2b,我根据步骤4中的说明创建了我的输入文件(尽管为什么他们将aa更改为{{ 1}}):

61

(第4步摘录:) enter image description here

所以,我在指南的第2步中使用了不正确的数学吗?我在数学中使用的地址不正确吗?如果它们是正确的,那么在修改我的字符输入以执行溢出攻击方面,如何解释perl -e 'print "AA "x32, "BB "x4, "CC "x4, "2b 8b 04 08" '>hex3 结果以及-8结果意味着什么?

1 个答案:

答案 0 :(得分:0)

他们在示例C代码中写入缓冲区大小为12.有意义的是,您必须从寄存器中推断缓冲区大小。也许再试一次基本字符串大小为0x18?