PPC已解决Discuz!7.1与7.2远程执行漏洞
1月6日下午,网上发布基于Discuz!7.1&7.2的漏洞以及相关攻击方法。针对于此,PHPChina紧急联系了DZ研发部门,并且在最短的时间内为PHPChina官方论坛程序做了相关的补丁,保证会员在PHPChina论坛的正常使用及安全操作。感谢大家对PHPChina的关心和拥护,我们将一直奉行以用户为上的原则,为大家提供更加安全、便捷的学习交流环境。以下是相关介绍: 相关阅读:康盛创想发布Discuz!7.2补丁20100110 特别说明:产生漏洞的$scriptlang数组在安装插件后已经初始化,因此有安装插件的用户不受影响。 漏洞介绍: Discuz!新版本7.1与7.2版本中的showmessage函数中eval中执行的参数未初始化,可以任意提交,从而可以执行任意PHP命令。 漏洞分析: 下面来分析下这个远程代码执行漏洞,这个问题真的很严重,可以直接写shell的: 一、漏洞来自showmessage函数: 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).""); } } else { fwrite($fp,funcstat_query($funcstatinfo,$message).""); } 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); } ...... }
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |