0


SQL注入之WHERE 子句中的 SQL 注入漏洞

🦄WHERE 子句中的 SQL 注入漏洞,允许检索隐藏数据

Lab: SQL injection vulnerability in WHERE clause allowing retrieval of hidden data

● 实验室要求

此实验室在产品类别筛选器中包含 SQL 注入漏洞。当用户选择类别时,应用程序将执行如下所示的 SQL 查询:

SELECT * FROM products WHERE category = 'Gifts' AND released = 1

若要解决实验室问题,请执行 SQL 注入攻击,使应用程序显示任何类别(已发布和未发布)中所有产品的详细信息。

● 必要知识点

一个没有安全概念的网站,会直接将用户的输入拼接到SQL语句中进行查询。
例如当用户单击“礼品”类别时,其浏览器会请求 URL:
https://insecure-website.com/products?category=Gifts
这会导致应用程序进行 SQL 查询,以从数据库中检索相关产品的详细信息:
SELECT * FROM products WHERE category = ‘Gifts’
因此在黑盒测试中可以利用注释的方法尝试SQL注入

● 黑盒测试

● 首先访问对应的靶场界面

https://portswigger.net/web-security/sql-injection/lab-retrieve-hidden-data

● 启动靶场

  https://0a6c00d604cb757cc0978126005c00ca.web-security-academy.net/

1. 分析功能点

a. 查看网站发现类似于SHOP的网站
alt
b. 点击进入对应的

View details

可以查看商品的信息
c. url拼接了

/product?productId=6

ALT

2. 查看burp的历史日志记录-(寻找功能点)

a. 从总体的功能点来分析 : 加载首页→加载了很多图片→访问商品明细→展示信息
b. 因此,不难分析

/product?productId=6

就是我们的突破口
ALT

3. 将对应的日志信息发送到重放模块-(测试开始)

a. 发送一次数据包
ALT
b. 猜测存在注入点,尝试直接注入,将6直接修改成5+1,查看回显情况是否有变化

"Invalid product ID"

说明SQL语句并不是直接结束的,例如

SELECT * FROM products WHERE category = 'Gifts'

很有可能是后面还拼加了内容,例如:

SELECT * FROM products WHERE category = 'Gifts' AND released = 1

这时候我输入

5+1

会变成

SELECT * FROM products WHERE category = '5+1' AND released = 1

ALT
c. 尝试拼接注入

1' or 1=1 -- qwe

回显"Protocol error" 错误的请求,说明注入的方式不对

d. 接着测试了其他位置,发现尝试失败

4. 寻找其他功能注入点-(找错点了TAT)

a. 点击了标签,发现参数变成了

filter?category=Clothing%2c+shoes+and+accessories

并不一定只有数字的地方才是注入点

在这里插入图片描述

b. 尝试修改

filter?category=

发现内容回显在了HTML中
在这里插入图片描述

c. 用户可控的传参+存在回显=大概率存在注入
根据提示的代码

SELECT * FROM products WHERE category = 'Gifts' AND released = 1

以及我们回显的代码

/filter?category=Clothing, shoes and accessories

得到SQL语句

SELECT * FROM products WHERE category = 'Clothing, shoes and accessories' AND released = 1

d. 实验要求是显示隐藏的内容,因此我们让搜索的内容为全部
通过注释的方法,让 SQL 返回的结果为真,研究语法是单引号闭合构造Poyload如下:

/filter?category=adfad' or 1=1 -- qwe
SELECT * FROM products WHERE category = 'adfad' or 1=1 -- qwe' AND released = 1

从SQL语句结果的高亮可以发现 – 以及后面的内容都被注释掉了
服务器就会认为搜索结果为adfad,但是数据库里没有adfad结果为假,但是用或者连接,后面一句 1=1 必定为真,因此会显示所有category内的内容
5. 拼接

/filter?category=adfad' or 1=1 -- qwe

成功显示了所有内容(包括隐藏的内容),完成了实验
在这里插入图片描述


本文转载自: https://blog.csdn.net/qq_61812944/article/details/131855137
版权归原作者 杳若听闻 所有, 如有侵权,请联系我们删除。

“SQL注入之WHERE 子句中的 SQL 注入漏洞”的评论:

还没有评论