代码审计入门之Jeeplus代码审计
字数 1235 2025-08-18 11:39:08

Jeeplus代码审计教学文档

0x00 系统概述

Jeeplus是一款基于代码生成器的JavaEE快速开发平台,主要技术栈包括:

  • Spring MVC 4.0+
  • MyBatis
  • Apache Shiro
  • J2cache
  • Quartz
  • Spring WebSocket
  • JQuery
  • Bootstrap

支持多种数据库(MySQL, Oracle等),采用分层设计(dao, service, Controller, view层)。

0x01 审计准备

项目结构

src/main/java       // Java代码目录
src/main/resources  // 资源目录(配置文件)
src/main/webapp     // WebContent目录

权限控制分析

通过Apache Shiro的配置文件分析可匿名访问的URL:

  • anon - 可匿名访问
  • authc - 需要认证后才能访问

0x02 漏洞分析

1. SQL注入漏洞

漏洞位置:多处使用MyBatis的${}动态拼接SQL语句

危险方法

findUniqueByProperty(String propertyName, Object value)

漏洞示例

// 错误写法 - 直接拼接SQL
@Select("select * from user where mobile = ${mobile}")
User findByMobile(@Param("mobile") String mobile);

安全写法

// 正确写法 - 使用预编译
@Select("select * from user where mobile = #{mobile}")
User findByMobile(@Param("mobile") String mobile);

利用Payload

GET:
/a/sys/user/resetPassword?mobile=13588888888'and (updatexml(1,concat(0x7e,(select user()),0x7e),1))%23
/a/sys/user/validateMobileExist?mobile=13588888888'and (updatexml(1,concat(0x7e,(select user()),0x7e),1))%23

POST:
/a/sys/register/registerUser
roleName=wangba&mobile=13300990099'and (updatexml(1,concat(0x7e,(select user()),0x7e),1))%23&randomCode=2131&loginName=test1&password=123123&confirmNewPassword=123123&ck1=on

2. Druid未授权访问

漏洞原因:Druid监控页面配置不当导致未授权访问

配置文件web.xml

<servlet-mapping>
    <servlet-name>DruidStatView</servlet-name>
    <url-pattern>/druid/*</url-pattern>
</servlet-mapping>

利用方式

http://127.0.0.1/druid/websession.html

风险

  • 查看敏感session信息
  • 获取JDBC连接信息
  • 可能获取数据库凭证

3. 任意文件上传

漏洞位置/a/sys/file 文件管理功能

漏洞原因

  1. 未限制上传文件类型
  2. 未校验文件后缀
  3. 上传路径可控
  4. 文件名可控

利用方式

  1. 直接上传Webshell文件
  2. 或通过session替换攻击(结合Druid泄露的session)

4. 任意文件下载

漏洞位置:文件管理功能中的下载功能

漏洞原因

  1. 未对路径进行安全校验
  2. 未过滤../等目录穿越字符
  3. 未限制可访问的文件范围

利用方式
构造包含目录穿越字符的路径参数,读取系统任意文件

0x03 安全建议

1. SQL注入防护

  • 全面替换${}#{}预编译写法
  • 使用MyBatis的XML配置方式时,确保使用<if test>等安全标签
  • 对参数进行严格的类型检查

2. Druid安全配置

<servlet>
    <servlet-name>DruidStatView</servlet-name>
    <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
    <init-param>
        <param-name>loginUsername</param-name>
        <param-value>admin</param-value>
    </init-param>
    <init-param>
        <param-name>loginPassword</param-name>
        <param-value>123456</param-value>
    </init-param>
</servlet>

3. 文件上传安全

  • 白名单校验文件后缀
  • 重命名上传文件
  • 限制上传目录
  • 对文件内容进行检查
  • 设置合理的权限

4. 文件下载安全

  • 校验文件路径合法性
  • 禁止目录穿越
  • 限制可下载的文件范围
  • 对下载行为进行日志记录

0x04 审计技巧

  1. 全局搜索${ 查找潜在的SQL注入点
  2. 组件分析:检查pom.xml中的第三方组件版本
  3. 配置文件审计:重点关注web.xml、shiro配置等
  4. 权限控制检查:验证每个URL的访问控制
  5. 业务逻辑审计:特别关注文件操作、用户注册等关键功能

0x05 总结

Jeeplus系统存在的主要安全问题:

  1. 多处SQL注入漏洞
  2. Druid未授权访问
  3. 任意文件上传
  4. 任意文件下载

这些问题主要源于:

  • 过度依赖代码生成器而忽视安全
  • 对用户输入缺乏充分验证
  • 第三方组件配置不当
  • 业务功能安全考虑不全面

代码审计时应重点关注MyBatis写法、文件操作和权限控制等关键点。

Jeeplus代码审计教学文档 0x00 系统概述 Jeeplus是一款基于代码生成器的JavaEE快速开发平台,主要技术栈包括: Spring MVC 4.0+ MyBatis Apache Shiro J2cache Quartz Spring WebSocket JQuery Bootstrap 支持多种数据库(MySQL, Oracle等),采用分层设计(dao, service, Controller, view层)。 0x01 审计准备 项目结构 权限控制分析 通过Apache Shiro的配置文件分析可匿名访问的URL: anon - 可匿名访问 authc - 需要认证后才能访问 0x02 漏洞分析 1. SQL注入漏洞 漏洞位置 :多处使用MyBatis的 ${} 动态拼接SQL语句 危险方法 : 漏洞示例 : 安全写法 : 利用Payload : 2. Druid未授权访问 漏洞原因 :Druid监控页面配置不当导致未授权访问 配置文件 : web.xml 利用方式 : 风险 : 查看敏感session信息 获取JDBC连接信息 可能获取数据库凭证 3. 任意文件上传 漏洞位置 : /a/sys/file 文件管理功能 漏洞原因 : 未限制上传文件类型 未校验文件后缀 上传路径可控 文件名可控 利用方式 : 直接上传Webshell文件 或通过session替换攻击(结合Druid泄露的session) 4. 任意文件下载 漏洞位置 :文件管理功能中的下载功能 漏洞原因 : 未对路径进行安全校验 未过滤 ../ 等目录穿越字符 未限制可访问的文件范围 利用方式 : 构造包含目录穿越字符的路径参数,读取系统任意文件 0x03 安全建议 1. SQL注入防护 全面替换 ${} 为 #{} 预编译写法 使用MyBatis的XML配置方式时,确保使用 <if test> 等安全标签 对参数进行严格的类型检查 2. Druid安全配置 3. 文件上传安全 白名单校验文件后缀 重命名上传文件 限制上传目录 对文件内容进行检查 设置合理的权限 4. 文件下载安全 校验文件路径合法性 禁止目录穿越 限制可下载的文件范围 对下载行为进行日志记录 0x04 审计技巧 全局搜索 : ${ 查找潜在的SQL注入点 组件分析 :检查pom.xml中的第三方组件版本 配置文件审计 :重点关注web.xml、shiro配置等 权限控制检查 :验证每个URL的访问控制 业务逻辑审计 :特别关注文件操作、用户注册等关键功能 0x05 总结 Jeeplus系统存在的主要安全问题: 多处SQL注入漏洞 Druid未授权访问 任意文件上传 任意文件下载 这些问题主要源于: 过度依赖代码生成器而忽视安全 对用户输入缺乏充分验证 第三方组件配置不当 业务功能安全考虑不全面 代码审计时应重点关注MyBatis写法、文件操作和权限控制等关键点。