前言
实验室标题为:
where 子句中的 SQL 注入漏洞允许检索隐藏数据
等级:学徒
本实验室的产品类别过滤器中存在 SQL 注入漏洞。当用户选择一个类别时,应用程序会执行如下 SQL 查询:
SELECT * FROM products WHERE category = 'Gifts' AND released = 1
根据 sql 语句提示,参数 category 可能存在 sql 注入
进入实验室
这是一个商品页面
注意一点,首页显示的商品只有 12 个
查看任意商品
发现 url 链接中的参数是productId,并非是category。说明注入点并不在这里
https://xxxxxxxx/product?productId=9
寻找注入点
返回上一个页面,点击任意选项
发现链接中出现参数category
使用 hackbar 辅助
将category 的值删去,页面显示为空
此时的 sql 语句应该为
SELECT * FROM products WHERE category = '' AND released = 1
构造 payload
在 sql 语句的提示中,可知是单引号闭合
尝试输入单引号,并使用注释符
此时页面依然为空
sql 语句应为
SELECT * FROM products WHERE category = '' --qwe' AND released = 1
尝试输入’and 1=1 --qwe
页面依然为空
将连接符 and 改为 or
页面不再为空,页面也会出现通关祝贺
此时商品数量为 20 个,相比开始显示的 12 个商品,多了 8 个
这时 sql 语句应为
SELECT * FROM products WHERE category = '' or 1=1 --qwe' AND released = 1
通过前后页面商品数量对比,可知利用此漏洞可以让一些未上架或已下架的商品显示出来
burp 抓包注入
除了使用 hackbar 辅助,还可以通过抓包的方式进行注入
在注入点进行抓包,删去参数 category 的值,发送数据包,返回包显示 200
接着尝试闭合,构造 payload,和上述步骤一样,可以通过渲染页面判断是否成功通关