某协同系统漏洞挖掘过程记录
字数 1077 2025-08-06 08:34:49
某协同系统SQL注入漏洞挖掘与分析教学文档
0x01 漏洞概述
本文档详细记录了对某协同系统的SQL注入漏洞挖掘过程,包括注入点发现、鉴权绕过和最终利用的全流程分析。
0x02 技术背景
DAO层分析
- DAO(Data Access Object)设计模式用于分离数据访问逻辑与业务逻辑
- 该系统未使用MyBatis等持久化框架,直接使用原生DAO实现
- 主要关注
SysDao接口及其实现类(BasicDaoImpl,ModeDaoImpl,SysTableDao)
关键方法分析
getStringData(String sql):直接执行传入的SQL语句getFieldSetBySql(String sql, ...):通过SQL语句获取数据
0x03 漏洞挖掘过程
1. 寻找注入点
-
分析
SysTableDao类中的getStringData方法实现:String getStringData(String sql, Object[] params, boolean debug) { // 直接使用PreparedStatement执行SQL // 当params为null时直接执行原始SQL } -
发现6个JSP调用了
getStringData(String)方法,其中share_select.jsp存在可控点:<% String type = request.getParameter("type"); String fid = request.getParameter("fid"); if("2".equals(type)) { String sql = "SELECT * FROM table WHERE fid=" + fid; String result = sysDao.getStringData(sql); } %>
2. 绕过鉴权机制
-
Filter分析:
- 系统使用Filter拦截.jsp请求
doFilter方法关键逻辑:if ((!uri.endsWith(".jsp") || !isNotValidatePage(uri)) && !uri.endsWith(".xml") && !uri.endsWith(".xf") || verificationURL(request, uri, response))
-
绕过方法:
- 利用
request.getRequestURI()特性,构造;绕过:/xxxx/share_select.jsp;jpg - 图片后缀请求会被直接放行
- 利用
-
SQL过滤绕过:
- 系统使用
sqlValidate方法检测黑名单:String[] badStrs = {"exec%20", "execute%20", "drop%20", "truncate%20", "net%20user%20", "xp_cmdshell%20", "select%20", "insert%20", "update%20"}; - 可通过Unicode编码或大小写变异绕过
- 系统使用
3. 寻找替代注入点
-
分析
getFieldSetBySql方法:// BasicDaoImpl类中 getFieldSetBySql(String sql, Object[] params, String tableName) { // 直接执行SQL语句 } -
在
FormService中发现调用点:public String getFormTableInfo(String relId) { String sql = "SELECT * FROM table WHERE relId=" + relId; return dao.getFieldSetBySql(sql, null, null); } -
对应JSP文件
validate.jsp中的利用:<% String json = request.getParameter("json"); // 解析json if("0".equals(type)) { formService.getFormTableInfo(relId); } %>
0x04 漏洞利用链
完整利用流程:
- 构造请求绕过Filter鉴权
- 访问存在SQL注入的JSP端点
- 通过参数控制拼接SQL语句
- 绕过基础SQL过滤机制
示例Payload:
POST /validate.jsp;jpg HTTP/1.1
{"type":"0","relId":"1 AND 1=CONVERT(int,@@version)"}
0x05 修复建议
-
DAO层修复:
- 禁止直接拼接SQL语句
- 强制使用参数化查询
- 即使params为null也应使用占位符
-
Filter增强:
- 规范化URL解析,处理
;绕过 - 增加更全面的SQL关键词检测
- 实现统一的权限校验机制
- 规范化URL解析,处理
-
服务层修复:
- Service层应进行输入验证
- 实现白名单机制限制可用字段
0x06 总结
本案例展示了从代码审计到实际利用的完整SQL注入漏洞挖掘过程,重点包括:
- DAO层不安全编码实践分析
- JSP鉴权机制的绕过技巧
- 多层代码审计方法
- 过滤机制的绕过思路
通过此案例可学习到企业级系统安全审计的基本方法和思路。