跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

PPC已解决Discuz!7.1与7.2远程执行漏洞

1月6日下午,网上发布基于discuz!7.1&7.2的漏洞以及相关攻击方法。针对于此,phpchina紧急联系了dz研发部门,并且在最短的时间内为phpchina官方论坛程序做了相关的补丁,保证会员在phpchina论坛的正常使用及安全操作。感谢大家对phpchina的关心和拥护,我们将一直奉行以用户为上的原则,为大家提供更加安全、便捷的学习交流环境。以下是相关介绍:首先说一下,漏洞是t00ls核心群传出去的,xhming先去读的,然后我后来读的,读出来的都是代码执行,1月5日夜里11点多钟,在核心群的黑客们的要求下,xhming给了个poc,我给了个exp,确实发现的是同一个问题。截止夜里2点多种我下线,还只有t00ls核心群里几个人知道我给出的exp,可我怎么也想不到,经过半天时间,exp就满天飞了,而且确实出自昨天我的那个版本。

不难想象,exp流传的速度,a与b关系好,a发给b;b与c是好朋友,b发给c...总有人耐不住性子,泄露点风声,于是就人手一份。最受不了的是,竟然有些sb在群里拿来叫卖;实在不想说什么,要叫卖什么时候轮到你?人心不古,以后有的话还是自己藏着吧。

上午漏洞告诉了saiy,dz官方的补丁很快就出来了吧。

相关阅读:

康盛创想发布Discuz!7.2补丁20100110特别说明:产生漏洞的$scriptlang数组在安装插件后已经初始化,因此有安装插件的用户不受影响。

漏洞介绍:

Discuz!新版本7.1与7.2版本中的showmessage函数中eval中执行的参数未初始化,可以任意提交,从而可以执行任意PHP命令。

Discuz插件制作教程[入门+精通+实战] 中文WORD版插件机制Discuz! 拥有一套完整的插件机制。合理使用插件机制,你可以更好的将自己的个性功能需求整合到Discuz!产品中的同时,保持代码独立,并且不受后续Discuz!产品版本升级的影响。 我们鼓励并推荐,使用插件机制进行个性需求定制和研发。感兴趣的朋友可以过来看看下载

漏洞分析:

下面来分析下这个远程代码执行漏洞,这个问题真的很严重,可以直接写shell的:

一、漏洞来自showmessage函数:

Copy to Clipboard

引用的内容:

[www.bkjia.com]function showmessage($message, $url_forward = '', $extra = '', $forwardtype = 0) {extract($GLOBALS, EXTR_SKIP);//危险的用法,未初始化的变量可以直接带进函数,直接导致了问题产生,from www.oldjun.com global $hookscriptmessage, $extrahead, $discuz_uid, $discuz_action, $debuginfo, $seccode, $seccodestatus, $fid, $tid, $charset, $show_message, $inajax, $_DCACHE, $advlist;define('CACHE_FORBIDDEN', TRUE);$hookscriptmessage = $show_message = $message;$messagehandle = 0;$msgforward = unserialize($_DCACHE['settings']['msgforward']);$refreshtime = intval($msgforward['refreshtime']);$refreshtime = empty($forwardtype) ? $refreshtime : ($refreshtime ? $refreshtime : 3);$msgforward['refreshtime'] = $refreshtime * 1000;$url_forward = empty($url_forward) ? '' : (empty($_DCOOKIE['sid']) && $transsidstatus ? transsid($url_forward) : $url_forward);$seccodecheck = $seccodestatus & 2;if($_DCACHE['settings']['funcsiteid'] && $_DCACHE['settings']['funckey'] && $funcstatinfo && !IS_ROBOT) {$statlogfile = DISCUZ_ROOT.'./forumdata/funcstat.log';if($fp = @fopen($statlogfile, 'a')) {@flock($fp, 2);if(is_array($funcstatinfo)) {$funcstatinfo = array_unique($funcstatinfo);foreach($funcstatinfo as $funcinfo) {fwrite($fp, funcstat_query($funcinfo, $message)."\n");}} else {fwrite($fp, funcstat_query($funcstatinfo, $message)."\n");}fclose($fp);$funcstatinfo = $GLOBALS['funcstatinfo'] = '';}}if(!defined('STAT_DISABLED') && STAT_ID > 0 && !IS_ROBOT) {write_statlog($message);}if($url_forward && (!empty($quickforward) || empty($inajax) && $msgforward['quick'] && $msgforward['messages'] && @in_array($message, $msgforward['messages']))) {updatesession();dheader("location: ".str_replace('&', '&', $url_forward));}if(!empty($infloat)) {if($extra) {$messagehandle = $extra;}$extra = '';}if(in_array($extra, array('HALTED', 'NOPERM'))) {$discuz_action = 254;} else {$discuz_action = 255;}include language('messages');$vars = explode(':', $message);//只要含:就可以了if(count($vars) == 2 && isset($scriptlang[$vars[0]][$vars[1]])) {//两个数字即可,用:分割eval("\$show_message = \"".str_replace('"', '\"', $scriptlang[$vars[0]][$vars[1]])."\";");//$scriptlang未初始化,可以自定义,from www.oldjun.com} elseif(isset($language[$message])) {$pre = $inajax ? 'ajax_' : '';eval("\$show_message = \"".(isset($language[$pre.$message]) ? $language[$pre.$message] : $language[$message])."\";");unset($pre);}......

}共2页:上一页1 2下一页

相关文章