【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作为渗透测试核心工具,可实现请求的拦截、修改、重放,大幅提升漏洞利用的效率,是网安从业者的必备工具。
相关推荐
艾莉丝努力练剑2 小时前
【MYSQL】MYSQL学习的一大重点:MYSQL数据类型
android·linux·数据库·人工智能·学习·mysql·网络安全
惶了个恐2 小时前
Linux系统编程第十弹——sqlite3
数据库
c++之路2 小时前
Ubuntu 22.04 完整安装与配置指南(VMware + 系统优化 + 开发环境)
linux·数据库·ubuntu
pangares2 小时前
MySQL中between and的基本用法
android·数据库·mysql
喵叔哟2 小时前
8. 【Blazor全栈开发实战指南】--路由与导航
数据库·微服务·.net
liqianpin12 小时前
maven导入spring框架
数据库·spring·maven
wanhengidc2 小时前
服务器硬盘都有哪些功能
大数据·运维·服务器·数据库·科技
尋有緣2 小时前
Spark SQL 调优
大数据·sql·spark
A10169330712 小时前
QT数据库(三):QSqlQuery使用
数据库·qt·oracle