当前位置: 首页 > news >正文

CVE-2024-1112 Resource Hacker 缓冲区溢出分析

漏洞简述

CVE-2024-1112 是 Resource Hacker 软件的一个缓冲区溢出漏洞。该漏洞存在于版本 3.6.0.92 中。由于软件在处理命令行中的文件路径时未对文件字符串长度进行限制,过长的字符串参数导致内存被过度写入,从而引发缓冲区溢出。

漏洞复现

构造长度300的字符串当做参数传入Resource Hacker
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9
Resource Hacker崩溃
在这里插入图片描述

异常偏移为0x316a4130,也就是对应的0Aj1。由此看出通过构造的字符串参数是可以造成程序溢出并劫持执行流。
在这里插入图片描述

漏洞分析

由于字符串作为参数使用,漏洞产生和处理字符串参数有关,先在GetCommandLine函数下断点,一步步找到溢出点。
通过下图得知,传入的参数溢出覆盖了SHE的处理函数,在程序出现异常后会调用异常处理函数的地址
在这里插入图片描述

分析溢出函数
这个函数主要是对传入的字符串参数进行处理,并将处理后的字符串赋给v6变量,由于未对传入的参数做长度限制,导致栈溢出。
在这里插入图片描述

从上图可知,函数内部设置处理接收参数的的数组大小为264个字节,对此进行测试。
如果传入268个字节参数,淹没了函数返回值地址,在函数返回时发现返回值地址不存在进入异常处理,找到对应的异常处理函数并抛出异常。
在这里插入图片描述

如果传入272个字节参数,指向下个SEH链的指针被覆盖,无法找到对应的异常处理函数,程序崩溃。
在这里插入图片描述

如果传入292个字节参数,SEH链的指针及处理函数都被传入的参数淹没,并且在函数返回前就出现访问异常,调用异常处理函数时出现崩溃。
在这里插入图片描述

通过上述测试可以发现有2种利用方式
1.传入构造的272字节参数,利用跳转指令跳转到前面的268字节执行shellcode
2.传入构造的大于292个字节参数,利用jmp esp跳板指令跳转到292字节后的执行shellcode

利用限制

虽然传入的字符串参数能导致栈溢出,但是基本不可能达到稳定利用成功。
1.由于是在命令行中传入的,很多不可见字符被复制到命令行中时字符发生改变。
2.想要执行我们的shellcode需要找到存在"jmp esp",“call ebp”,“pop pop ret"等汇编指令的地址,但是这个溢出函数对字符做了很多限制,很难利用当前模块的地址。
在这个循环中,首先判断传入参数的每个字符,如果小于0x20,就结束循环。虽然能构造参数第三个字符为0x22(”)进入里层循环不对小于0x20的字符限制,但是不能存在0字符。

while ( 1 ){v4 = *a1;if ( (unsigned __int8)*a1 <= 0x20u )break;if ( v4 == 0x22 ){++a1;while ( 1 ){v3 = *a1;if ( !*a1 || v3 == 0x22 )break;v6[v2++] = v3;++a1;}if ( *a1 )++a1;}else{v6[v2++] = v4;++a1;}}

也就是说在这个以0x00400000为基址的程序当前模块地址写入shellcode时,由于出现0x00,后面的字符被截断,只能利用前面200多个字节的空间做shellcode。
理论上有200多字节的空间,但是需要找跳板指令,只能找到call/jmp dword ptr ss:[ebp-(>)18],在当前模块能找到比较好的也就是call dword ptr ss:[ebp-75]了,这样又进一步压缩了shellcode的使用空间,很难去利用。

参考

https://enessakircolak.netlify.app/posts/2024/exploit-101/

在这里插入图片描述

相关文章:

  • VBA技术资料MF205:移动工作表时名称重复的处理
  • 吹爆这份Stable diffusion提示词攻略!
  • python爬虫:将知乎专栏文章转为pdf
  • 玩美移动AI护肤品推荐解决方案,全新升级 为护肤品牌及其零售商,提供自动匹配推荐产品功能
  • 教师信息素养测评:多维视角下的全面审视
  • Splashtop 加入 Microsoft 智能安全协会
  • A 股疯了?交易所系统都被买崩了!
  • IT行业的现状与未来发展趋势
  • 高通平台修改Android 10源码获取root权限
  • Vmware VC登录报错:Vmware报错 HTTP状态 500 - 内部服务器错误
  • 机器学习笔记(李宏毅老师2021/2022课程)【更新中】
  • 安全的价值:构建现代企业的基础
  • Harbor使用
  • TCP编程:从入门到实践
  • 搜索软件 Everything 的安装与使用教程
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 07.Android之多媒体问题
  • Cookie 在前端中的实践
  • cookie和session
  • CSS 三角实现
  • ES2017异步函数现已正式可用
  • exif信息对照
  • js中的正则表达式入门
  • PAT A1120
  • Python十分钟制作属于你自己的个性logo
  • unity如何实现一个固定宽度的orthagraphic相机
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 电商搜索引擎的架构设计和性能优化
  • 反思总结然后整装待发
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 你不可错过的前端面试题(一)
  • 前嗅ForeSpider教程:创建模板
  • 手写双向链表LinkedList的几个常用功能
  • 微服务核心架构梳理
  • 智能合约开发环境搭建及Hello World合约
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 我们雇佣了一只大猴子...
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • # C++之functional库用法整理
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (计算机网络)物理层
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)jQuery 基础
  • (转)德国人的记事本
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .net 7和core版 SignalR
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .net mvc 获取url中controller和action
  • .net 按比例显示图片的缩略图
  • .Net 代码性能 - (1)