,也称为Morris代码注入。先看下面一段C语言程序,这一函数将来自外部的一串字节复制到其局部数组buffer中,你能看出什么问题吗?#defineMAX_BUFFER_SIZE256voidroutine(char*p)/*p[]是来自外部的字符串*/{intx,y,u,v;charbuffer[MAX_BUFFER_SIZE];/*将输入字符串填入buffer:*/strcpy(buffer,p);…………return;}strcpy(buffer,p)将数组p[]的内容逐字节复制到数组buffer[],但没有检查p[]的实际长度是否超过buffer[]的容量,即MAX_BUFFER_SIZE!设想运行期间p[]承载的是来自外部的网络消息,而且该消息(有意或无意)确实超过了上界MAX_BUFFER_SIZE,这将导致数组buffer的溢出。图3-1栈溢出攻击图3-1栈溢出攻击(续),#defineMAX_BUFFER_SIZE256voidroutine(char*p)/*p[]是来自外部的字符串*/{charbuffer[MAX_BUFFER_SIZE];inti,n;/*将输入字符串填入buffer:*/n=strlen(p)<=MAX_BUFFER_SIZE?strlen(p):MAX_BUFFER_SIZE;for(i=0;i<=n;i++)buffer[i]=p[i];……}for循环在计算数组上界时错误地多计算了一个字节,结果在运行期间可能实际向栈帧写入257个字节,即溢出一个字节。仔细观察图3-3(a)中“父栈帧”地址项的位置和含义,不难发现一条间接的攻击途径。为解释这一攻击,需要先解释一下,“Little-Endian”机器和“Big-Endian”机器的区别。如图3-2所示,详细描述了单字节溢出攻击。图3-2Little-Endian和Big-Endian机器的区别图3-3Little-Endian机器上的单字节溢出攻击
网络安全教程 教学课件 ppt 田园 第3章 网络病毒的典型入侵机制 来自淘豆网www.taodocs.com转载请标明出处.