gpt4 book ai didi

security - Write buffer overflow exploit——如何找出shellcode的地址?

转载 作者:行者123 更新时间:2023-12-03 22:21:27 24 4
gpt4 key购买 nike

在编写缓冲区溢出漏洞时,我知道我需要输入一个长度数组(address_of_return_address - address_of_buffer)。并且数组需要填充shellcode的地址。这样当我的输入数组溢出时,它会用 shellcode 的地址覆盖保存的返回地址。

我认为由于 shellcode 将存储在堆栈中保存的返回地址之上,因此其地址应该是 address_of_return_address + 到 shellcode 开头的距离。

我走在正确的轨道上吗?如果是这样,我应该如何使用 GDB 计算出保存的返回地址与到 shellcode 开头的距离之间的距离?

最佳答案

您通常不需要“找出”shellcode 的地址。您使用设置的字符串溢出缓冲区并计算出偏移量。说

AAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBCCCC

BBBB 覆盖 EIP(下一条指令地址),CCCC 落入 ESP 寄存器指向的位置。

您需要找到一条可以在 shellcode 处继续执行的指令,您可以将其插入到 CCCC 开始的位置。如JMP ESP指令。这需要是静态的(例如,没有 ASLR)并且地址不应包含任何“坏”字符,例如可能终止缓冲区的 \x00

所以过程是:

  1. 缓冲区溢出了 A
  2. EIP 现在指向您所在的 JMP ESP 指令。
  3. JMP ESP 由处理器执行 - 因为 ESP 指向您的 shellcode,执行会在此处继续。

您可能需要在您的 shellcode 开头添加一些额外的填充,例如NOP (\x90) 允许在使用编码负载时进行任何解码扩展。然而,一些 AV 和 IDS 会一起检测许多 NOP 的签名,因此处理器忙于工作而不是防止检测可能会更好。

这是通常的方法,尽管这完全取决于您的负载是否有空间以及您是否设法以与上述类似的方式定位它。 NOP sleds等技术可用于更轻松地定位有效载荷,以防您需要在其他地方编写它们。

关于security - Write buffer overflow exploit——如何找出shellcode的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28716669/

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