【问题标题】:Determine needed # of extra bytes to conduct buffer overflow attack (homework)确定进行缓冲区溢出攻击所需的额外字节数(作业)
【发布时间】:2018-02-22 05:26:25
【问题描述】:

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

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

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

(第 2 步摘录)

在我的例子中,我发现startingAddressOfBufVariable0x55683ddc%ebp0x55683df0

我计算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 更改为61?):

perl -e 'print "AA "x32, "BB "x4, "CC "x4, "2b 8b 04 08" '>hex3

(第 4 步摘录:)

那么,我是否在指南的第 2 步中使用了不正确的数学?我在数学中使用的地址是否不正确?如果它们是正确的,我如何解释-8 结果,-8 结果是什么意思,在修改我的字符输入以执行溢出攻击方面?

【问题讨论】:

  • 您是否在检查第 2 步中的值之前先进入getbuf?我怀疑您在此之前就这样做了,这就是为什么 ebp 稍微偏离了。
  • 'a' == 0x61 在 ASCII 编码中,以及许多其他现代字符串编码,如 UTF8 或 Windows 的几乎所有拉丁字母编码保持低 0-127 值兼容。但这意味着61"a",而不是"aa""aa"0x6161(两个字节)。 (就像'A'0x41 ...检查任何ASCII表,看看大多数英文文本是如何在计算机中从字母编码成数字的,因为计算机根本不知道任何字母)
  • 阅读更多这些图片,看起来作者的想法有些冲突,有时使用 ASCII 码 0x41/0x61 的字符如 a/A 来获得堆栈内存的“a/A”填充,有时他们只是使用像 0xAA 这样的十六进制值来填充内存(通常在 UTF8 linux 调试器中显示为点“。”,因为它不是有效的 7 位 ASCII 代码,并且像内存区域一样显示单字节对编写代码没有意义 -以 UTF8 方式指向,其中几个字节可能只形成一个字母)。取决于您如何检查内存,您当前显示双字值 0xAA、0xBB、0xCC 的方式可能更“可见”。
  • 如果您将该内存显示为“字符串”(许多调试器提供两个窗格的内存视图,通常左侧是数值,右侧是这些值的 ASCII“字符串”解释),那么像 0x61, 0x62, 0x63, ... 这样的值会在 ASCII 解释的窗格中产生字母 a, b, c, ...(使填充更“可见”)。

标签: c assembly buffer-overflow


【解决方案1】:

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

【讨论】:

  • 这有点尴尬。我应该更仔细地阅读我的原始说明,以了解我的作业中的缓冲区大小是 12,而不是像指南中那样是 32。在我进行相应调整并通过首先将字母转换为它们各自的十六进制值(perl -e 'print "61 "x12, "62 "x4, "63 "x4, "64 "x4, "2b 8b 04 08" '>hex3)来创建我的hex3 文件之后,我成功了。谢谢!
猜你喜欢
  • 2011-11-12
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 2018-08-11
  • 2019-10-23
  • 2019-04-14
  • 2016-06-06
  • 2021-02-25
相关资源
最近更新 更多