当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2015-0121291

漏洞标题:一次艰难的安全狗规则绕过

相关厂商:安全狗

漏洞作者: MayIKissYou

提交时间:2015-06-18 08:53

修复时间:2015-09-16 10:16

公开时间:2015-09-16 10:16

漏洞类型:设计错误/逻辑缺陷

危害等级:中

自评Rank:10

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-06-18: 细节已通知厂商并且等待厂商处理中
2015-06-18: 厂商已经确认,细节仅向厂商公开
2015-06-21: 细节向第三方安全合作伙伴开放
2015-08-12: 细节向核心白帽子及相关领域专家公开
2015-08-22: 细节向普通白帽子公开
2015-09-01: 细节向实习白帽子公开
2015-09-16: 细节向公众公开

简要描述:

估计下面评论又要开始诅咒了。。。。。

详细说明:

1:篇前先附送一个sql注入绕过,字符是%a0,这个字符之前是修正果的,我记得上个版本有两个字符没有过滤的,估计是redfree同学上报了之后,给修复了,但是竟然修复之后的规则还带回滚的,现在又支持%a0的绕过了。
就不去刷rank了。
这个不细说了,进入正文。
2:测试的安全狗的版本是

anquangou1.png


这个应该是最新的版本,今天刚在官网上下载的
3:本机的测试环境是:
操作系统:win7
应用环境:wamp
安全狗:windows apache版本
因此这里也是针对的是主流的mysql环境
做绕过的时候可以利用各个层面的特性去绕过,
这次测试绕过的方向主要是通过mysql的特性去做绕过。
下面来看这个艰难的过程。
4:测试sql注入规则绕过的时候,我一般都会先去测试 []select[][]from[]这个点的规则
经过大量的反复的测试,这里我们得到如下的结果:
除开%a0以外,基本上在安全狗的环境下:
上面方括号代表位置1-4
1):位置1允许a-z,A-Z以及_和数字
2):位置2允许a-z,A-Z以及_和数字
3):位置3允许a-z,A-Z以及_
4):位置4允许a-z,A-Z以及_和数字
5:知晓各个点的过滤情况之后接下来就是在脑[wen]海[dang]里翻阅资料,翻阅到之前的那个精华帖子

http://zone.wooyun.org/content/16772


里面使用了一个字符引起了注意:

select * from users where id=\Nunion select 1,2,3,4,5,6,7,8,9,0


这里这个\N的字符能用在union这,能不能用在\Nfrom前面呢,如果能用在from前面可能我们就能够绕过select from的检测
6:在mysql console下进行测试发现:

anquangou2.png


7:因此这里我们便可以使用这样的payload绕过select from的检测

select 1,\Nfrom table


anquangou3.png


8:我们的目的是要能绕过安全狗防护爆出数据,本来以为可以直接就爆出数据,但是在测试的过程中又发现了一些问题。

anquangou4.png


分析:
由于我们做数据读取的时候,会用到如下的语句
select schema_name from information_schema.schemata limit 1
这里又由于我们要绕过select from的限制,因此我们就要使用select 1,\N的形式。
而这里我们可以看出来报错貌似要求我们只能有一列的返回结果,但是我们由于引入了
\N符号,我们必须要有两列。
9:之前有作过如下的测试:

anquangou5.png


可以看出两列也是可以做大小判断的,这里我们利用这个trick,因此我们至少可以试试盲注。
我们先用盲注,然后再试试难度较大的报错
10:我的第一个schema_name的长度是18,结果为真的时候显示了数据库记录

anquangou6.png


11:结果为假的时候显示为空

anquangou7.png


果真可以盲住。
12:接下来我们来看看如何进行报错的注入,我擦勒,又在脑[wen]海[dang]里想了想,又是好长段时间过去了,发现
有如下记录:

http://zone.wooyun.org/content/13270


里面提到了

mysql> SELECT 2 * if((SELECT * from (select * from test.shop) as `` limit 1)>(SELECT * from test.shop limit 1), 18446744073709551610, 18446744073709551610);ERROR 
1690 (22003): BIGINT UNSIGNED value is out of range in '(2 * if(((select `article`,`dealer`,`price` from (select `test`.`shop`.`article` AS `article`,`test`.`shop`.`dealer` AS `dealer`,`test`.`shop`.`price` AS `price` from `test`.`shop`) limit 1) > (select `test`.`shop`.`article`,`test`.`shop`.`dealer`,`test`.`shop`.`price` from `test`.`shop` limit 1)),18446744073709551610,18446744073709551610))'


13:这个报错有限制,提示是mysql5.5版本以上才能使用,既然如此我们试试

anquangou9.png


这个大概知道了,就应该是两边长度不一样,既然这样粗暴点直接给补齐再试试:

anquangou10.png


篇后语:
市面上在过滤的时候都会允许select和from之间添加英文字符的,这样的waf规则都会被
这种方法给bypass。估计够各厂商喝一壶了。
到此结束!

漏洞证明:

9:之前有作过如下的测试:

