我所指的代码可以在这里找到:Link to code
我读到缓冲区溢出漏洞使用的缓冲区看起来像这样:
| NOP SLED | SHELLCODE | REPEATED RETURN ADDRESS |
据我了解,当缓冲区作为函数参数放入堆栈并覆盖函数的返回地址时,就会发生漏洞利用。我也明白重复的返回地址指向堆栈上同一缓冲区中的 NOP sled。
我不明白的是以下内容:
为什么返回地址必须指向同一个缓冲区中的shellcode?有人告诉我,我不能让返回地址指向 shellcode 数组(而不是同一缓冲区中 NOP sled 中的地址),因为不同的进程不能访问彼此的内存或类似的东西。如果有人能向我解释这一点,我会很高兴。
例如,缓冲区上的返回地址如何与原始地址完全对齐,以便
ret
命令读取正确的地址而不是从中间读取它。我所指的是缓冲区上的重复返回命令覆盖了堆栈上的原始返回命令,该命令是用call
指令推送到那里的。为什么覆盖返回地址与原始地址完全对齐?