Sky's blog

skysql之union绕waf

Word count: 438 / Reading time: 2 min
2018/02/02 Share

前记

以前校赛的时候出了一道skysql
灵感来自于bendawang师傅的一篇博客(像巨佬致敬orz)
今天正好有空写了一下题解

题目解法

题目过滤比较严格
盲注和报错注入都不太容易实现
但是不难发现
单个fuzz的话
union和select都没有被过滤
但是联合一起的话,union select是被过滤的
所以我可以猜想他的waf正则写法是:

1
|union select|

所以我们可以尝试绕过

1
union%0bselect

此时发现union select是可以用的
但是问题又出现了:
没有逗号
那么如何解决呢?这里也是比较长谈的绕过问题了
我们先看正常使用的时候

而当逗号被过滤时,我们可以使用join绕过

此时解决了这个问题
于是我们开始爆表,但是此时又发现了新的问题:
or被过滤了,information_schema没法使用,虽然题目这里提示了我们
表名为flag表,但是字段名我们并不能获得,这种情况又该如何解决?
我们再来做几个实验


可以看到这样使用的时候
id,username,password的字段名变成了1,2,3
原因也正是利用联合填充来代替掉字段名和表名
所以这个题我们可以这样构造


这样即可无需字段名来查找数据
但是题目过滤逗号,所以这里我们需要更改payload为

1
?id=-1' union%0bselect * from (select 1)x join (select i.4 from (select * from (select 1)a join (select 2)b join (select 3)c join (select 4)d union%0bselect * from flag)i limit 1 offset 1)y --

即可注入成功,获取flag:cumtctf{skysql_is_very_cool!233}

CATALOG
  1. 1. 前记
  2. 2. 题目解法