anquangou5.png


可以看出两列也是可以做大小判断的,因此我们至少可以试试盲注入。
我们先用盲注,然后再试试难度大的报错
10:我的第一个schema_name的长度是18,结果为真的时候显示了数据库记录

anquangou6.png


11:结果为假的时候显示为空

anquangou7.png


果真可以盲住。
12:接下来我们来看看如何进行报错的注入,我擦勒,又在脑[wen]海[dang]里想了想,又是好长段时间过去了,发现
有如下记录:

http://zone.wooyun.org/content/13270


里面提到了

mysql> SELECT 2 * if((SELECT * from (select * from test.shop) as `` limit 1)>(SELECT * from test.shop limit 1), 18446744073709551610, 18446744073709551610);ERROR 
1690 (22003): BIGINT UNSIGNED value is out of range in '(2 * if(((select `article`,`dealer`,`price` from (select `test`.`shop`.`article` AS `article`,`test`.`shop`.`dealer` AS `dealer`,`test`.`shop`.`price` AS `price` from `test`.`shop`) limit 1) > (select `test`.`shop`.`article`,`test`.`shop`.`dealer`,`test`.`shop`.`price` from `test`.`shop` limit 1)),18446744073709551610,18446744073709551610))'


13:这个报错有限制,提示是mysql5.5版本以上才能使用,既然如此我们试试

anquangou9.png


这个大概知道了,就应该是两边长度不一样,既然这样粗暴点直接给补齐再试试:

anquangou10.png


篇后语:
市面上在过滤的时候都会允许select和from之间添加英文字符的,这样的waf规则都会被
这种方法给bypass。
到此结束!

修复方案:

这次感觉要添加特例了

版权声明:转载请注明来源 MayIKissYou@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2015-06-18 10:15

厂商回复:

小伙伴们今天真是热情,接连报了两个问题,在此表示深深的感谢。
我们会尽快修复这个问题。

最新状态:

暂无


漏洞评价:

评论

  1. 2015-06-18 09:10 | xy小雨 ( 普通白帽子 | Rank:171 漏洞数:47 | 成为海贼王的男人)

    都已经知道艰难了为何要发出来。。。

  2. 2015-06-18 09:47 | sauren ( 实习白帽子 | Rank:34 漏洞数:10 | 天天打DOTA,快乐你我他~)

    本是同根生,相煎何太急。

  3. 2015-06-18 09:58 | kav ( 路人 | Rank:0 漏洞数:3 )

    本是同根生,相煎何太急。

  4. 2015-06-18 10:08 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:17 | 当我又回首一切,这个世界会好吗?)

    估计下面评论又要开始诅咒了。。。。。

  5. 2015-06-18 10:12 | jeary ( 普通白帽子 | Rank:296 漏洞数:89 | (:‮.kcaH eb nac gnihtynA))

    让自己无路可走..

  6. 2015-06-21 11:50 | black4yl ( 路人 | Rank:2 漏洞数:1 | WoHoo !)

    呵呵,然而并不止这些...

  7. 2015-06-21 21:37 | Cnb-Web ( 路人 | Rank:4 漏洞数:1 | FU)

    卖我份 邮箱ttcc20112012@gmail.com

  8. 2015-06-21 22:30 | 小龙 ( 普通白帽子 | Rank:1208 漏洞数:316 | 乌云有着这么一群人,在乌云学技术,去某数...)

    做黑产中介的小学生,初中生要把你打屎了。。学校门口见

  9. 2015-06-23 02:27 | Bello ( 路人 | 还没有发布任何漏洞 | 我是雷锋)

    呵呵,然而并不止这些...

  10. 2015-06-25 10:59 | testKaI ( 路人 | Rank:2 漏洞数:1 )

    然而并没有什么卵用

  11. 2015-07-05 22:34 | Keen ( 路人 | Rank:2 漏洞数:1 | ...)

    为了这jb点rank,今天你两个是翔吃多了吧。傻逼

  12. 2015-07-22 12:52 | ′雨。 ( 普通白帽子 | Rank:1231 漏洞数:188 | Only Code Never Lie To Me.)

    @Keen 说得好像别人不发你能挖到一样 哈哈哈哈哈

  13. 2015-08-29 15:50 | Murk Emissary ( 实习白帽子 | Rank:74 漏洞数:14 | 低调做人 低调行事)

    @Keen 说得好像别人不发你能挖到一样 哈哈哈哈哈

  14. 2015-09-16 10:27 | 鬼魅羊羔 ( 普通白帽子 | Rank:299 漏洞数:41 | (#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵...)

    @Keen 最喜欢你们这种人了,自己挖不到,还嫉妒别人先发现,就喜欢你这暴脾气。。。

  15. 2015-09-16 16:45 | 金枪银矛小霸王 ( 普通白帽子 | Rank:103 漏洞数:25 | 不会挖洞洞的猿猿不是好学生)

    @Keen 说得好像别人不发你能挖到一样 哈哈哈哈哈