SQL注入 | 猎奇案例篇
字数 1042 2025-08-22 12:23:06
SQL注入高级案例分析与防御教学文档
一、SQL注入概述
SQL注入是一种将恶意SQL代码插入或"注入"到输入参数中的攻击技术,攻击者通过这些参数从数据库服务器获取非授权信息或执行非授权操作。
二、高防护环境下的万能密码绕过案例
1. 案例背景
- 目标:登录页面
- 参数:
ln(用户名)和pwd(密码) - 初始测试:输入任意账号密码后抓包
2. 漏洞发现过程
-
单引号测试:
- 在
ln参数后添加单引号('),返回500错误 - 添加两个单引号(
''),错误消失,确认存在SQL注入漏洞
- 在
-
传统万能密码测试:
- 尝试常见万能密码如
' or 1=1--等 - 发现请求被安全设备拦截,无返回包
- 确认安全设备对常见SQL关键词进行了防护
- 尝试常见万能密码如
3. 绕过技术分析
有效payload:
ln=admin';--+-
原理分析:
- 原始SQL语句推测为:
select * from user where username='$ln' and password='$pwd';
- 注入后SQL变为:
select * from user where username='admin';--+-' and password='123456';
- 实际执行:
select * from user where username='admin';
失败原因:
- 系统中不存在
admin用户 - 解决方案:爆破用户名部分,如:
ln=knownuser';--+-
4. 防御绕过要点
- 避免使用常见SQL关键词
- 利用注释符(--)截断后续SQL验证
- 需要配合有效的用户名
三、LIKE注入案例
1. 漏洞原理
在SQL的LIKE子句中,百分号(%)和下划线(_)是通配符,可能被利用进行注入攻击。
2. 典型攻击方式
- 密码字段LIKE注入:
SELECT * FROM users WHERE username = 'admin' AND password LIKE '%'
- 此条件永远为真,因为LIKE '%'匹配任何字符串
- 用户名枚举:
SELECT * FROM users WHERE username LIKE 'a%'
- 可逐步猜测用户名首字母
3. 防御措施
- 对LIKE子句中的通配符进行转义
- 使用参数化查询
- 限制LIKE查询的权限
四、高级SQL注入技术
1. 注释符使用技巧
--(SQL标准注释)#(MySQL注释)/* */(多行注释)
2. 绕过过滤的方法
- 大小写变异:
SeLeCt * fRoM users
- 内联注释:
/*!SELECT*/ * FROM users
- 编码绕过:
- URL编码
- 十六进制编码
- Unicode编码
- 字符串拼接:
EXEC('SEL' + 'ECT * FROM users')
五、防御措施
1. 输入验证
- 白名单验证
- 数据类型检查
- 长度限制
2. 参数化查询
- 使用预处理语句
- 存储过程
- ORM框架
3. 最小权限原则
- 数据库账户仅授予必要权限
- 避免使用管理员账户连接应用
4. 其他措施
- Web应用防火墙(WAF)配置
- 定期安全测试
- 错误信息处理(不显示详细错误)
六、总结
本教学文档通过实际案例分析展示了SQL注入的高级技巧,特别是:
- 在高防护环境下如何寻找和利用注入点
- LIKE注入的原理和利用方式
- 多种绕过安全防护的技术
- 全面的防御措施
安全是一个持续的过程,防御SQL注入需要从开发到运维的全生命周期防护。