从偶然的机会发现一个mysql特性到wooyun waf绕过题
MayIKissYou | 2015-06-19 12:00
最近在测试的时候,偶然的机会发现了一个mysql的特性,
为啥是偶然的机会呢。。。。。
一次测试的过程中我在mysql的console下做了如下的操作:
看出些什么了么?
我当时发现报错的时候例如-+{等符号 报错的时候提示的是''(双引号里没东西),但是如select后面添加1 a等内容的时候报的是
selecta,select1等等。
想到共性了么,-+{等等内容是能够直接添加到select后面的,知其那那个sql总结的帖子里有,
例如
select-1;
select+1;
select{x 1};
而select后面直接跟1 a的时候就不可以直接报错了。
再回过头去看那张图的时候发现select后面直接跟.的时候尽然也是提示的'',此时就开始怀疑select后面也应该是能够直接跟.号的。
因此我们现在确定了select.的形式,此时想要做的是怎么闭合这个语句,使得该语句能够正常的执行。
又开始手工能够测试:
测试了多少payload,我也不记得了,最后当输入以下内容的时候,让我小happy了一下:
竟然提示的是
Unknown table '1' in field list
然后我就做了如下的操作:
看到没竟然成功了使用的语句是:
select.``.schema_name from information_schema.schemata;
ps.我只能说运气不错。
就这样证明了select后面直接跟.也是可以的。
---------------------------------------------------------华丽的分割线----------------------------
wooyun waf绕过
这是痛苦的经历,测试的过程中感觉到和往常的waf有点不同,感觉每当我拼凑出来的bypass语句能够执行的时候就出现了bad hacker。
由于我是大晚上12点开始弄得,发现已经有答案了,测试了1个多小时没有结果之后就去看了下write up。
我擦勒竟然完全和自己的做法不在同一频道,完全没想到这位牛使用的方法。
整理下思路吧
1:输入'报错了,一个like的查询语句,试试了初步判断里面没有内容,然后没有回显,而sql报错的时候不是mysql自己的报错,基本不能使用union,和报错注入,考虑时间盲注了。
ps.自己之前一直在和那个union的过滤较劲,关键是没摸出到底是啥规则,好吧今天来的时候小v说不是基于规则的,我擦勒有点累蹦。
2:由于基于时间盲住了因此就会有类似这样的模式:
if(你这样,睡几秒,不睡)
貌似and这种玩意都不能用,于是就直接使用运算符号吧:
http://rile.gou.gg/search?query=1%27>(select[])
在这里的时候输入各种玩意都返回报错,后来试了下select.貌似成功了。
感觉应该有戏了,反反复复拼凑下得到了如下的payload,哈哈这里我偷懒没有去自己爆数据了直接拿了那位大牛爆出的表名,最终的payload
http://rile.gou.gg/search?query=1%27>(select.``.schema_name from (select.``.schema_name,if(ascii(mid((select * from test.flag),1,1))=102,(benchmark(5000000,sha(1))),1) from information_schema.schemata)x)%23
用lijiejie的脚本改一下,然后直接报flag:
结果少了几位 没爆出来,延时不稳定没= =
ps.好吧 被恶心到了 现在已经困如*了
各种吐槽:
1#
MayIKissYou | 2015-06-19 12:04
SF自己坐了
2#
一个狗 (gou.gg) | 2015-06-19 12:05
good~
3#
′ 雨。 | 2015-06-19 12:07
卧槽。。 跪了。
4#
hey_man | 2015-06-19 12:08
good~
5#
小杰哥 | 2015-06-19 12:15
我操 NB
语句:select.``.schema_name from information_schema.schemata;
`` 是啥? 怎么打出来? 英文下的单引号? 报错...6
6#
小杰哥 | 2015-06-19 12:17
- - 知道了 笔记本 按来按去才发现
是`` 英文状态下的 ~ ~ 不用按shift
7#
luwikes (土豆你个西红柿,番茄你个马铃薯~~~) | 2015-06-19 13:05
赞
8#
大物期末不能挂 | 2015-06-19 13:23
赞!
说下我的思路吧。
1.看到sql报错想到报错注入,各种尝试无果。
2.奇葩了一下思路,猜出了另外一个get参数page,http://rile.gou.gg/search?query=&page= 然后试了试没出来昨晚就去睡觉了。结果今早就发现已经被解出来了。Orz
9#
sco4x0 (-.-) | 2015-06-19 13:45
跪舔
10#
zzzzy (我已然别无所求) | 2015-06-19 13:56
这是否说 又能秒一堆waf了?...
11#
Shin (飞我带B装带求) | 2015-06-19 13:58
赞
12#
neal | 2015-06-19 14:11
遇到select 就die 怎么破?
13#
aptvxo | 2015-06-19 14:27
sf
14#
卡卡 | 2015-06-19 15:52
很不错!
15#
刘海哥 (moc.ghuil.www) | 2015-06-19 17:33
mark
16#
金枪银矛小霸王 (:)) | 2015-06-19 17:38
``
17#
sin (专注) | 2015-06-19 17:55
6666
18#
小钟 (What's going on.) | 2015-06-19 18:00
马克
19#
′ 雨。 | 2015-06-19 18:14
也顺便把自己的贴出来。
http://rile.gou.gg/search?query=1' || if(ascii(substr((/*!select*/ */*a!*/from test.flag),1,1))=97,1,0)%23
http://rile.gou.gg/search?query=1' || if(ascii(substr((/*!select*/ */*a!*/from test.flag),1,1))=97,1,1)%23
20#
MayIKissYou | 2015-06-19 18:30
@′ 雨。 good
21#
魂淡、 | 2015-06-19 18:52
good job!
22#
foxhack | 2015-06-19 19:33
good job!
23#
bey0nd | 2015-06-19 21:39
@′ 雨。 我记得||是被过滤的
24#
′ 雨。 | 2015-06-19 22:50
@bey0nd 测试是成功的。