似乎一个常见的漏洞利用技巧是使用堆栈溢出来覆盖指令指针,使其指向jmp esp代码段中某处的指令,然后执行攻击者选择的任意代码。
但是,我很难理解使用合法程序(据我所知,这些程序通常不会自我修改,并且所有可执行代码都存储在代码段中)在jmp esp首先包含此类指令时会产生什么。
似乎一个常见的漏洞利用技巧是使用堆栈溢出来覆盖指令指针,使其指向jmp esp代码段中某处的指令,然后执行攻击者选择的任意代码。
但是,我很难理解使用合法程序(据我所知,这些程序通常不会自我修改,并且所有可执行代码都存储在代码段中)在jmp esp首先包含此类指令时会产生什么。
该指令jmp esp被编码为FF E4. 不需要找到实际的jmp指令,只需找到任何其他代码或数据中间的那些字节。
这是面向返回编程 (ROP) 的基础,这些有用指令的小序列通常被称为“ROP gadgets”。
请注意,这种特殊技术很容易被不可执行的堆栈破坏。需要可执行堆栈的情况非常罕见(在 JIT 编译器等特定情况之外),因此这是一种简单而有效的缓解措施。为了解决这个问题,有诸如 return-to-libc 之类的技术可以链接许多这些小的 ROP 小工具来构建更长的指令序列。