o2oa审计

纯代码层面分析,可能存在的问题,未复现

0x01 反序列化

com.x.base.core.project.cache.CacheRedisImpl#get

image-20240731125419849

从redis获取key对应的value转换成byte流,然后进行反序列化

调用

com.x.base.core.project.cache.CacheManager#get

image-20240731125519025

网上很容易就能找到对应的control,太多了

image-20240731125725462

image-20240804234949074

开放java.lang包。懂得都懂

0x02 命令执行

com.x.program.center.jaxrs.command.CommandAction#executeCommand

image-20240731163632157

直接冲json里面获取命令

image-20240731163738854

image-20240731163754328

image-20240731163839832

ctl是命令,先获取服务,在执行

0x03 部署war包

com.x.program.center.jaxrs.command.CommandAction#upload

image-20240731163919011

可以直接部署 恶意的war包

自己写一个命令执行就行

https://novysodope.github.io/2021/12/22/70/

0x04 创建接口rce

image-20240731164243158

class不在黑名单,可反射获取任意类任意方法

https://github.com/user-attachments/files/15552539/O2OA.system.has.Remote.Command.Execution.Vulnerability.pdf

参考

0x05 可读配置文件

com.x.program.center.jaxrs.config.ConfigAction#open

image-20240731164532171

image-20240731164619244

可以直接从json获取file文件名

image-20240731164646288

image-20240731164715818

这里过滤了,获取到的file不等于node,且在文件名在confid下就可以读。

image-20240731164801632

可读项

0x06 任意文件写

com.x.program.center.jaxrs.config.ConfigAction#save

image-20240731165004980

image-20240731165108607

image-20240731165155443

也就是通过StringTools.isFileName这个函数判断了 只能修改config下的文件。

image-20240731165256615

从json读入字节流然后写入,也就是我可以先读到general.json的配置,然后把黑名单删除掉,然后在打 0x03创建接口的rce.

这样看 最新版也受影响。

声明

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


o2oa审计
https://unam4.github.io/2024/08/04/o2oa审计/
作者
unam4
发布于
2024年8月4日
许可协议