从角度来看缓冲区溢出只是个再简单不过编程--都是有关复制个内存区域内容到另个内存区域而目标内存区域容量太小无法容纳以下代码作了简单演示:
char* source = "A reasonably long ";
char dest[10];
::strcpy(dest, source);
在本例中源串长度为25个(包括了空结束符)它对目标内存块来说无疑太大了而目标内存块声明在堆栈上;当此代码执行时将会破坏掉原有堆栈会个访问违例而崩溃如果此源内存块由外部第 3方提供那么就有可能存在个漏洞它允许传入内存块以种特定方式修改堆栈
当在C/C中个时返回地址被存放在堆栈中因此在被执行完毕时执行流程能重新返回到原处如果了个可能包含潜在缓冲区溢出返回地址可能会被修改而且执行流程将会跳到缓冲区数据中指定地方通过改变返回地址攻击者可获取进程中任意位置代码以执行般而言主要可以两种方式被利用:
·如果带有漏洞是已知、且容易访问到攻击者可查找某地址这通常会在所有进程例子处固定地址处被找到;并修改堆栈等着此被
·要执行指令可作为缓冲区部分传递到进程地址空间攻击者利用此来完成攻击
最新评论