吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9491|回复: 15
收起左侧

[漏洞分析] CVE-2017-12824及利用样本分析

  [复制链接]
ERFZE 发表于 2020-5-13 21:38
本帖最后由 ERFZE 于 2020-5-13 21:55 编辑

0x00 前言

笔者于书写此文之前从未接触过InPage,该文权当笔者于学习过程中的一篇学习笔记,其中如有不当或错误之处,望读者不吝赐教,笔者感激不尽。

0x01 InPage

该介绍引自维基百科

InPage是一款文字处理程序和页面布局软件,最初在1994年开发,适用于Windows和Mac平台下的乌尔都语,Balochi,波斯语,Pashto和阿拉伯语等语言。屏幕所见即所得。

笔者复现及分析环境基于InPage 2010:

图片1 Inpage版本

0x02 漏洞分析

0x02.1 漏洞描述

该漏洞本质是越界读(Out-Of-Bound Read),InPage在处理文档中的InPage100流时未对需要处理的数据类型(Type)进行有效性检查,而该字段可以由攻击者设置一个超出Type范围的值使得InPage在处理Type字段造成越界读。

0x02.2 静态分析

由于笔者并未找到可供调试使用的POC,故直接使用Bitter组织某样本作为调试对象。

漏洞触发位置位于sub_453590

图片2 sub_453590

sub_453700传递给sub_453590的参数是读取到的Type值:

图片3 传递参数

调试之后发现该值为0x7E72,那么右移8位之后即为0x7E。接下来看看dword_656A28[0x7E]的赋值(位于sub_4560A0内):

result = sub_4536A0(0x7Eu, (int)&unk_656E60);

sub_4536A0功能如下:

图片4 sub_4536A0

进一步查看unk_656E60

图片5 unk_656E60

可以看到unk_656E60数组大小为0x1B,而4*0x72明显超过其大小,因而造成越界读。

0x02.3 动态调试

笔者调试时采用附加到Inpage.exe进程之后打开样本文件的方法来调试。设置断点如下:

图片6 Breakpoint

成功断下:

图片7 成功断下

之后其越界调用0x00455AFA处指令:

图片8 越界调用

0x00455AFA处指令恰好将控制流交到由攻击者构造的数据上:

图片9 转交控制流

0x03 Bitter组织某利用样本分析

0x03.1 样本一

样本名称:Court_Notice.inp
MD5:303F01E8CE9488CA7C1B265A8768CCE0

该样本的漏洞利用部分已由上节给出,下面直接分析其Shellcode。通过连续两个0x416E3453(字符串"An4S")标志进行定位其Shellcode起始位置:

图片10 定位

跳转到Shellcode之后,先获取PE文件(一DLL,Backdoor)起始位置:

图片11 获取PE文件起始位置

获取使用到的函数调用地址:

图片12 获取系统函数调用地址

创建一名为QPONMLKJIH的互斥对象,并调用GetLastError检查是否已存在该名称的互斥对象(0xB7,ERROR_ALREADY_EXISTS):

图片13 创建互斥对象

为DLL文件申请SizeofImage大小的内存空间:

图片14 VirtualAlloc

若申请失败,则修改第一个参数为NULL,重新申请。

其后将DLL文件加载到内存中并手动完成PE装载器的工作。首先是复制DLL文件头部:

图片15 memcpy

复制.text区块内容到内存:

图片16 复制.text区块

之后依次是.rdatarsrc.reloc区块,不再一一截图。

接下来对DLL文件进行重定位。检查基址重定位表大小是否为0:

图片17 重定位表大小

检查IMAGE_BASE_RELOCATION结构大小是否为0:

图片18 重定位结构大小

根据重定位项数组中的重定位数据进行重定位:

图片19 重定位

修复输入表:

图片20 输入表

依次更改.text.rdatarsrc区块所在内存区域的保护属性:

图片21 VirtualProtect

调用DLL文件中一函数过程:

图片22 调用DLL文件中函数

其功能为创建一新线程:

图片23 CreateThread

由此该DLL文件得以执行。

0x03.2 样本二

样本名称:Press_Note.inp

MD5:5DD080B9AD4BC5C58C0CED31829CCADA

该样本与上一样本的利用方法相同,不再占用篇幅。

0x04 Donot组织某利用样本分析

样本名称:EOI-Application_Form.inp

MD5:D9279F628C9F19420F14EDF3CFC3123F

调试方法同上一样本,不再赘述。与上一样本相似,通过连续两个0x35363839(字符串"5689")定位Shellcode:

