缓存溢出

article/2025/9/17 6:15:29

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

1. 缓存溢出攻击方式

1.1 破坏活动记录

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

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

1.2 破坏堆数据

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

1.3 更改函数指针

指针在C、C++等程序语言中使用得非常频繁,空指针可以指向任何对象的特性使得指针的使用更加灵活,但同时也需要人们对指针的使用更加谨慎小心,特别是空的函数指针,它可以使程序执行转移到任何地方。攻击者充分利用了指针的这些特性,千方百计地溢出与指针相邻的变量、缓存区,从而修改函数指针指向达到转移程序执行流的目的。

1.4 溢出固定缓存区

C标准库函数中提供了一对长跳转函数setjmp/longjmp来进行程序执行流的非局部跳转,意思是在某一个检查点设置setjmp(buffer),在程序执行过程中用longjmp(buffer)使程序执行流跳到先前设置的检查点。它们跟函数指针有些相似,在给用户提供了方便性的同时也带来了安全隐患,攻击者同样只需找一个与longjmp(buffer)相邻的缓存区并使它溢出,这样就能跳转到攻击者要运行的代码空间。典型的例子有Perl5.003的缓冲区溢出漏洞,攻击者首先进入用来恢复缓冲区溢出的longjmp缓冲区,然后诱导进入恢复模式,这样就使Perl的解释器跳转到攻击代码上了。

2. 防范缓冲区溢出

缓冲区溢出是代码中固有的漏洞,除了在开发阶段要注意编写正确的代码之外,对于用户而言,一般的防范错误为

  1. 关闭端口或服务。管理员应该知道自己的系统上安装了什么,并且哪些服务正在运行
  2. 安装软件厂商的补丁,漏洞一公布,大的厂商就会及时提供补丁
  3. 在防火墙上过滤特殊的流量,无法阻止内部人员的溢出攻击
  4. 自己检查关键的服务程序,看看是否有可怕的漏洞
  5. 以所需要的最小权限运行软件

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

相关文章

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

前言: 大家好,我是周杰伦 这里整合了一下之前自己学习软件手工脱壳的一些笔记和脱文,希望能给新学软件逆向和脱壳的童鞋们一点帮助。 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…

【高效开发工具系列】开发工具

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

Linux--开发工具

前言: 是不是看见10月24日有种莫名的亲戚,在信息技术行业,由于2101024,所以1GB 1024MB,1MB 1024KB,1KB 1024B。于是1024是程序员们最为敏感的数字,那么今天祝所有铁子们节日快乐!…

开发工具入门

配置SublimeText的编译 工具->编译系统->新建编译系统 修改如下代码到新建文件内,CtrlS保存内容到 “SublimeText安装目录下的\Data\Packages\User” # 配置文档 { "cmd": ["软件名如:php", "$file"], &qu…