装配返回地址替换

问题描述 投票:1回答:1

我已经看到,通过替换堆栈上的返回地址,可以使EIP指向作为堆栈一部分的地址。 但是,例如,JMP需要程序员在段之间进行远程跳转时指定代码段。更换返回地址会发生什么? CS会改变吗?

assembly x86 exploit
1个回答
1
投票

far call / far ret以及你提到的far jmp也存在,但也没有人使用它们。 (所有主流操作系统都使用平坦的内存模型,其中cs是常量。)

任何正常的编译器生成的代码都将使用near ret,因此它只会弹出到EIP / RIP中,而不是CS:EIP中更宽的值。


如果你希望你的漏洞利用在32位进程中切换到操作系统的64位用户空间代码段选择器值(反之亦然),那么你将需要获得足够的控制来运行far jmp / call / ret在您的有效负载中,或跳转到某个地方存在的另一个指令或可执行页面上的数据。

请注意,在某些情况下,操作系统可能无法保留您修改过的csFor example, some ways of invoking Linux system calls set cs to the kernel's __USER32_CS constant.

© www.soinside.com 2019 - 2024. All rights reserved.