什么是缓冲区溢出?有什么危害?原因是什么?

什么是缓冲区溢出?有什么危害?原因是什么?nbsp nbsp nbsp nbsp 缓冲区溢出是指当计算机向缓冲区填充数据时超出了缓冲区本身的容量 溢出的数据覆盖在合法数据上 nbsp nbsp nbsp nbsp nbsp 危害有以下两点 nbsp nbsp nbsp nbsp 1 程序崩溃 导致拒绝服务 nbsp nbsp nbsp nbsp 2 跳转并且执行一段恶意代码 nbsp nbsp nbsp nbsp 原因 造成缓冲区溢出的主要原因是程序中没有仔细检查用户输入 nbsp nbsp nbsp nbsp nbsp 所谓缓冲区可以更抽象地理解为一段可读写的内存区域 缓冲区攻击的

       缓冲区溢出是指当计算机向缓冲区填充数据时超出了缓冲区本身的容量,溢出的数据覆盖在合法数据上。

 

       危害有以下两点:

       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这样的函数参数,并在这里放上我们想要执行的代码!这样,不管程序被加载到哪个位置,最终都会回来执行栈内的代码。

 

什么是缓冲区溢出?有什么危害?原因是什么?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219863.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午9:43
下一篇 2026年3月17日 下午9:43


相关推荐

  • ClassCastException深入分「建议收藏」

    ClassCastException深入分「建议收藏」ClassCastException深入分析

    2025年10月17日
    5
  • 极简版 skills 使用指南

    极简版 skills 使用指南

    2026年3月13日
    3
  • DATETIME 和 SMALLDATETIME 的内部存储

    DATETIME 和 SMALLDATETIME 的内部存储—-DATETIME和SMALLDATETIME的内部存储与我们输入的或者显示的是完全不一样的。具体的不多说了—-看下面的演示 –1.datetime的内部存储 declare@dtdatetimeset@dt=current_timestamp  —datetime在数据库中是以8字节存储的前4个存储的是以1900-01-01为基准算出

    2022年5月19日
    26
  • 京瓷5501i A3小册子打印设置

    京瓷5501i A3小册子打印设置京瓷 5501iA3 小册子打印设置 目的 4 张 A4 纸的内容要打印在一张 A3 纸上 并且中间折叠 像小册子 设置 1 选择 版面 小册子 左边装订 2 选择 基本 打印尺寸 A3 页面尺寸 A4 3 然后打印就可以了转载于 https blog 51cto com

    2026年3月16日
    3
  • android移动点餐系统内容和要求,基于Android云计算的移动点餐系统

    android移动点餐系统内容和要求,基于Android云计算的移动点餐系统摘要:系统发挥Android富有创造力和想象力的云应用开发,实现一套Android客户端软件和完善的后台服务功能来完成点餐功能。该系统主要包括后台数据库服务器、WEB服务器、无线网络、Android前端等部分。客户端Android系统智能手机具有前端处理与计算能力,而且通过无线网络访问WEB服务器,如果需要数据访问,则访问后台数据库。介绍了系统架构的设计与搭建、技术选型、后台数据库的…

    2022年6月20日
    36
  • CentOS 7安装和简单配置ss5

    CentOS 7安装和简单配置ss5系统及软件 centos764 位 3 10 0ss5 3 8 9 8 安装编译环境 yum yinstallgcca 安装依赖 yum yinstallpam developenlda develcyrus sasl developenssl devel 解压源码包 tar xvfss5 x x x x tar gz 进入解压后的目录 依次执行 自动配

    2025年6月10日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号