A-A+
skysql之union绕waf
前记
以前校赛的时候出了一道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}
原文链接:https://skysec.top/2018/02/02/skysql%E4%B9%8Bunion%E7%BB%95waf/