[SUCTF 2019]EasySQL 后台语句猜测+堆叠注入

在BUUCTF有复现环境

 

 

 

出现三种情况

输入1,回显

 

 

 

输入1’,无回显

 

 

 

输入1’ or 1=1 --+

 

 

 

 

select $_GET['query'] || flag from flag

 

堆叠注入

1;show databases;show tables;  

 

 

但这里有过滤

 

由官方wp的解释来看,这道题目需要我们去对后端语句进行猜测,有点矛盾的地方在于其描述的功能和实际的功能似乎并不相符,通过输入非零数字得到的回显1和输入其余字符得不到回显来判断出内部的查询语句可能存在有||,也就是select 输入的数据||内置的一个列名 from 表名,进一步进行猜测即为select post进去的数据||flag from Flag(含有数据的表名,通过堆叠注入可知),需要注意的是,此时的||起到的作用是or的作用。

 

解法1

输入的内容为*,1

内置的sql语句为sql=“select”.

sql=“select”.post[‘query’]."||flag from Flag";

如果$post[‘query’]的数据为*,1sql语句就变成了select *,1||flag from Flag,也就是select *,1 from Flag,也就是直接查询出了Flag表中的所有内容

 

 

 

解法2

输入的内容为1;set sql_mode=pipes_as_concat;select 1

其中set sql_mode=pipes_as_concat;的作用为将||的作用由or变为拼接字符串(设置全局变量),我们执行的语句分别为select 1set sql_mode=pipes_as_concatselect 1||flag from Flag,读出flag

 

  • oracle 缺省支持 通过 ‘ || ’ 来实现字符串拼接。
  • 但在mysql 缺省不支持。需要调整mysql sql_mode
    模式:pipes_as_concat 来实现oracle 的一些功能。

 

posted @ 2020-04-20 23:01  Lee-404  阅读(264)  评论(0编辑  收藏  举报
Live2D