为了帮助完成大会中this buffer overflow project (.pdf)的第0级,我使用this guide。
目标=提供比getbuf可以处理的字符串更长的时间(
getbuf()
输入32个字符),导致溢出并推动其余部分 字符串到堆栈,然后你可以控制在哪里 函数getbuf在执行后返回(我们想调用smoke()
函数)。
当我进入指南的第2步时,我需要在原始的32个字符输入之上计算我的输入字符串应该有多少个附加字符,以便执行缓冲区溢出并调用smoke()
(第2步摘录):
就我而言,我发现startingAddressOfBufVariable
为0x55683ddc
而%ebp
为0x55683df0
。
我计算buffer size = addressAt%ebp+4 - startingAddressOfBufVariable
,即0x55683df0+4 - 0x55683ddc = 0x18 = 24
。
在下一步中,我应该从该结果中减去32,以确定我的输入字符串应该有多少个附加字符(在原始32之上)。但是,24 - 32 = -8
。我得到一个负数!我不知道该怎么做。 从我的32个字符的输入字符串中减去 8个字符?我试图进行溢出,因此没有意义。
为了测试/猜测目的,我继续使用指南,假装我得到的-8
结果实际上是正8
。所以我继续使用指南,打算在我的32个字符的字符串上添加8个字符。
知道我的smoke()
函数的地址为0x08048b2b
,我根据步骤4中的说明创建了我的输入文件(尽管为什么他们将aa
更改为{{ 1}}):
61
所以,我在指南的第2步中使用了不正确的数学吗?我在数学中使用的地址不正确吗?如果它们是正确的,那么在修改我的字符输入以执行溢出攻击方面,如何解释perl -e 'print "AA "x32, "BB "x4, "CC "x4, "2b 8b 04 08" '>hex3
结果以及-8
结果意味着什么?
答案 0 :(得分:0)
他们在示例C代码中写入缓冲区大小为12.有意义的是,您必须从寄存器中推断缓冲区大小。也许再试一次基本字符串大小为0x18?