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

article/2025/9/17 5:52:09

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

 

       危害有以下两点:

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

 


http://chatgpt.dhexx.cn/article/og8H4VZM.shtml

相关文章

什么是缓冲区溢出?有说明危害?

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

缓存区溢出的原理分析和防范

1.前言 缓冲区溢出(buffer-overflow)是一种非常普遍、同时非常危险的漏洞,在各种操作系统、应用软件中广泛存在。缓冲区溢出攻击是利用缓冲区溢出漏洞所进行的攻击,轻则可以导致程序失败、系统关机等,重则可以利用它执行非授权指令&#xff0…

缓存溢出

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

逆向基础:软件手动脱壳技术入门

前言: 大家好,我是周杰伦 这里整合了一下之前自己学习软件手工脱壳的一些笔记和脱文,希望能给新学软件逆向和脱壳的童鞋们一点帮助。 1 一些概念 1.1 加壳 加壳的全称应该是可执行程序资源压缩,是保护文件的常用手段。加壳过…

iOS逆向之脱壳工具creakerXI+,最简单、最适合新手的脱壳工具

在学习iOS逆向中,脱壳是必备技能之一,在网上看教程有使用 Clutch 和 dumpdecrypted 但是,不知道 是我操作问题,还是手机版本,以及APP版本更新问题 尝试了几次,都无法成功脱壳 最后在网上看到有大神分享其…

【How2RE】 UPX壳及脱壳方式

0x00 什么是壳 壳是另外在PE文件中包含的代码,并且不影响PE文件正常的执行。而壳也分为很多种,这里从UPX壳开始介绍。 0x01 压缩壳 压缩的分类 压缩的目的就是将体积大的可执行文件缩小的过程。分为损失压缩和非损失压缩两种。损失压缩是指不能100%还…

脱壳(中) 脱壳的方法

那些年我们一起脱过的衣裳-脱壳(中) 珈蓝夜宇 2015/10/29 10:42 0x01 我能在万花从中脱去壳的衣裳!(续) 3.3ESP定律法 3.3.1ESP定律介绍 ESP定律法是脱壳的利器,是国外友人发现的。有了ESP定律,可以方便我们脱掉大多…

脱壳简单总结

title: 脱壳 date: 2021-07-05 14:37:06 tags: RE 脱壳 1.概述: 1.壳: 一:加壳的目的:为了隐藏程序真正的OEP(入口点),防止被破解。 二:加壳软件是一种在编译好可执行文件之后&…

最新乐加固脱壳详细教程(有图有真相)

一、前言声明: 本次破解是基于Xposed Installer框架,具体使用方法请上网查询。假设你已经安装好框架,按照下面的步骤,实现乐加固加固脱壳修复DEX,并且重打包运行。本次选择脱壳的APP是小猿搜题,特此声明&a…

脱壳之简单加密壳

一、简单分析与解密 脱壳最重要的三步:找原始OEP,转存文件,修复文件   压缩壳按照这三步就可以完成脱壳,而加密壳因为对PE文件的信息进行了加密处理,找到OEP只是刚开始,还需要将加密之后的代码、数据进行…

iOS完美脱壳

iOS端IPA脱壳 背景:在软件安全领域中,我们与黑产做对抗时,不是被动防守,自己也可以做攻击方,来验证我方软件是否安全。 关于iOS端逆向分析如:虚拟定位、虚拟设备、修改内存等,始终离不开脱壳。…

脱壳工具:Youpk的使用详解

一. Youpk概述 Youpk基于ART的主动调用的脱壳机,主要针对dex整体加固和各式各样的dex抽取加固。 目前 Youpk 只支持 pixel 1代。所以必须需要 pixel 1代手机,而且需要刷入对应的系统。 Youpk可以处理大部分的加固,一些企业版的加固也能处理…

使用upx脱壳工具脱壳

使用upx脱壳工具脱壳(攻防世界新手第七题为例simple-unpack) 查壳工具链接:https://www.52pojie.cn/thread-437586-1-1.html 脱壳工具链接:https://github.com/upx/upx/releases 先查壳 一般做到逆向的部分题的时候&#xff0c…

脱壳工具:反射大师的使用详解

一. 反射大师概述 一个脱壳插件工具,需要在 Xposed 环境中使用,支持市面上大多数加密壳。 反射大师简单容易使用,能脱掉大多数壳,很值得使用 二. 下载Xposed和反射大师 Xposed ,一款可以在不修改 Android APK 的情…

逆向工具之脱壳神器反射大师(附脱壳环境搭建、脱壳实战)

相信点击进入这篇博客的小伙伴都知道并且搞过App逆向,不过有时候会遇到各种加壳的App,不让你反编译。但是道高一尺,魔高一丈,有正向加密,就有逆向解密。此篇博客博主带大家搭建脱壳环境,并且手动脱一个加了…

手动脱壳教程

一、什么是壳? 壳是指在一个程序的外面再包裹上另一段代码,保护里面的代码不被非法修改或反编译的的程序。它们一般先于程序运行,拿到控制权,然后完成它们保护软件的任务。 二、壳的加载过程 1、保存程序入口参数 …

简单脱壳教程笔记

文章目录 1、手脱UPX壳简介:脱壳:笔记:方法1:单步跟踪(需要有耐心)一、使用ODE插件二、tools按钮选择LordPE进行脱壳(提前在SETUP PATHS里添加好) 方法2:ESP定律法方法3&…

常用编程语言开发工具

编程语言开发工具可分为文本开发工具 和 集成开发工具。 文本开发工具的特点是 体积小,功能也不弱。 集成开发工具的特点是 体积大,功能强大。 1.文本编辑器 widows 下的 notepad(记事本) Unix下的 vim ,这两个工具系…

开发工具:2022个人开发工具清单

目录 ​编辑 1、谷歌浏览器 2、腾讯文档 3、Notepad 4、IntelliJ IDEA 5、VisualStudio 6、VSCode 7、微信开发者工具 8、Navicat 9、PDManer 10、Git/Tortoise Git 11、Axure 12、NxShell 13、ApiPost 14、Xmind 15、Everything 16、WizTree 17、猿如意 …

开发工具推荐

1.前言 俗话说:“工欲善其事,必先利其器”。 为了助力大家的学习和进阶,本小节介绍几个对 Java 学习非常有帮助的 IDEA 插件,代码反编译和反汇编工具,以及非常不错的网站等。 2. IDEA 插件 首先不必多说&#xff0c…