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 准备工作

  1. 下载源码:https://gitee.com/ZhongBangKeJi/crmeb_java/archive/refs/tags/v1.3.4.zip
  2. 安装依赖:Maven + Node.js

2.2 后端配置

  1. 修改数据库配置:crmeb-admin/src/main/resources/application.yml
  2. 创建数据库并导入SQL:sql/Crmeb_1.3.4.sql
  3. 启动后端:默认访问http://127.0.0.1:8080/doc.html(Swagger文档)

2.3 前端配置

  1. 修改配置:admin/.env.development
  2. 安装依赖:npm install
  3. 启动前端:npm run dev
  4. 默认后台账号: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注入修复

  1. 将所有${}替换为#{}
  2. 添加参数过滤
  3. 使用MyBatis的预编译功能

4.2 XXE修复

  1. 禁用外部实体解析:
    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修复

  1. 校验URL域名白名单
  2. 禁用非常用协议(如file://, gopher://等)
  3. 设置连接超时

4.4 组件安全

  1. 为Druid控制台添加认证
  2. 生产环境禁用Swagger文档

5. 审计技巧

  1. MyBatis审计

    • 全局搜索${
    • 检查Mapper.xml中的动态SQL
  2. XXE审计

    • 搜索SAXReader, DocumentBuilder, XMLInputFactory等关键词
  3. SSRF审计

    • 搜索URLConnection, HttpClient, OkHttp等网络请求相关代码
  4. 组件审计

    • 检查application.yml中的组件配置
    • 检查依赖版本是否存在已知漏洞

6. 参考资源

  1. 官方文档:https://doc.crmeb.com/java/crmeb_java/2211
  2. GitHub Issues:https://github.com/crmeb/crmeb_java/issues
  3. CVE数据库:可查询相关组件的已知漏洞
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() 利用方式 : 漏洞点2:用户管理模块 文件位置 : src/main/resources/mapper/user/UserMapper.xml 方法 : findAdminList 漏洞参数 : groupId 调用链 : UserService.getAdminList() UserController.getAdminList() 利用方式 : 其他注入点 全局搜索 ${ 可发现多处类似漏洞 重点关注MyBatis中直接使用 ${} 而非 #{} 的地方 3.2 XXE漏洞 漏洞点1:XML解析 文件位置 : SAXReader 相关代码 漏洞原因 :使用 SAXReader 解析用户可控的XML输入 利用方式 : 3.3 SSRF漏洞(理论存在) 漏洞点:图片合并功能 文件位置 : ImageMergeUtil 相关代码 漏洞原因 :直接使用用户提供的URL发起HTTP请求 限制条件 : 需要提供至少2个图片URL 需要特定权限(可能配置问题导致未复现成功) 利用方式 : 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修复 禁用外部实体解析: 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数据库:可查询相关组件的已知漏洞