【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作为渗透测试核心工具,可实现请求的拦截、修改、重放,大幅提升漏洞利用的效率,是网安从业者的必备工具。
相关推荐
黄焖鸡能干四碗6 小时前
固定资产管理系统建设方案和源码(Java源码)
大数据·数据库·人工智能·物联网·区块链
JoneBB7 小时前
ABAP Webservice连接
运维·开发语言·数据库·学习
解决问题no解决代码问题7 小时前
从乱码到脱敏导出:TiDB CSV 导出实战全指南
数据库
未若君雅裁7 小时前
MySQL高可用与扩展-主从复制读写分离分库分表
java·数据库·mysql
2401_867623987 小时前
CSS Flex布局中如何设置子元素间距_掌握gap属性的现代用法
jvm·数据库·python
月落归舟7 小时前
一篇文章了解Redis内存淘汰机制与过期Key清理
数据库·redis·mybatis
phltxy8 小时前
Redis 事务
数据库·redis·缓存
康乾隆8 小时前
SQL Server Always On 重新添加从库步骤
数据库·sqlserver
环流_8 小时前
redis核心数据类型在java中的操作
java·数据库·redis
雨辰AI8 小时前
SpringBoot3 项目国产化改造完整流程|从 MySQL 到人大金仓落地
java·数据库·后端·mysql·政务