[翻译]Windows漏洞利用开发 - 第4部分:使用跳转定位Shellcode
Author:Mike Czumak
翻译:moonAgirl
概观
在第2和第3部分中,我们构建并改进了ASX To MP3转换器的一个漏洞利用。尽管它存在缺陷,但就漏洞而言,它非常简单直接 - 直接利用指向我们shellcode的寄存器从而直接跳转到EIP覆盖。事情并不总是那么容易。通常你必须做更多的工作来让应用程序执行到你的shellcode。在本系列的这一部分中,我们将研究如何在漏洞利用中使用跳转代码。具体来说,我们将看看如何操作寄存器和栈,并使用条件/无条件跳转来构造自定义跳转代码,以便成功实现和执行shellcode。
跳转到Shellcode
在我们的第一个例子中,我们很幸运,因为我们有一个寄存器(EBX)直接指向我们shellcode的一个不间断部分,这意味着我们只需要一个调用/ jmp指令来执行它。如果一个寄存器只指向我们的缓冲区中shellcode的一小部分,会发生什么?或者,如果指向点接近,但不完全在我们的缓冲区?或者,如果没有寄存器指向我们的shellcode,但是我们在堆栈上看到了一个地址。在这些情况下,除了迄今为止我们使用的标准调用/ jmp指令外,我们还有几个选项。当涉及到跳转代码时,我喜欢在以下方面考虑可用的选项:
1.操作寄存器 通过添加/减去寄存器并跳转到修改后的地址(add / sub [reg] + jmp) 通过查找跳转到寄存器偏移量的指令(jmp reg + offset) 2.操作堆栈 通过将我们选择的地址推入堆栈并发出返回(push + ret) 通过从堆栈中弹出一系列地址并发出返回(pop + ret或popad + ret) 3.使用无条件和有条件跳转跳转到shellcode
我们仔细看看..
操作寄存器
1. add [reg] + jmp
当你运气不佳,虽然寄存器直接指向缓冲区的一部分,它也可能不是允许立即执行shellcode的位置。但是,您可能会增加/减少寄存器中的地址,然后强制应用程序跳转到该地址。
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
