freeBuf
金格iWebOffice控件分析
2023-08-31 10:28:24

前言

众所周知,多个oa中都使用了金格iWebOffice控件。但在不同的oa中exp多少存在差异性,尝试从代码层一探究竟。

简介

金格iWebOffice控件是一种文档控件,能够在浏览器上进行编辑word文档、excel表格等文档最终保存在服务器上,手写签名、电子签章广泛应用于此。所以oa都喜欢使用。

漏洞分析

以某oa为例,本地搭建OfficeServer.jsp进行访问。

image.png

image.png

首先创建iWebOffice类的实例,officeServer对象调用ExecuteRun方法。并传入request、response。

image.png

在ExecuteRun方法里,会创建出数据库对象和创建信息包对象。

image.png

iMsgServer2000 方法里DBSTEP V3.0字符串赋值为this._$906this._$903创建出临时文件。
而后调用deleteOnExit方法删除临时文件。

回到ExecuteRun方法里,往下判断请求方法是否为Post请求。

image.png

即必须使用Post方法进行请求。

image.png

当使用Post方法请求时,首先进入MsgObj.Load方法。跟进该方法。

image.png

一个修改编码的操作,然后调用了_$1027方法。

image.png

在该方法里以输入流的方式一次性读取到mRead,而后从mRead中读取64位长度保存到HeadString字符串中。
接下来截取HeadString字符串的0-15位赋值为this._$906,16-31位赋值为BodySize(int类型),32-47位赋值为ErrorSize(int类型),48-63位赋值为this._$907(int类型)即FileSize。
代码走到这个地方,我们可以尝试初步构造一下这64位长度。

aaaaaaaaaaaaaaaa1               2               3

debug 跟踪一下

image.png

和我们计算的一样。

image.png

然后mRead会继续读取BodySize大小的数据并赋值为this._$904

本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
文章目录