[SUCTF 2019]Easy SQL

 

 

 日常and or

 

 

 一圈测试之后发现,and or &&  from都过滤了,很奇怪 || 这个没有过滤。

接着尝试,试试堆叠注入。

 

 

 

 可以,接着看表

 

 

发现flag

尝试desc

 

 

经测试,Flag被过滤了。

 

想过之前碰到一个预处理的,尝试之后发现限制了输入长度。

 

concat char 都不行,prepare被过滤

 

突然想到and or &&都被过滤了,唯独留了 ||,可能有什么猫腻

 

查了一下mysql ||这个符号。

 

结果发现oracle || 还有连接的作用

 

但这里是或

 

 

 

所以尝试一下有没有办法能把 || 改成oracle那样的连接符

 

然后就没有然后了,不会了,看了wp,发现还有个sql_mode这个东西

 

关于sql_mode : 它定义了 MySQL 应支持的 SQL 语法,以及应该在数据上执行何种确认检查,其中的PIPES_AS_CONCAT将 || 视为字符串的连接操作符而非 “或” 运算符。

 

具体说明:https://www.cnblogs.com/piperck/p/9835695.html

 

还有就是这个模式下进行查询的时候,使用字母连接会报错,使用数字连接才会查询出数据,因为这个 | | 相当于是将 select 1 和 select flag from flag 的结果拼接在一起。

 

看了关键的查询代码是 :

select $post['query']||flag from Flag

 

官方给的 payload 是

1;set sql_mode=PIPES_AS_CONCAT;select 1

 

 

拼接一下就是

select 1;set sql_mode=PIPES_AS_CONCAT;select 1||flag from Flag

 

 关于 *,1

拼接一下就是

select *,1||flag from Flag

 

select *,1 from Flag

可以,脑洞清奇,记下来了。

 

posted @ 2020-10-12 22:48  du1ge  阅读(148)  评论(0编辑  收藏  举报