gpt4 book ai didi

x86 - 使用输入字符串和 ret 进行溢出攻击,x86

转载 作者:行者123 更新时间:2023-12-04 06:03:36 27 4
gpt4 key购买 nike

在问题之前,这纯粹是为了作业,否则我不打算错误地访问不安全的程序。

我有一个涉及溢出输入字符串的作业,以便 ret 指令将我发送到我想去的某个地址。该字符串预计最多 32 个字节,所以如果我用 32 个字节的垃圾填充它,然后是另外 4 个字节的垃圾,然后是我想要访问的 4 个字节的地址,那么我已经操纵程序调用了错误的函数。我在 32 之后填充 4 个字节的垃圾的原因是因为溢出字符串的函数这样结束:

8048bc9: e8 3c ff ff ff     call 8048b0a <Gets>
8048bce: b8 01 00 00 00 mov $0x1,%eax
8048bd3: c9 leave
8048bd4: c3 ret

<Gets> 是填充字符串的内容。如果我理解正确的话,4 个字节的垃圾在 %ebp 期间被弹出到 leave 中,然后我的 4 个字节由 ret 执行,基本上作为跳转到我想去的函数。

这足以解决简单的问题,但在某些情况下,我应该在使用 ret 跳到我想要的地方之前执行额外的代码。我对 ret 的理解不够好,无法做到这一点。如果我想说将 %eax 设置为某个值(例如 0x12345678),这怎么可能来自仍然必须跳转到错误函数的 ret 指令?

如果重要的话,这将以 32 位运行。我在问如何做额外的指令,因为第一个问题有不变的地址,但后面的问题有添加了随机值的地址。

最佳答案

正如 harold 提到的,解决方案是让返回函数将我发送到字符串缓冲区的开头。

这可以通过用 40 个字节(这是 32 位 x86)溢出字符串缓冲区来完成,这样前 32 个字节在字符串缓冲区中,4 个由 leave 指令弹出,并且最后 4 个由 ret 指令执行。目标是使最后 4 个字节成为我的字符串缓冲区的地址,采用小端格式。在 ret 指令执行完这 4 个字节后,我的机器代码开始从字符串缓冲区的开头执行。

关于x86 - 使用输入字符串和 ret 进行溢出攻击,x86,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15859187/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com