buu-[SUCTF 2019]EasySQL

打开题目

 

 先随便输入下试试

 

 

 

 

 

 

 

 输入数字时有回显,输入字母则没有

输入1'时没有回显,输入1“时显示nonono

猜测关闭了错误回显

先看看有多少个字段

 

 好吧,应该是order by 被过滤了

这样的话联合注入和报错注入就行不通了

试试看布尔盲注和延时注入

 

 

 

好吧,都不行

想到最近刚学的堆叠注入

试试看

 

 成功

再看看表

 

 直接查看表中的数据

 

应该是from又被过滤了

看了下wp

这道题需要通过回显的内容对后端语句进行猜测

 因为输入任何数字回显的都是Array ( [0] => 1 ),说明1是或运算产生的值,就可能存在||

也就是select 输入的数据||内置的一个列名 from 表名

根据题目

 

 和堆叠注入查询到的内容

猜想||拼接的可能是 flag form Flag(此时||起到的作用是or的作用)

内置的sql语句应该是

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

解法1

由于本题没有过滤掉*

所以可以直接构造pauload:*,1

 

原理是当$post[‘query’]的数据为*,1时

sql语句就变成了

select *,1||flag from Flag

也就是select *,1 from Flag

这就可以直接查询到Flag表中的所有内容了

解法2

payload:1;set sql_mode=pipes_as_concat;select 1

pipes_as_concat能将 || 视为字符串的连接操作符而非或运算符

所以实际执行的sql语句就变成了

select 1;set sql_mode=PIPES_AS_CONCAT;select "1"+flag from Flag

 

posted @ 2021-06-08 19:36  c0d1  阅读(75)  评论(0编辑  收藏  举报