什么是缓冲区溢出?有什么危害?原因是什么?
缓冲区溢出是指当计算机向缓冲区填充数据时超出了缓冲区本身的容量,溢出的数据覆盖在合法数据上。
危害有以下两点:
1、程序崩溃,导致拒绝服务
2、跳转并且执行一段恶意代码
原因:造成缓冲区溢出的主要原因是程序中没有仔细检查用户输入。
所谓缓冲区可以更抽象地理解为一段可读写的内存区域,缓冲区攻击的最终目的就是希望系统能执行这块可读写内存中已经被蓄意设定好的恶意代码。按照冯·诺依曼存储程序原理,程序代码是作为二进制数据存储在内存的,同样程序的数据也在内存中,因此直接从内存的二进制形式上是无法区分哪些是数据哪些是代码的,这也为缓冲区溢出攻击提供了可能。
当然,随便往缓冲区中填东西造成它溢出一般只会出现分段错误(Segmentation fault),而不能达到攻击的目的。最常见的手段是通过制造缓冲区溢出使程序运行一个用户shell,再通过shell执行其它命令。如果该程序属于root且有suid权限的话,攻击者就获得了一个有root权限的shell,可以对系统进行任意操作了。
由于栈是低地址方向增长的,因此局部数组buffer的指针在缓冲区的下方。当把data的数据拷贝到buffer内时,超过缓冲区区域的高地址部分数据会“淹没”原本的其他栈帧数据,根据淹没数据的内容不同,可能会有产生以下情况:
1、淹没了其他的局部变量。如果被淹没的局部变量是条件变量,那么可能会改变函数原本的执行流程。这种方式可以用于破解简单的软件验证。
2、淹没了ebp的值。修改了函数执行结束后要恢复的栈指针,将会导致栈帧失去平衡。
3、淹没了返回地址。这是栈溢出原理的核心所在,通过淹没的方式修改函数的返回地址,使程序代码执行“意外”的流程!
4、淹没参数变量。修改函数的参数变量也可能改变当前函数的执行结果和流程。
5、淹没上级函数的栈帧,情况与上述4点类似,只不过影响的是上级函数的执行。当然这里的前提是保证函数能正常返回,即函数地址不能被随意修改(这可能很麻烦!)。
如果在data本身的数据内就保存了一系列的指令的二进制代码,一旦栈溢出修改了函数的返回地址,并将该地址指向这段二进制代码的其他位置,那么就完成了基本的溢出攻击行为。
上述过程虽然理论上能完成栈溢出攻击行为,但是实际上很难实现。操作系统每次加载可执行文件到进程空间的位置都是无法预测的,因此栈的位置实际是不固定的,通过硬编码覆盖新返回地址的方式并不可靠。为了能准确定位shellcode的地址,需要借助一些额外的操作,其中最经典的是借助跳板的栈溢出方式。
根据前边所述,函数执行后,栈指针esp会恢复到压入参数时的状态,在图4中即data参数的地址。如果我们在函数的返回地址填入一个地址,该地址指向的内存保存了一条特殊的指令jmp esp——跳板。那么函数返回后,会执行该指令并跳转到esp所在的位置——即data的位置。我们可以将缓冲区再多溢出一部分,淹没data这样的函数参数,并在这里放上我们想要执行的代码!这样,不管程序被加载到哪个位置,最终都会回来执行栈内的代码。
什么是缓冲区溢出?有什么危害?原因是什么?相关推荐
- 验证本地缓冲区溢出漏洞攻击
Info:本篇主要是为了验证本地缓冲区溢出,这是理解缓冲区溢出攻击的第一步,有了这一步,才能更深刻的理解到什么是缓冲区漏洞攻击,从而对以后的学习奠定一定的基础(注意:以下请在linux环境下实验) 基 ...
- C++入门——缓冲区溢出
缓冲区溢出 概念 缓冲区是程序运行时机器内存中的一个连续块,它保存了给定类型的数据.缓冲区溢出是指当向缓冲区内填充数据位数超过了缓冲区自身的容量限制时,溢出的数据覆盖在合法数据(如数据.下一条指令的指 ...
- 操作系统——缓冲区溢出
一.缓冲区溢出介绍 1988年,世界上第一个缓冲区溢出攻击–Morris蠕虫在互联网上泛滥,短短一夜的时间全世界6000多台网络服务器瘫痪或半瘫痪,不计其数的数据和资料被毁.造成一场损失近亿美元的空前 ...
- 网络攻防实验之缓冲区溢出攻击
这个实验是网络攻防课程实验中的一个,但是目前我还没有完全搞懂代码,以后有机会来补.也欢迎大佬指点 一.实验目的和要求 通过实验掌握缓冲区溢出的原理,通过使用缓冲区溢出攻击软件模拟入侵远程主机理解缓冲区 ...
- C语言入坑指南-缓冲区溢出
前言 缓冲区溢出通常指的是向缓冲区写入了超过缓冲区所能保存的最大数据量的数据.如果说之前所提到的一些问题可能只是影响部分功能的实现,那么缓冲区溢出将可能会造成程序运行终止,被不安全代码攻击等严重问题, ...
- 什么是缓冲区溢出?有什么危害?其原因是什么?
缓冲区溢出是指当计算机向缓冲区填充数据时超出了缓冲区本身的容量,溢出的数据覆盖在合法数据上. 危害有以下两点: 程序崩溃,导致拒绝额服务 跳转并且执行一段恶意代码 造成缓冲区溢出的主要原因是程序中没有 ...
- 什么是缓冲区溢出?有说明危害?
缓存溢出 缓存溢出(Buffer overflow) ,是指在存在缓存溢出安全漏洞的计算机中,攻击者可以用超出常规长度的字符数来填满-一个域,通常是内存区地址.在某些情况下,这些过量的字符能够作为&q ...
- 避免缓冲区溢出的方法
缓冲区溢出一般是由于一下原因导致: 1.字符串处理函数没有指定长度,单单凭借结尾字符是不是'\0'来判断结束. 2.被处理的字符超过缓冲区可接受的大小.例如,从屏幕输入字符串:gets(buff),但 ...
- 绿盟于旸:让阿里安娜火箭爆炸的缓冲区溢出 linkboy语录:tk出品必是精品呵呵
腾讯科技讯 3月18日,由中国最大的互联网综合服务提供商腾讯发起和组织的互联网安全峰会在深圳召开.包括微软.盛大.新浪等互联网界各大巨头的技术专家,学者和专业人士参与了此次的交流.此次峰会是今年以来首 ...
最新文章
- 更新pcb封装导入_一导入PCB就出问题?赶紧看看这篇文章
- android studio logcat 无筛选 显示全部日志 无应用包名区分
- python 管道 异步读取 select_python之异步select解析
- C++学习笔记(1)-文件写入
- matlab斜杠报错,java调用matlab 时出现java.lang.NullPointerException错误
- Codeforces Beta Round #1 B. Spreadsheets 模拟
- doubango编码及发送流程的疑惑
- [路由器] k2p支持ipv6相关设置
- 阿尔法贝塔阀原理_阿尔法跟贝塔以及夏普讲的最通俗的
- 优化LNMP架构采用“Website Baker”为小型公司创建高性能网站方案
- 网络协议栈分析——从设备驱动到链路层
- 出国读计算机专业好吗,计算机美国读研 - 美国留学读计算机专业好不好
- 在向XSLFTable中填充内容时出现xmlvaluedisconnectedException的错误
- 我赢助手详解:抖音变现目前流行的是七种方式之直播变现和Ip变现
- 学好英语的42个经典要诀
- jq查找div下的第二个span
- [work] 如果看了此文你还不懂傅里叶变换,那就过来掐死我吧【完整版】
- 基于EFR32的Zigbee开发-介绍
- Android:安卓实现高考倒计时功能
- 如何让table边框变为单实线?