SUCTF2019_Easy_SQL_WP

本文最后更新于:2021年5月21日晚上7点30分

非预期解:

1
*,1

SQL语句完整拼接即为:

1
select *,1|| flag from Flag;

预期解:

1
1;set sql_mode=PIPES_AS_CONCAT;select 1

SQL语句完整拼接即为:

1
select 1;set sql_mode=PIPES_AS_CONCAT;select 1

题目

1607602016825

解析,堆叠注入

首先使用一些sql语句的关键字:

1607602058844

发现都被过滤了

使用fuzz跑完字典,基本上该过滤的都过滤了。就留了select比较好用的。

因此尝试堆叠注入

1607602142924

堆叠注入成功

这题,解题的时候我只能说解到堆叠注入这里,之后就做不下去了。

学习了各位大佬的wp

官方给出的payload是

1
1;set sql_mode=PIPES_AS_CONCAT;select 1

大概意思是,将sql_mode下的PIPES_AS_CONCAT参数打开

其中,PIPES_AS_CONCAT参数的意思是:

​ 将”||”视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样是,也和字符串的拼接函数Concat相类似。

题目的源代码:

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

官方wp原理:

利用堆叠注入,先将PIPES_AS_CONCAT这个参数打开,这样sql的查询语句中的||就会被当做字符串拼接处理,而不是被当做“或”运算符。这样就可以从中获取flag啦。

非预期解原理:

拼接后:

1
select *,1||flag from Flag

等价于

1
select *,1 from Flag

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!