软件漏洞发觉与防范的学习(一)缓冲区溢出漏洞

安全很重要,从今天开始学习,愿与大家分享!

软件安全漏洞

软件的bug被利用来对用户造成恶意攻击,如给用户计算机安装木马,或直接盗取用户计算机上的秘密信息等。这时候就可以称之为软件的安全漏洞。

 

软件漏洞分类

1缓冲区溢出漏洞

最容易发生,原理是由于软件在处理用户数据时使用了不限边界的拷贝,导致程序内部的关键数据被覆盖,引发的安全问题。

缓冲区指的是OS中用来保存临时数据的空间,一般分为堆和栈。

利用缓冲区溢出攻击,可以导致程序运行失败、系统宕机、重新启动等后果。更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。

当前web和OS中,50%以上的攻击都来自于这个漏洞。而缓冲区溢出中岁危险的是栈溢出,因为入侵者可以利用栈溢出,在函数返回时改变返回程序的地址,让其转移到任意地址,危害是使程序崩溃导致拒绝服务或者是跳转并且执行一段恶意代码,比如得到shell,然后恣意妄为。

下面主要讲解一下栈溢出。

栈溢出的最直接危害是过量放进内存空间的数据会将函数的返回地址覆盖。“返回地址”指的是,程序调用函数时,CPU首先将执行完这个函数后将要执行的指令地址存储到栈空间中,然后CPU执行函数,执行完毕后,CPU取出保存的指令地址,然后接着执行。栈是一个先进后出(LIFO)的结构,而堆是一个先进先出(FIFO)的结构。返回地址保存在栈中,而程序一般定义的空间也在栈中,这就导致有了覆盖返回地址的机会。

这个覆盖值可以使故意输入的值,这样就能完全控制把什么数值覆盖到程序的返回地址上,如果将一段恶意代码预先放入内存中的某个地址,再将这个地址覆盖到程序的返回地址上,这样程序一旦溢出后返回,就会跳到目的代码上去执行。(ShellCode和OllyICE会在后面介绍)

因此,可以用不同长度的数据来测试软件,从而判断多长的数据能成功覆盖程序的返回地址。一旦发现刚好覆盖了,就马上替换这4个字节数据为jmp esp或者call esp指令的地址,然后加上ShellCode,在次提交给软件,即可成功的利用软件的缓冲区溢出漏洞。

堆溢出比较复杂,系统管理堆采用的是一个双向链表结构。堆中的数据是先进先出,当堆发生溢出,主要是管理堆结构的一些关键指针数据被覆盖了。

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值