【Web实战】新手入门java审计
字数 1480 2025-08-10 08:28:49
JshERP CMS安全审计教学文档
环境搭建
-
源码获取:
- 从GitHub下载源码:https://github.com/jishenghua/jshERP/releases/tag/2.3
- 使用IntelliJ IDEA导入项目
-
数据库配置:
- 导入提供的数据库文件
- 修改配置文件中的数据库连接参数
-
测试账户:
- 用户名:jsh
- 密码:123456
SQL注入审计
MyBatis SQL注入原理
#{}:预编译参数,安全${}:直接拼接SQL,存在注入风险
审计步骤
- 全局搜索
${查找SQL拼接点 - 发现
like子句中使用${}拼接SQL - 定位到
countsByUser方法 - 跟踪调用链:
UserService.countUser()调用countsByUser- 查找
UserService中调用countUser的位置
未授权访问审计
鉴权绕过分析
-
检查
filter文件中的配置:- 不拦截的资源类型:
.css,.js,.jpg,.png,.gif,.ico - 不拦截的路径:
/user/login,/user/registerUser,/v2/api-docs
- 不拦截的资源类型:
-
绕过原理:
- 使用
getRequestURI()获取请求路径 - 可通过
../路径遍历绕过 - 示例:未登录访问
home会302跳转,但使用路径遍历可绕过
- 使用
-
静态资源校验同样存在此问题
存储型XSS审计
漏洞发现过程
-
黑盒测试发现:
- 修改备注信息时可注入XSS
- 每次访问页面都会触发XSS
-
代码分析:
- 前端未对输入进行过滤
- 路由定位到
controller层 - 调用链:
depotHeadService.updateDepotHeadAndDetail() - 直接获取
row参数并传递 remark字段未过滤直接存入数据库
-
输出过程:
- 查询数据时直接返回未过滤
- 前端使用
datagrid渲染数据,未进行转义 - 导致存储型XSS
影响范围
- 多个页面存在相同问题,不仅限于备注字段
越权漏洞审计
1. 密码重置越权
-
功能点:账号用户管理 → 编辑用户 → 重置密码
-
漏洞分析:
- 仅校验是否为
admin账户 - 无其他权限校验
- 可重置任意非admin账户密码
- 仅校验是否为
-
复现步骤:
- 登录
test3账户 - 获取
test2账户ID(如135) - 修改请求重置
test2密码
- 登录
2. 密码修改越权
- 漏洞分析:
- 仅比对旧密码
- 结合重置漏洞可完全控制账户
- 删除等操作同样存在越权
接口泄露问题
- 可直接访问的API接口:
- 暴露了系统功能接口
- 为越权攻击提供信息
修复方案(3.1版本)
-
SQL注入:
- 将
${}改为#{}实现预编译
- 将
-
接口泄露:
- 移除敏感API接口
-
其他漏洞:
- 增加权限校验
- 实现输入过滤
审计方法论总结
-
SQL注入:
- 重点检查MyBatis中的
${}使用 - 特别是
like、order by等动态SQL部分
- 重点检查MyBatis中的
-
未授权访问:
- 检查过滤器配置
- 测试路径遍历绕过
- 验证静态资源校验
-
XSS:
- 跟踪数据流:输入→存储→输出
- 检查前端渲染方式
-
越权:
- 验证每个操作的权限校验
- 测试水平越权和垂直越权
-
接口安全:
- 检查敏感接口暴露
- 验证接口权限控制
工具使用建议
-
代码审计:
- 使用IDE全局搜索功能
- 重点关注
controller、service、mapper层
-
黑盒测试:
- Burp Suite拦截修改请求
- 测试边界情况和异常输入
-
调试:
- 使用IDEA断点调试
- 跟踪关键数据流