【2021.12.12】缓冲区溢出利用

article/2025/9/17 5:26:51

文章目录

  • 1.1 实验环境和开发工具
  • 1.2 任务描述
  • 1.3 分析过程
  • 1.4 结论
    • 1.4.1 利用漏洞
    • 1.4.2 修复漏洞


1.1 实验环境和开发工具

处理器 i5-8300H
内存(RAM) 8G
硬盘 476G

软件环境:
Windows 10

开发工具:
Visual studio 2019
IDA PRO7.5

1.2 任务描述

提供两个文件 :SSEx.exe : 编译生成的可执行文件
SSEx.pdb: 对应的程序数据库文件
已知所给的代码中存在安全漏洞

  1. 请找到导致漏洞的代码
  2. 分析漏洞的成因
  3. 给出一种成功的利用:显示信息“eXploited!”
  4. 修复该漏洞
  5. 撰写详细的分析利用报告

1.3 分析过程

已知缓冲区漏洞导致的后果为修改邻接变量或修改返回地址或SEH结构覆盖。而形成缓冲区漏洞的原因大多为计算机向缓冲区内填充数据时超过了缓冲区本身的容量,因此重点定位读写操作。

首先进行静态分析,对可执行文件使用IDA进行反汇编。主函数大部分涉及网络编程部分,如请求协议版本,创建套接字等等,与缓冲区溢出关联性不大,直接跳过。发现在子程序中有有recv()的读操作,重点关注该函数。

函数原型int recv( In SOCKET s, Out char *buf, In int len, In int flags).
s为套接字,buf为字符串,len为字符串长度,flags为标识。

导致漏洞的代码
在这里插入图片描述

第一次recv()中,s buf len flags均已确定,服务端需要确认客户端发来的是否为DOWN请求。
第二次recv()s buf len flags均已确定。但发现服务端接收的字符串为下次接收的len(字符串的长度),易知如果该长度超过缓冲区大小则会造成访问越界。

第三次recv()从客户端接收上次recv()规定长度的字符串,只要字符串长度超过缓冲区大小且接受长度超过缓冲区大小,便能形成缓冲区漏洞。

因为利用为显示特定信息,所以程序肯定需要执行具有输出功能的函数。查找发现代码中有一名为display()的函数有输出字符串的功能,其将一为全局变量的字符串进行输出,该字符串一直被赋值为ebp-110h的地址所存放的内容,即第三次输入的字符串。但按正常流程程序是不会执行该函数的。故利用漏洞一定需要修改某一个必经函数的返回地址修改为能执行display()的地址。

定位display()
在这里插入图片描述

其函数入口地址为00401080。服务端程序必执行的函数名为?clientproc@@YAHI@Z,函数栈帧大小为272(110h)。若需要覆盖返回地址,构造的输入必然长度大于272+4+4=280,ebp占四字节,返回地址占四字节。

1.4 结论

1.4.1 利用漏洞

因此我们应该构造三次输入,第一次输入为DOWN,第二次输入为大于280的值,第三次构造的输入为以”eXploited!”开头且以277-280位为display()函数地址结尾。还有别的构造方式吗?答案是有的。因为如果构造的输入修改函数的返回地址继续执行也能执行到display()的地址也能实现利用。比如修改返回地址为0040124D或00401253,但这样就得将[ebp+nSize]修改为0和将被覆盖的ebp恢复原值。

构造输入进行漏洞利用
在这里插入图片描述

利用成功
在这里插入图片描述

1.4.2 修复漏洞

该漏洞的出现归根结底是程序未检查数据长度,使得数据超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上。为修复该漏洞,在第二次recv()时对数据长度进行判断即可。
比如在接收到第二次消息后,进行
cmp edx,110h
jz loc_40127E


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

相关文章

本地缓冲区溢出分析

栈溢出是缓冲区溢出中最为常见的一种攻击手法,其原理是,程序在运行时栈地址是由操作系统来负责维护的,在我们调用函数时,程序会将当前函数的下一条指令的地址压入栈中,而函数执行完毕后,则会通过ret指令从栈…

关于缓冲区溢出的对策

从编译器的角度出发 以下两种方法均是编译器采取的关于缓冲区溢出的对策 Stackshield 主要思想是在函数调用之前,将return address的副本保存在一个安全的地方,函数返回时将返回地址与预先保存的返回地址比较,以判断缓冲区溢出是否发生。 …

浅析缓冲区溢出

最近一直在学习缓冲区溢出漏洞的攻击,但是关于这一块的内容还是需要很多相关知识的基础,例如编程语言及反汇编工具使用。所以研究透彻还需要不少的时间,这里简单的做一个学习的总结,通过具体的实验案例对缓冲区溢出进行简要的解析…

缓冲区溢出原理详解

下面将有实例引入缓冲区溢出的介绍&#xff1a; void main() { int i0; int a[]{1,2,3,4,5,6,7,8,9,10}; for(i0;i<10;i) { a[i]0;printf("Hello World!\n");} } 首先&#xff0c;这段代码会出现死循环&#xff0c;为什么&#xff1f;因为数组溢出了&…

C语言 缓存区溢出 3221225725

目录 问题描述解决办法&#xff1a; 问题描述 DEV-C报错 Process exited after 4.03 seconds with return value 3221225725 原因 数组定义的容量太大 - 五十万起步的样子 而且每次循环都会再定义一次&#xff0c;导致缓存区溢出 解决办法&#xff1a; 思路来源&#xff1a…

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

缓冲区溢出是指当计算机向缓冲区填充数据时超出了缓冲区本身的容量&#xff0c;溢出的数据覆盖在合法数据上。 危害有以下两点&#xff1a; 1、程序崩溃&#xff0c;导致拒绝服务 2、跳转并且执行一段恶意代码 原因&#xff1a;造成缓冲区溢出的主要原因是程序中没有仔细检查用…

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

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

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

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

缓存溢出

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

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

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

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

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

【How2RE】 UPX壳及脱壳方式

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

脱壳(中) 脱壳的方法

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

脱壳简单总结

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

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

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

脱壳之简单加密壳

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

iOS完美脱壳

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

脱壳工具:Youpk的使用详解

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

使用upx脱壳工具脱壳

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

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

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