进入题目:
定眼一看,怎么挺眼熟,这有点像强网杯堆叠注入,于是一试。
这一看,太简单了,直接show tables;然后show columns from Flag;
随后就被给了当头一棒。
随后一试,发现它过滤了flag,from,or,and,where,order,updatexml,extractvalue,union,outfile等,而且还限制了输入框的长度(很短)。我人愣了,似乎在我认知范围外了。随后看了下官方WP。
考点:猜测出本来sql语句查询时是怎么样的,这里的语句是 select $POST['query']|| flag from Flag
||在sql_mode设置了PIPES_AS_CONCAT时就是可以进行字符连接,没有设置(默认)时才是或的意思,所以这里可以将sql_mode设置为PIPIES_AS_CONCAT,然后select 1拼接起来select flag from Flag。即查询语句是 1;set sql_mode=PIPES_AS_CONCAT;select 1。拼接起来就是将select 1和select flag from Flag的结果拼接一起返回。
或者直接输入*,1 原语句变为 select *,1||flag from Flag 也可以输出最终的flag,1是临时拼接的一列,相当于下图效果