致远 OA 变种 BASE64 算法的加解密方法

栏目: 编程工具 · 发布时间: 4年前

内容简介:作者:kk本文为作者投稿,Seebug Paper 期待你的分享,凡经采用即有礼品相送! 投稿邮箱:paper@seebug.org在几天前,我就收到致远OA的RCE漏洞部分详情,但是并没有引起重视。当时获得的POC部分只包括了任意文件上传的数据包,但并没有其余详情,且数据包中重要数据都被编码过了。原以为又是一次恶作剧。没想到啊。

作者:kk

本文为作者投稿,Seebug Paper 期待你的分享,凡经采用即有礼品相送! 投稿邮箱:paper@seebug.org

在几天前,我就收到致远OA的RCE漏洞部分详情,但是并没有引起重视。当时获得的POC部分只包括了任意文件上传的数据包,但并没有其余详情,且数据包中重要数据都被编码过了。原以为又是一次恶作剧。没想到啊。

由于漏洞本身没什么好讲的,现在让我们来看看这个POC中涉及的编码算法,看看原始的POC中的编码数据是做什么的。

首先漏洞位置在 htmlofficeservlet ,通过一段时间的寻找我找到了一份旧的 Seeyon OA 的源码:

https://github.com/zhf839428881/seeyon_v3x/

其中这个接口的实现在 HtmlOfficeServlet.java 文件内。

通过这份代码我们知道接口对参数的获取使用的是 DBstep.iMsgServer2000.GetMsgByName 方法。

又经过一段时间,我找到了 DBstep 数据库,然而 DBstep 并没有对参数进行加解密的操作。

卡了一段时间后,我发现此处的DBstep是被修改过的版本,对DBstep进行修改的是iweboffice中间件,而这个中间件属于金格科技。

从金格科技的官网我找到了试用版的iweboffice,可惜其中的iMsgServer版本为2015,且找不到iMsgServer2000的下载地址。

又过了一段时间,我找到了如下的文件:

https://github.com/ExllntSuppt/ecology-OA/blob/master/iMsgServer2000.java

通过分析可以知道 DBstep.iMsgServer2000.GetMsgByName 调用了 DBstep.iMsgServer2000.DecodeBase64 方法。

通过分析可以知道此处是一个base64算法的变种。

对应base64中的密文 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=

该处变种算法的密文为 FxcYg3UZvtEz50Na8G476=mLDI/jVfC9dsoMAiBhJSu2qPKe+QRbXry1TnkWHlOpw

但是使用该密文无法正确对致远POC中的密文进行解密,推测在致远OA中,该密文被修改了。

联系了公司中有Seeyon OA的小伙伴,通过他的协助终于获取到了Seeyon的密文:

gx74KW1roM9qwzPFVOBLSlYaeyncdNbI=JfUCQRHtj2+Z05vshXi3GAEuT/m8Dpk6

写了个变种base64互转base64的小脚本。

var a = "gx74KW1roM9qwzPFVOBLSlYaeyncdNbI=JfUCQRHtj2+Z05vshXi3GAEuT/m8Dpk6";
var b = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var c="OKMLlKlV";
var d="";

function a2b(v)
{
    for (var i = 0; i < a.length; i++) {
        if(a[i]==v){
            return b[i];
        }
    }
}

function b2a(v)
{
    for (var i = 0; i < b.length; i++) {
        if(b[i]==v){
            return a[i];
        }
    }
}

for (var i = 0; i < c.length; i++) {
    d=d+a2b(c[i]);
}

对POC中的加密参数进行解密后,我们得到如下数据。

参数 变种base64 base64 明文

DBSTEP OKMLlKlV REJTVEVQ DBSTEP

OPTION S3WYOSWLBSGr U0FWRUFTSU1H SAVEASIMG

currentUserId zUCTwigsziCAPLesw4gsw4oEwV66 Njk5MzAwNzk2OTYwMDAwMDI3MQ== 6993007969600000271

CREATEDATE wUghPB3szB3Xwg66 MjAxOS0wNS0yMA== 2019-05-20

RECORDID qLSGw4SXzLeGw4V3wUw3zUoXwid6 LTU1MDUyNTY1MDQ0MjM0NjIyMzc= -5505256504423462237

originalFileId wV66 MQ== 1

FILENAME qfTdqfTdqfTdVaxJeAJQBRl3dExQyYOdNAlfeaxsdGhiyYlTcATdN1liN4KXwiVGzfT2dEg6 Li5cLi5cLi5cQXBhY2hlSmV0c3BlZWRcd2ViYXBwc1xzZWV5b25cdGVzdDEyMzQ1Ni5qc3A= ..\..\..\ApacheJetspeed\webapps\seeyon\test123456.jsp

needReadFile yRWZdAS6 ZmFsc2U= false

originalCreateDate wLSGP4oEzLKAz4=iz=66 MTU1ODI3NTE2NDgzNg== 1558275164836

POC中还有一个客户端的IP,解密后为内网地址。

从这些明文中,我们知道这个POC中操作的数据库是DBSTEP,进行的操作应该是保存图片。其中还有用户的ID和记录ID的存在。操作时间是在2019-05-20,也就是说这个漏洞至少已经被发现一个月了。

还可以看到漏洞写入的文件地址是"......\ApacheJetspeed\webapps\seeyon\test123456.jsp",由于服务器上的上传目录不是固定的,这个POC只能影响上传目录与默认配置一致的服务器。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python 3学习笔记(上卷)

Python 3学习笔记(上卷)

雨痕 / 电子工业出版社 / 2018-1 / 89

经过9 年的发展,Python 3 生态已相当成熟。无论是语言进化、解释器性能提升,还是第三方支持,都是如此。随着Python 2.7 EOF 日趋临近,迁移到Python 3 的各种障碍也被逐一剔除。是时候在新环境下学习或工作了。 人们常说Python 简单易学,但这是以封装和隐藏复杂体系为代价的。仅阅读语言规范很难深入,亦无从发挥其应有能力,易学难精才是常态。《Python 3学习笔记(......一起来看看 《Python 3学习笔记(上卷)》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具