当前位置:文档之家› 缓冲区溢出攻击原因

缓冲区溢出攻击原因


缓冲区溢出的例子
void function( char *str ) { char buffer[16]; strcpy( buffer, str ); } int main() { int i; char buffer[128]; for( i=0; i<127; i++ ) buffer[i] = ‘A’; buffer[127] = 0; function( buffer ); print( “I got it!” ); return 0; }
缓冲区溢出攻击原因
缓冲区溢出(又称堆栈溢出)攻击是最常用 的黑客技术之一。C语言不检查缓冲区的边 界。在某些情况下,如果用户输入的数据长 度超过应用程序给定的缓冲区,就会覆盖其 他数据区,又称作“堆栈溢出或缓冲溢出”。
缓冲区溢出攻击描述
缓冲区溢出发生后,子程序的返回地址丢失 了,调用的参数也丢失了。这意味着程序不能得
例子
缓冲区溢出攻击最著名的案例就是莫里斯蠕 虫。
缓冲区溢出攻击的细节
堆栈的工作进程
内存 底部
·
局部变量2 局部变量1 返回指针 函数调用 的参数
填充 方向
内存 顶部
·
正常堆栈
缓冲区溢出攻击的细节
被入侵的堆栈
内存 底部
·
局部变量2 机器代码: execve(/bin/sh) 指向exec代 码的新指针 函数调用 的参数
填充 方向
内存 顶部
·
被入侵堆栈
到足够的信息从子程序返回,以完成它的任务。就 像一个人步行穿过沙漠。如果他依赖于他的足迹走 回头路,当沙暴来袭抹去了这些痕迹时,他将迷失 在沙漠中。如果有人不仅恶意的抹去了这些痕迹, 而且还故意画出另外的一列足迹,从而使得步行者 误入歧途。缓冲区溢出攻击正是用了这一思想。
缓冲区溢出攻击的危害
关于可得性的拒绝服务攻击 缓冲区溢出的任意代码将导致更改数据(针 对完整性的攻击) 敏感信息被读取(针对机密性的攻击)
相关主题