题目地址:https://buuoj.cn/challenges#[SUCTF%202019]EasySQL

SQL查询,观察回显,这里应该是用var_dump()输出

在测试查询的时候发现有些字符能使用,有些字符被过滤了,因此查询点进行fuzz测试,看看过滤了哪些字符

回包长度为523的都是可以使用的,其他的字符均已被过滤
PS:这里使用Burp进行fuzz的线程不要开太高,容易报429,fuzz的字符不多可以慢慢跑
;可以使用,尝试堆叠注入


首先这里的query参数无论我们输入数字什么都只会回显Array([0]= > 1),输入字母不会显,但是也没显示是过滤的,所以query的值如果为非数字则无法正确查询得到数据回显,那么查询语句就应该长这样
$sql = "select ".$post['query']."||flag from Flag";

知道查询语句了就好做了,先看一个非预期解
非预期解
||在SQL语句中表示或,在查询表中的字段内容时,逗号,用于查询多个字段名


payload
*,1

预期解
通过修改SQL配置将或运算符||设置为连接符
set sql_mode=PIPES_AS_CONCAT;

payload
1;set sql_mode=PIPES_AS_CONCAT;select 1
这样拼接得到的语句就应该是
select 1;set sql_mode=PIPES_AS_CONCAT;select 1||flag from Flag;





