提及
这是记录去年加入X渡团队时学习的一篇代码审计还原;X网OA的后台Fastjson反序列化RCE漏洞,当时也是跟着relay师傅的教程进行还原由于这是开源源码不需要进行反编译等操作,搭建好即可开始审计复现;如果是日常拿到源码后发现相关关键字搜索不到的一般就俩种。1、jar包没反编译;2、class文件没反编译。这种情况直接用cfr工具反编译即可。倘若想用拿到编译后的源码进行重新搭建的,最好需要有sql文件,当然,即使有了重新完整搭建起来也是个费时费力的事,各种数据清洗,各种修改,很麻烦。
下面有相关的下载地址,或者联系后台即可发送相关反编译工具及使用教程。
下载地址:https://github.com/cloudwebsoft/ywoa
后台回复:250109
以下均为实验环境,全部操作在本电脑及虚拟机中进行,已联系开发者并取得同意还原历史漏洞。
环境安装
审计还原
经过一系列的操作将环境搭建起来后即可开始正式审计,可以在pom文件中看到所需的依赖中存在Fastjson-1.2.37,这是在漏洞版本以内的;但是首先可以排除了BCEL这条链,改链使用
因此我们只需锁定好哪里调用了jsonobject.parseobject即可,另外还要确保其参数是可控的,最好是直接控制。
通过一番查找可以看到/setup/updateUiSetup接口中有可以直接控制的参数,参数名为uiSetup; 该漏洞为后台漏洞,因此需要进行登录操作获取到Cookie。
这里分享一个技巧,在黑盒中不确定版本信息可以使用延时等条件判断。
如上图所示,当ldap地址为服务器本身时几乎没延迟,但是填写一个不存在的地址时会发现延时非常高,这说明Fastjson的版本是低于1.2.47的,更细致的版本可参照下面资料
https://www.bilibili.com/opus/1004276539121991686
最后则是构造链子,在Fastjson中,如果服务器为Linux且出网,那么市面上的一些链子,可以直接尝试jdbcrowSetImpl这条链子反弹,以及BCEL本地加载,同一个接口视条件而看可以有很多链子【但均属于同个漏洞】,可以看看对应的Fastjson对抗史及相关链子分析;这里不在赘述。
由于使用的是Windows环境搭建的,直接ldap反弹shell不现实,因此这里准备使用的是JdbcRowSetImpl,进行远程恶意加载,从本地写好恶意类,并编译为class。
编译完成后,需要在本机开启http服务
最后,将构造好的payload进行发送,成功接收到请求。
最后
原文始发于微信公众号(Tab Sec):【代审 复现】基于JAVA的某开源OA后台Rce代码审计
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论