某OA-SQL注入
字数 1240 2025-08-09 22:00:46

某OA系统SQL注入漏洞分析与利用教学文档

1. 漏洞概述

1.1 漏洞特征

  • 通过构造特殊SQL注入语句绕过防护
  • 可查询在线用户Session记录
  • 可实现任意用户登录
  • 可配合任意文件上传漏洞上传webshell

1.2 漏洞原理

  • 位于get_datas.php文件中的SQL语句变量可控
  • 攻击者可利用此漏洞获取在线用户的Session值
  • 系统未对用户输入进行充分过滤和验证

2. 漏洞位置

  • 漏洞文件路径:/general/reportshop/utils/get_datas.php
  • 关键参数:USER_IDPASSWORDcoltab

3. 漏洞利用方法

3.1 获取Session步骤

  1. 使用POST方式访问目标URL
  2. 构造特殊Payload:
POST /general/reportshop/utils/get_datas.php HTTP/1.1
Host: [target]
Content-Type: application/x-www-form-urlencoded

USER_ID=OfficeTask&PASSWORD=&col=1,1&tab=5 where 1={`\= '`1} union (select uid,sid from user_online where 1\={`=`1})-- '1
  1. 服务器响应中将包含在线用户的uid和sid(Session ID)

3.2 任意用户登录

  1. 从响应中提取有效的Session ID
  2. 访问general/index.php
  3. 替换请求中的Session值为获取到的有效Session
  4. 成功以该用户身份登录系统

4. 漏洞验证与复现

4.1 复现准备

  1. 要求管理员正常登录系统并保持会话
  2. 准备Burp Suite等工具进行测试

4.2 复现步骤

  1. 使用Burp Suite拦截请求
  2. 构造并发送上述Payload
  3. 获取响应中的Session值
  4. 使用错误Session测试登录(验证防护)
  5. 使用正确Session测试登录(验证漏洞)

5. 漏洞分析

5.1 注入技术分析

  • 使用特殊字符{ } \ =等进行绕过
  • 利用联合查询(union select)获取user_online表中的敏感信息
  • 注释符--用于截断后续SQL语句

5.2 攻击链分析

  1. 通过SQL注入获取有效Session
  2. 使用Session实现身份伪造
  3. 配合其他漏洞(如文件上传)获取持久化访问

6. 防御措施

6.1 临时缓解措施

  1. 监控/general/reportshop/utils/get_datas.php的访问
  2. 检查日志中是否包含类似注入Payload
  3. 限制该接口的访问权限

6.2 长期修复方案

  1. 对用户输入进行严格过滤和验证
  2. 使用预编译语句(Prepared Statement)替代动态SQL
  3. 实施最小权限原则,限制数据库账户权限
  4. 对Session机制进行加固,增加绑定IP等验证

7. 检测与监控

7.1 检测方法

  1. 监控SQL注入常见特征字符
  2. 检查异常Session使用情况
  3. 分析user_online表的异常查询

7.2 监控建议

  1. 对关键SQL查询实施日志记录
  2. 建立异常访问行为基线
  3. 实施实时告警机制

8. 总结

该漏洞利用OA系统中一个未充分过滤的SQL查询接口,通过精心构造的Payload绕过常规防护措施,获取在线用户Session实现任意用户登录。漏洞危害性高,可导致系统完全沦陷。修复时应从输入验证、权限控制和Session管理等多方面进行加固。

某OA系统SQL注入漏洞分析与利用教学文档 1. 漏洞概述 1.1 漏洞特征 通过构造特殊SQL注入语句绕过防护 可查询在线用户Session记录 可实现任意用户登录 可配合任意文件上传漏洞上传webshell 1.2 漏洞原理 位于 get_datas.php 文件中的SQL语句变量可控 攻击者可利用此漏洞获取在线用户的Session值 系统未对用户输入进行充分过滤和验证 2. 漏洞位置 漏洞文件路径: /general/reportshop/utils/get_datas.php 关键参数: USER_ID 、 PASSWORD 、 col 、 tab 3. 漏洞利用方法 3.1 获取Session步骤 使用POST方式访问目标URL 构造特殊Payload: 服务器响应中将包含在线用户的uid和sid(Session ID) 3.2 任意用户登录 从响应中提取有效的Session ID 访问 general/index.php 替换请求中的Session值为获取到的有效Session 成功以该用户身份登录系统 4. 漏洞验证与复现 4.1 复现准备 要求管理员正常登录系统并保持会话 准备Burp Suite等工具进行测试 4.2 复现步骤 使用Burp Suite拦截请求 构造并发送上述Payload 获取响应中的Session值 使用错误Session测试登录(验证防护) 使用正确Session测试登录(验证漏洞) 5. 漏洞分析 5.1 注入技术分析 使用特殊字符 { } \ = 等进行绕过 利用联合查询(union select)获取user_ online表中的敏感信息 注释符 -- 用于截断后续SQL语句 5.2 攻击链分析 通过SQL注入获取有效Session 使用Session实现身份伪造 配合其他漏洞(如文件上传)获取持久化访问 6. 防御措施 6.1 临时缓解措施 监控 /general/reportshop/utils/get_datas.php 的访问 检查日志中是否包含类似注入Payload 限制该接口的访问权限 6.2 长期修复方案 对用户输入进行严格过滤和验证 使用预编译语句(Prepared Statement)替代动态SQL 实施最小权限原则,限制数据库账户权限 对Session机制进行加固,增加绑定IP等验证 7. 检测与监控 7.1 检测方法 监控SQL注入常见特征字符 检查异常Session使用情况 分析 user_online 表的异常查询 7.2 监控建议 对关键SQL查询实施日志记录 建立异常访问行为基线 实施实时告警机制 8. 总结 该漏洞利用OA系统中一个未充分过滤的SQL查询接口,通过精心构造的Payload绕过常规防护措施,获取在线用户Session实现任意用户登录。漏洞危害性高,可导致系统完全沦陷。修复时应从输入验证、权限控制和Session管理等多方面进行加固。