gpt4 book ai didi

c - 缓冲区溢出攻击格式

转载 作者:太空狗 更新时间:2023-10-29 17:09:04 26 4
gpt4 key购买 nike

通常我们都看到基本的缓冲区溢出格式有:- NOPs + shellcode + return_address

我们为什么不使用, NOPs + return_address + shellcode?我们在哪里使返回地址指向 shellcode 的开头?

我猜这是因为如果漏洞在 main() 中,我们可能会尝试在堆栈段之外写入数据。我对吗?如果我是,这是唯一的原因吗?

哦,是的,我指的不是使用 return-to-libc、ptrace 等的其他类型的攻击;我只是想知道为什么最基本的缓冲区溢出攻击都以第一种方式进行演示,而不是到处都是第二种方式。

最佳答案

返回地址可以在shellcode+nop sled之前或之后。例如,如果您正在写入一个靠近堆栈顶部的变量,您可能必须将 nop sled+shell code 写入返回地址 (EIP) 之后,因为可能没有足够的空间。

但是,NOP sled 将始终位于 shell 代码旁边。原因是因为您使用 nop sled 使 shell 代码的目标尽可能大。如果您的 EIP 从您的 shell 代码指向 +=100 字节,那么您需要使用超过 100 字节的 nop sled 来保证您会达到目标。因此 NOPs + return_address + shellcode 是无效的。一个常见的漏洞利用字符串如下所示:

JUNK + return_address + NOPs + shellcode

当然,“return-to-libc” 风格的攻击不需要 shellcode 或 nop sled。

这种简单的基于堆栈的缓冲区溢出漏洞利用在现代系统上不起作用。 Alpeh-One 的 Smashing The Stack For Fun and Profit 不再有效,因为 NX 区域、堆栈金丝雀和 ASLR,所有这些在 Windows 和 Linux 上都是默认设置。

你应该拿起一份:

enter image description here

关于c - 缓冲区溢出攻击格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5287874/

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