[SUCTF 2019]EasySQL
启动靶机,显示的是一个查询界面,如下
随便试试几个关键词,发现
from,flag,information 都被过滤了,
这时不妨试一下堆叠注入,查看库名,发现有回显,
1;show databases;#
然后查看表名
1;show tables;#
但是根据上面知道过滤了from,flag,本菜鸡仅会用的几种注入方式都被ban了,
查看师傅们的wp,发现大体有两种解法:
解法一:
*,1
解法二:
因为输入1有回显,而输入其他0没有回显,猜测内置的查询语句有||,大概是这样滴
select $post['query']||flag from Flag
这样的话上面的*,1就可以理解了,就会使得后端执行select *,1||flag from Flag,也就是select *,1 from Flag
然后官方的wp是这么写的
1;set sql_mode=PIPES_AS_CONCAT;select 1
其中set sql_mode=PIPES_AS_CONCAT;的作用是将||的功能从 或运算(or) 改为 字符串拼接
我们可以从结果中看到,修改之后这个 || 相当于是将select 1 和 select flag from Flag 的结果拼接在一起
推荐几个相关的文章:
easysql这位师傅讲得比较详细,并且在本地实现了相关原理,有截图讲解。