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