前言
来自网络,安全性自测。 |
作者:杳若
回显UNION注入前提-确定查询返回的列数
Lab
:
SQL injection UNION attack
,
determining the number of columns returned
by
the query
实验前置必要知识点
通过突破WHERE
子句,我们可以查询到当前数据表中所有内容,如何查询其他表中的内容?
在可以突破WHERE
子句(有回显位)的情况下,我们可以利用UNION
关键字,执行其他查询并将结果追加到原始查询。
而UNION
关键字的查询语句正常工作,必须满足两个关键要求:
- 各个查询必须返回相同数量的列。
- 每列中的数据类型必须在各个查询之间兼容。
执行 SQL
注入 UNION
攻击时,要确定从原始查询返回的列数,不然数据库语句会报错
常用ORDER BY
排序或者NULL
(空值数)填充的方式。
实验要求
此实验室在产品类别筛选器中包含
SQL
注入漏洞。查询的结果在应用程序的响应中返回,因此您可以使用
UNION
攻击从其他表中检索数据。此类攻击的第一步是确定查询返回的列数。然后,您将在后续实验室中使用此技术来构建完整攻击。
若要解决实验室问题,请通过执行返回包含
null
值的附加行的
SQL
注入
UNION
攻击来确定查询返回的列数。
渗透开始
- 访问对应靶场界面
https
:
//portswigger.net/web-security/sql-injection/union-attacks
- 启动靶场
1. 站点分析
这是购物
SHOP
类型的网站
可以查看商品价格
可以使用标签
存在登录界面
2. 寻找可疑功能点(查看Burp历史记录进行分析)
从总体来看,根据提示我们优先查看具有筛选标签功能的内容
3. 功能点测试
将对应的日志信息发送到重放模块,比较直观的一点是该功能点具有回显位
且具有筛选功能,筛选关键词Accessories
的内容显示在HTML
中,推测后端代码
SELECT
*
FROM products WHERE category
=
'Accessories'
AND released
=
1
利用报错进行尝试,添加单引号后报错,推测大概率存在SQL
注入
尝试注释注入的方法查看商品详情,发现回显正常
GET
/
filter
?
category
=
Accessories
' -- q HTTP/2
这说明执行了SQL
语句中的注释功能,存在SQL
注入
4.确定查询返回列数
方法一、尝试ORDER BY
利用该排序命令排序第一列回显正常(说明语法正确)
GET
/
filter
?
category
==
Accessories
' ORDER BY 1 -- q HTTP/2
利用Burp
的枚举模块,很直观的发现,当排序到4的时候页面产生了错误
GET
/
filter
?
category
=
Accessories
' ORDER BY 3 -- q HTTP/2
共有3个字段
方法二、NULL
初步拼接字段,直到页面正常
可以发现拼接一个字段是错误的
GET
/
filter
?
category
=
Accessories
' UNION SELECT NULL -- q HTTP/2
我们依旧利用枚举模块进行尝试,3个字段的拼接是正确的
5.完成实验
使用确认的payload
完成实验
原文始发于微信公众号(零信任攻防实验室):回显UNION注入前提-确定查询返回的列数
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论