图片24 定位

解密将要执行指令:

图片25 解密

第二次解密:

图片26 第二次解密

获取GetModuleHandleA调用地址:

图片27 GetProcAddress

第三次解密:

图片28 第三次解密

通过硬编码的方式来给GetProcAddress()传递参数:

图片29 硬编码

之后分别获取ole32.CoInitializemsvcrt.fclosekernel32.ExitProcesskernel32.GetEnvironmentVariableWmsvcrt.strlenmsvcrt.fwritemsvcrt.memsetole32.CoCreateInstancemsvcrt.fopenmsvcrt.strcatkernel32.GetEnvironmentVariableAmsvcrt.malloc函数的调用地址。

清空内存内容,用于后续存储字符串:

图片30 memset

拼接字符串:

图片31a 拼接

图片31b 拼接

图片31c 拼接

C:\Windows\Tasks\tss.js这一JS文件中写入内容:

图片32 JS脚本

该脚本功能为执行同目录下的staEnd.dll

之后通过于启动目录创建快捷方式实现持久化:

图片33a CoCreateInstance

该快捷方式指向JS文件:

图片33b SetPath

保存到文件:

图片33c Save

staEnd.dll文件中写入内容:

图片34a fwrite

file.inp文件中写入内容:

图片34b fwrite

写入完成之后关闭文件,并调用ExitProcess()退出。

0x05 Confucius(孔夫子)组织某利用样本分析

样本名称:Visit of Azerbaijan delegation to pakistan (2).inp

MD5:633640453DE64EB79891B7433242A0A1

图片35 Confucius

该样本与0x03.1中样本利用方法相同,不再赘述。

0x06 参考

免费评分

参与人数 12威望 +2 吾爱币 +112 热心值 +12 收起 理由
鸽吻与鸽舞 + 1 + 1 我很赞同!
victos + 1 + 1 谢谢@Thanks!
QGZZ + 1 + 1 谢谢@Thanks!
BrainFlower + 1 + 1 热心回复!
poisonbcat + 1 + 1 谢谢@Thanks!
x51zqq + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
女萝岩 + 1 + 1 我很赞同!
gaosld + 1 + 1 用心讨论,共获提升!
温柔的一哥 + 1 + 1 我很赞同!
hjm666 + 2 + 1 用心讨论,共获提升!
luzaifff + 1 + 1 用心讨论,共获提升!
willJ + 2 + 100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| ERFZE 发表于 2020-5-14 21:20
willJ 发表于 2020-5-14 15:19
后面样本的分析很精彩,有几个疑问,请教下楼主。
1.越界读的漏洞,在后面如何就变成了call ecx(控制了EIP ...

第一个问题的话,我前边的分析里已经提到,师傅可以私我一个联系方式,我发你Inpage;
第二个问题,该软件并未开启ASLR与DEP。

点评

唔,了解了,越界读的地址就是call过去的地址,那个地址又存放了shellcode,也没有DEP ASLR。好文章哦。  详情 回复 发表于 2020-5-15 11:23
willJ 发表于 2020-5-15 11:23
ERFZE 发表于 2020-5-14 21:20
第一个问题的话,我前边的分析里已经提到,师傅可以私我一个联系方式,我发你Inpage;
第二个问题,该软 ...

唔,了解了,越界读的地址就是call过去的地址,那个地址又存放了shellcode,也没有DEP ASLR。好文章哦。
hangye168 发表于 2020-5-13 22:07
斩风 发表于 2020-5-14 09:33
膜拜大神
Sezangle 发表于 2020-5-14 10:30
谢谢楼主分享,我一直很好奇这种shellcode是怎么移植进去的,请问楼主这个exe是已经被攻击者植入shellcode了是吧,然后执行触发shellcode执行dll?dll是伪装成应用自身的dll文件吗,要不然很容易被杀啊
willJ 发表于 2020-5-14 15:19
后面样本的分析很精彩,有几个疑问,请教下楼主。
1.越界读的漏洞,在后面如何就变成了call ecx(控制了EIP)呢?
2.该软件有地址随机化与DEP么?漏洞利用是如何精确布局shellcode然后call ecx到shellcode呢?
czxj2003 发表于 2020-5-16 10:51
厉害厉害厉害
无秽之鸦 发表于 2020-5-19 12:36
感谢楼主,文章这波操作有点强
sym945 发表于 2020-5-19 14:01
步骤清晰明了,厉害
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 11:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表