我有一个装有Windows XP Professional SP3 x86西班牙语的虚拟机,并且我已经禁用了DEP。
好吧,我正在执行"Easy RM 到 MP3 转换器"(是的,教程 Corelan 的程序)的漏洞利用POPPOPRET_JMPESP.pl,但没有工作,所以我做了 2 次测试:
第一个,也是成功的,替换跳到外壳代码开头的 JMP ESP,用于"CCCC"(\x43\x43\x43\x43),并在尝试执行此方向时产生错误。源截图
第二,向JMP ESP提供有效的方向和许多断点的shellcode。这里由于程序尝试执行的方向而产生错误,JMP ESP NO仅指向放置的断点。源截图
原始堆栈为:
缓冲区将填充 As
RET 地址将被替换为 POP POP RET 的方向
4 字节的垃圾将替换为"XXXX"
这里指出 ESP 在执行 POP POP RET 指令之前,以及 它将替换为 4 个 NOP
4
字节的垃圾,它将用 4 个 NOP 来支撑
4 字节的垃圾,ESP 将指向后面,以及 将被替换为 JMP ESP,这将占用堆栈 我们放的 RET 指令
这是外壳代码的开头,是将在哪里 在执行时点 JMP ESP
你是否正确地获得了你的外壳代码?
如果是,请检查您的外壳代码是否有任何奇怪的字符。该特定程序将停止复制 NULL 字符 (0x00) 以及其他几个字符的输入。最简单的方法是找到shellcode中正确复制的最后一个字符,并排除后面的字符。您可以使用metasploit生成不包括特定字符的shellcode。
如果没有,请检查偏移量和填充。