前言
随着中国最大的安全产品性能检测以及人体体能极限挑战活动的到来,各路大佬都八仙过海各显神通。同时大量的0day被公开,排除那些被辟谣的,还有很多值得学习的漏洞。致远这是个组合漏洞,首先任意管理员登陆,然后后台getshell。因为前台漏洞相对来说危害较高,这里着重分析下前台这个漏洞。
详细分析
致远oa使用spring的自动装配,通过在xml文件中搜索漏洞url中的thirdpartyController.do
,可以快速定位到漏洞类。
根据exp找到存在问题的方法。
找到该方法后基本上可以一眼看到漏洞点了,在该方法的最下方,这里的memberId是可控的。
首先通过enc参数获取编码后的L,M,T参数。
这里的LightWeightEncoder.decodeString
是致远自己实现的一个base64编码,实现方法很简单。就是把明文先编码成base64,然后在把编码后的每个char加一,比如base64编码后的字符串为abcd,对应的就是bcde。
获取到enc后会对字符串进行分割,首先使用&分割,然后再使用=号分割,并存入map对象中。
这里的linkType和timeStamp就是从enc中获取。timeStamp为时间戳,我们在构造exp时直接无脑2099即可。
L为连接地址,漏洞作者提供的是message.link.doc.folder.open
同类型的还有message.link.doc.open.index
,message.link.news.open
等
M为用户id。漏洞作者提供的是-7273032013234748168
该值为系统安装时缺省的id,安装时默认存在4个,对应不同的权限。
"5725175934914479521" "集团管理员"
"-7273032013234748168" "系统管理员"
"-7273032013234748798" "系统监控"
"-4401606663639775639" "审计管理员"
最后通过getMemberById根据id获取用户信息
最后生成poc发送,可以获取管理员登入的cookie