【PortSwigger】SQL注入第一题:WHERE 子句注入漏洞利用 —— 检索隐藏数据

实验难度 :Apprentice(学徒级)
实验平台 :Web Security Academy
实验类型 :SQL注入(SQLi)
核心技术:字符型SQL注入闭合、注释符利用、Burp Suite抓包改参、永真条件构造

一、实验概述

本实验聚焦于WHERE子句中的字符型SQL注入漏洞,漏洞存在于靶场的产品类别筛选功能中。当用户选择产品分类时,应用程序会执行拼接了用户可控参数的SQL查询语句,未对输入做任何过滤与转义,导致攻击者可构造恶意参数绕过查询限制,实现隐藏数据的检索。

1.1 漏洞核心SQL语句

应用程序原生执行的产品分类查询SQL语句如下:

sql 复制代码
SELECT * FROM products WHERE category = 'Gifts' AND released =1

其中released =1为产品发布状态限制,仅展示已发布产品;category为用户可控的查询参数,且为字符型传参(被单引号包裹),是本次注入的核心利用点。

1.2 实验目标

构造恶意SQL注入payload,绕过released =1的查询限制,使应用程序展示released =0的未发布产品,完成靶场实验要求。

1.3 实验关键Payload

本次实验核心利用的Payload:

  • 单注释绕过:' --+
  • 永真条件构造:' OR 1=1 --

二、实验前期分析

  1. 访问靶场后,通过点击产品图片和产品分类,观察URL中可控参数的变化:
    • 点击产品图片,URL携带productId参数:https://xxx.web-security-academy.net/product?productId=10
    • 点击产品分类,URL携带category参数:https://xxx.web-security-academy.net/filter?category=Clothing%2c+shoes+and+accessories
  2. 结合实验漏洞点与查询语句,确定**category为核心注入参数**,且因参数被单引号包裹,判定漏洞类型为字符型SQL注入
  3. 注入核心思路:通过闭合单引号打破原SQL语句的语法结构,利用注释符注释掉后续的AND released =1限制,或构造永真条件让WHERE子句恒成立,从而检索出未发布产品。

三、实验实施步骤

本次实验采用手动注入Burp Suite抓包注入两种方法完成漏洞利用,两种方法均能实现实验目标,分别适用于手动快速验证和工具化漏洞利用场景。

3.1 方法一:手动构造参数注入(手注)

手动在URL的category参数后拼接恶意Payload,直接通过浏览器访问实现注入,步骤如下:

步骤1:单引号注释符初步绕过

构造注入URL,在分类参数后拼接' --+--+为URL编码后的注释符,用于注释掉SQL语句后续内容):

url 复制代码
https://xxx.web-security-academy.net/filter?category=Corporate+gifts' --+

此时应用程序实际执行的SQL语句被修改为:

sql 复制代码
SELECT * FROM products WHERE category = 'Corporate gifts' -- ' AND released = 1

原语句中的AND released =1被注释符屏蔽,页面成功展示了部分未发布商品(如Caution Sign),但未触发靶场实验完成条件。

步骤2:永真条件构造完成注入

在步骤1的基础上构造永真条件OR 1=1,让WHERE子句恒成立,实现全量产品检索,构造的注入URL:

url 复制代码
https://xxx.web-security-academy.net/filter?category=Corporate+gifts' OR 1=1 --

此时应用程序实际执行的SQL语句:

sql 复制代码
SELECT * FROM products WHERE category = 'Corporate gifts' OR 1=1 -- ' AND released = 1

页面成功展示大量未发布产品,靶场提示实验完成。经测试,将OR替换为AND构造条件,同样可完成实验要求。

3.2 方法二:Burp Suite抓包改参注入

在实际渗透测试中,若参数长度较长、需多次调试Payload,可使用Burp Suite抓包后修改参数,步骤如下:

  1. 配置Burp Suite代理,使浏览器流量通过Burp Suite转发,开启拦截功能

  2. 在浏览器中点击产品分类(如Corporate gifts),Burp Suite拦截到对应的GET请求数据包;

  3. 在数据包的category参数值后拼接恶意Payload' OR 1=1--+,修改后的请求行如下:

    复制代码
    GET /filter?category=Corporate+gifts' OR 1=1--+ HTTP/2
  4. 放行修改后的数据包,Burp Suite接收到应用程序的响应包,页面展示未发布产品,实验完成。

四、实验总结与技术提炼

本次实验为入门级SQL注入实战,核心围绕字符型SQL注入的基础利用逻辑展开,通过本次实验掌握了以下网络安全核心知识点,也是渗透测试中SQL注入的基础技能:

  1. 可控参数识别:通过点击页面功能、观察URL参数变化,定位应用程序的用户可控参数,是漏洞挖掘的第一步;
  2. 注入类型判断:根据参数在SQL语句中的包裹形式(单引号/双引号/无包裹),判断字符型/数字型SQL注入,本次为典型的单引号包裹字符型注入;
  3. 字符型注入闭合技巧 :利用单引号'闭合原语句的引号,打破原有SQL语法结构,为构造恶意条件做铺垫;
  4. 注释符的使用 :利用--/--+/#等注释符,注释掉原SQL语句的后续限制条件,避免语法错误;
  5. 永真条件构造 :在SQL注入中,OR 1=1是最基础的永真条件,可让WHERE子句恒成立,实现全量数据检索;
  6. 工具辅助利用:Burp Suite作为渗透测试核心工具,可实现请求的拦截、修改、重放,大幅提升漏洞利用的效率,是网安从业者的必备工具。
相关推荐
数智化管理手记7 小时前
精益生产中的TPM管理是什么?一文破解设备零故障的密码
服务器·网络·数据库·低代码·制造·源代码管理·精益工程
翊谦8 小时前
Java Agent开发 Milvus 向量数据库安装
java·数据库·milvus
難釋懷8 小时前
OpenResty实现Redis查询
数据库·redis·openresty
别抢我的锅包肉9 小时前
【MySQL】第四节 - 多表查询、多表关系全解析
数据库·mysql·datagrip
Database_Cool_9 小时前
OpenClaw-Observability:基于 DuckDB 构建 OpenClaw 的全链路可观测体系
数据库·阿里云·ai
刘~浪地球9 小时前
Redis 从入门到精通(五):哈希操作详解
数据库·redis·哈希算法
zzh08110 小时前
MySQL高可用集群笔记
数据库·笔记·mysql
Shely201710 小时前
MySQL数据表管理
数据库·mysql
爬山算法10 小时前
MongoDB(80)如何在MongoDB中使用多文档事务?
数据库·python·mongodb
APguantou11 小时前
NCRE-三级数据库技术-第2章-需求分析
数据库·需求分析