[SUCTF 2019]EasySQL

原文链接:https://blog.csdn.net/m0_55771794/article/details/118709290
这道题目需要我们去对后端语句进行猜解

1、输入非零数字得到的回显1和输入其余字符得不到回显=>来判断出内部的查询语句可能存在有||

2、也就是select 输入的数据||内置的一个列名 from 表名=>即为

后台语句为:select $post['query']||flag from Flag

所以我们要解决的问题是 || 或这个问题

测试语句:1;set sql_mode=PIPES_AS_CONCAT;select 1

拼接效果为:select 1;set sql_mode=PIPES_AS_CONCAT;select 1||flag from Flag

关于 sql_mode : 它定义了 MySQL 应支持的 SQL 语法,以及应该在数据上执行何种确认检查,其中的PIPES_AS_CONCAT将 ||视为字符串的连接操作符而非 “或” 运算符
在oracle 缺省支持 通过 ‘ || ’ 来实现字符串拼接。
但在mysql 缺省不支持。需要调整mysql 的sql_mode
模式:pipes_as_concat 来实现oracle 的一些功能
这个就可以解决||带来的问题了

select 1||flag from Flag呢,看起来没有遇见过,但是就是相当于在表后面加一列 1

还有一个非预期解 ,1 好像是因为没有过滤而造成的,拼接后不难理解

posted @ 2023-01-17 13:43  張冰冰  阅读(61)  评论(0编辑  收藏  举报