代码审计入门之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 文件管理功能
漏洞原因:
- 未限制上传文件类型
- 未校验文件后缀
- 上传路径可控
- 文件名可控
利用方式:
- 直接上传Webshell文件
- 或通过session替换攻击(结合Druid泄露的session)
4. 任意文件下载
漏洞位置:文件管理功能中的下载功能
漏洞原因:
- 未对路径进行安全校验
- 未过滤
../等目录穿越字符 - 未限制可访问的文件范围
利用方式:
构造包含目录穿越字符的路径参数,读取系统任意文件
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 审计技巧
- 全局搜索:
${查找潜在的SQL注入点 - 组件分析:检查pom.xml中的第三方组件版本
- 配置文件审计:重点关注web.xml、shiro配置等
- 权限控制检查:验证每个URL的访问控制
- 业务逻辑审计:特别关注文件操作、用户注册等关键功能
0x05 总结
Jeeplus系统存在的主要安全问题:
- 多处SQL注入漏洞
- Druid未授权访问
- 任意文件上传
- 任意文件下载
这些问题主要源于:
- 过度依赖代码生成器而忽视安全
- 对用户输入缺乏充分验证
- 第三方组件配置不当
- 业务功能安全考虑不全面
代码审计时应重点关注MyBatis写法、文件操作和权限控制等关键点。