实验难度 :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 --


二、实验前期分析
- 访问靶场后,通过点击产品图片和产品分类,观察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
- 点击产品图片,URL携带
- 结合实验漏洞点与查询语句,确定**
category为核心注入参数**,且因参数被单引号包裹,判定漏洞类型为字符型SQL注入。 - 注入核心思路:通过闭合单引号打破原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抓包后修改参数,步骤如下:
-
配置Burp Suite代理,使浏览器流量通过Burp Suite转发,开启拦截功能;
-
在浏览器中点击产品分类(如Corporate gifts),Burp Suite拦截到对应的GET请求数据包;
-
在数据包的
category参数值后拼接恶意Payload' OR 1=1--+,修改后的请求行如下:GET /filter?category=Corporate+gifts' OR 1=1--+ HTTP/2 -
放行修改后的数据包,Burp Suite接收到应用程序的响应包,页面展示未发布产品,实验完成。

四、实验总结与技术提炼
本次实验为入门级SQL注入实战,核心围绕字符型SQL注入的基础利用逻辑展开,通过本次实验掌握了以下网络安全核心知识点,也是渗透测试中SQL注入的基础技能:
- 可控参数识别:通过点击页面功能、观察URL参数变化,定位应用程序的用户可控参数,是漏洞挖掘的第一步;
- 注入类型判断:根据参数在SQL语句中的包裹形式(单引号/双引号/无包裹),判断字符型/数字型SQL注入,本次为典型的单引号包裹字符型注入;
- 字符型注入闭合技巧 :利用单引号
'闭合原语句的引号,打破原有SQL语法结构,为构造恶意条件做铺垫; - 注释符的使用 :利用
--/--+/#等注释符,注释掉原SQL语句的后续限制条件,避免语法错误; - 永真条件构造 :在SQL注入中,
OR 1=1是最基础的永真条件,可让WHERE子句恒成立,实现全量数据检索; - 工具辅助利用:Burp Suite作为渗透测试核心工具,可实现请求的拦截、修改、重放,大幅提升漏洞利用的效率,是网安从业者的必备工具。