缓存溢出

缓存溢出(Buffer overflow),是指在存在缓存溢出安全漏洞的计算机中,攻击者可以用超出常规长度的字符数来填满一个域,通常是内存区地址。在某些情况下,这些过量的字符能够作为“可执行”代码来运行。从而使得攻击者可以不受安全措施的约束来控制被攻击的计算机。

1. 缓存溢出攻击方式

1.1 破坏活动记录

函数调用发生时,调用者会在栈中留下函数的活动记录,包含当前被调函数的参数、返回地址、前栈指针、变量缓存区等值,它们在栈中的存放顺序如图所示。
在这里插入图片描述

由它们在栈中的存放顺序可知,返回地址、栈指针与变量缓存区紧邻,且返回地址指向函数结束后要执行的下一条指令。栈指针指向上一个函数的活动记录,这样攻击者可以利用变量缓存区溢出来修改返回地址值和栈指针,从而改变程序的执行流。

1.2 破坏堆数据

程序运行时,用户用C、C++内存操作库函数如malloc、free等在堆内存空间分配存储和释放删除用户数据,对内存的使用情况如内存块的大小、它前后指向的内存块用一个链接类的数据结构予以记录管理,管理数据同样存放于堆中,且管理数据与用户数据是相邻的。这样,攻击者可以像破坏活动记录一样来溢出堆内存中分配的用户数据空间,从而破坏管理数据。因为堆内存数据中没有指针信息,所以即使破坏了管理数据也不会改变程序的执行流,但它还是会使正常的堆操作出错,导致不可预知的结果。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值