我试图了解经典的缓冲区溢出漏洞,其中输入缓冲区会覆盖堆栈,函数返回地址将保存在堆栈和上层内存区域(通常将shell代码放在此处)中。
互联网上有很多这样的例子,我想我已经很好地理解了这一点:
现在出现了问题。
到目前为止,我已阅读的所有文章都在DLL中寻找“JMP ESP”指令的地址(该地址不能重定位,不能用ASLR编译,等等)。为什么不在exe本身中寻找“jmp esp”呢?为什么它需要在DLL中?
我已经在Immunity Debugger中运行了“!mona modules”命令,并且显示的满足所有这些条件的唯一模块是exe本身。当我查看流行的漏洞利用数据库时,该地址始终位于已加载的DLL中。
我看不出有任何明显的原因。该exe也可以以与DLL相同的方式位于内存中的同一地址。有什么区别?
最佳答案
在此找到了另一个资源:
正如我之前在评论中所写,exe的地址通常包含零:
http://resources.infosecinstitute.com/in-depth-seh-exploit-writing-tutorial-using-ollydbg/#commands
关于c - 缓冲区溢出漏洞: Why does "jmp esp" need to be located in a DLL?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34369379/