原理:
通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,造成程序崩溃或使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。
攻击者在通过超长的数据包发送覆盖了程序buffer的关键返回ret位置,导致CPU控制流的劫持,错误地把攻击者数据当作代码来执行
详细说明:
缓冲区是程序运行时计算机内存中的一个连续的块,它保存了给定类型的数据.问题随着动态分配变量而出现.为了不用太多的内存,一个有动态分配变量的程序在程序运行时才决定给他们分配多少内存.如果程序在动态分配缓冲区放入太多的数据会有什么现象?它溢出了,漏到了别的地方.一个缓冲区溢出应用程序使用这个溢出的数据将汇编语言代码放到计算机的内存中,通常是产生root权限的地方.单单的缓冲区溢出,并不会产生安全问题.只有将溢出送到能够以root权限运行命令的区域才行.这样,一个缓冲区利用程序将能运行的指令放在了有root权限的内存中,从而一旦运行这些指令,就是以root权限控制了计算机.
总结一下上面的描述.缓冲区溢出指的是一种系统攻击的手段,通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的.据统计,通过缓冲区溢出进行的攻击占所有系统攻击总数的80%以上.
危害:
缓冲区溢出攻击,可以导致程序运行失败、系统关机、重新启动,或者执行攻击者的指令,比如非法提升权限,等操纵程序的内存中的内容。
解决:
代码->通过实现安全编码实践,解决安全问题的应用程序在开发和测试来预防。
另外,也可详细查看相关blog:http://www.cnblogs.com/fanzhidongyzby/archive/2013/08/10/3250405.html
试了下,没看懂 =。=
还有:http://www.freebuf.com/articles/system/40107.html