Oct
19

Discuz! 7.1 & 7.2 后台远程代码执行漏洞

年初跟那个前台代码执行一起看到的,这个清晰明朗的代码执行,看到的人估计也不少,好在坚持了这么久一直没人公布,这大半年还用了很多次,可是...可是,最终还是有人忍不住要公布,要知道公布一个就少一个,以后的以后,你们靠什么去拿站呢?

这个后台执行也算对当时那个前台执行遗失的慰藉吧...好歹也存世大半年,怎么讲都还是有点欣慰的...不知道有入侵t00ls服务器的没,是不是很遗憾,t00ls后台年初已经补上这个漏洞了?

其实是老问题了,我也不做过多解释,各位看官有事没事接着挖x1的吧,一旦6.0、7.0、7.1、7.2都挖光了,遇到dz还是绕道吧...

好了,看代码,include/global.func.php:

function sendpm($toid, $subject, $message, $fromid = '') {
    if($fromid === '') {
        require_once DISCUZ_ROOT.'./uc_client/client.php';
        $fromid = $discuz_uid;
    }
    if($fromid) {
        uc_pm_send($fromid, $toid, $subject, $message);
    } else {
        global $promptkeys;
        if(in_array($subject, $promptkeys)) {
            $type = $subject;
        } else {
            extract($GLOBALS, EXTR_SKIP);
            require_once DISCUZ_ROOT.'./include/discuzcode.func.php';
            eval("\$message = addslashes(\"".$message."\");");//就这里了,老问题
            $type = 'systempm';
            $message = '<div>
'.$subject.' {time}
'.discuzcode($message, 1, 0).'
</div>

';
        }
        sendnotice($toid, $message, $type);
    }
}

要想利用,必须第三个参数:$message可控。

利用方法一:

前台注册的时候用到这个函数:

...
    if($welcomemsg && !empty($welcomemsgtxt)) {
        $welcomtitle = !empty($welcomemsgtitle) ? $welcomemsgtitle : "Welcome to $bbname!";
        $welcomtitle = addslashes(replacesitevar($welcomtitle));
        $welcomemsgtxt = addslashes(replacesitevar($welcomemsgtxt));
        if($welcomemsg == 1) {
            sendpm($uid, $welcomtitle, $welcomemsgtxt, 0);//发送论坛短消息,第三个参数在后台被控制,from www.oldjun.com
        } elseif($welcomemsg == 2) {
            sendmail("$username <$email>", $welcomtitle, $welcomemsgtxt);
        }
    }
...

于是,只要后台控制下注册发送的短消息,即可成功利用该漏洞。

在注册发送短消息的内容里加上:{${phpinfo()}},则可以执行,若要exp,修改年初的那个即是...

利用方法二:

后台member.inc.php可以直接控制$message:

...
    if(in_array($sendvia, array('pm', 'email'))) {
        $query = $db->query("SELECT uid, username, groupid, email FROM {$tablepre}members WHERE $conditions LIMIT $current, $pertask");
                while($member = $db->fetch_array($query)) {
            $sendvia == 'pm' ? sendpm($member['uid'], $subject, $message, 0) : sendmail("$member[username] <$member[email]>", $subject, $message);
            $continue = TRUE;
                }
        }
...

修改下表单即可...

至于exp,我不发了,发出来还是本着技术交流...

最后要说的是,此漏洞对7.0及之前版本无效,对x1以后版本貌似也无效;另外,7.0、7.1、7.2某处有点漏洞,但是在x1里面已经悄悄补上了,x1没细看,但已经相当安全了(也许不是绝对)...题外话了...

补丁(eval之前加下过滤):

...
$message = str_replace(array('{', '}', '"'), ' ', $message);
eval("\$message = addslashes(\"".$message."\");");
...

共有18条评论

  1. 俺是农村的: Oct,19th,2010

    我什么都不知道,只感到昨天的溢出我怕了。

  2. only_guest: Oct,19th,2010

    这算是虚晃一枪么?又或者是某些人总是要求公布莫须有的0day所放出来的替代品?

  3. [...][...]

  4. 雨中风铃: Oct,20th,2010

    http://lcx.cc/?FoxNews=807.html

    这个漏洞还是比较鸡肋的,毕竟进入后台的难度比拿shell要大的多。

  5. k4shifz: Oct,20th,2010

    学习了,追随你们。。。。

  6. baby: Oct,21st,2010

    又玩马后炮,有本事再放一个出来哈

  7. injohnSang.tk: Oct,22nd,2010

    学习了

  8. fuck: Oct,24th,2010

    别人公布了,你又公布,简直是扯淡啊.

  9. fuck楼上: Oct,25th,2010

    有本事再发出来一个撒.

  10. fenghen: Oct,27th,2010

    哈哈 激将oldjun 啊 ?想要0day 也不能这样啊  哈哈

  11. 168黑客导航网: Oct,28th,2010

       尊敬的管理员,您好:
    久慕oldjun大名,oldjun做为国内黑客界知名人物,本人对oldjun也是仰慕已久。因为oldjun在国内黑客界的巨大影响力,我站首页早已收录贵站点,并在首页及多个内容页对贵站进行了链接,今日望能借贵站一角给我站一个友情链接。。感谢万分。。请管理员审核。
    本站名称:168黑客导航网
    地址:www.168hack.com
    logo地址:www.168hack.com/logo.gif
    我站是个黑客类导航站点,双线独立带宽VPS服务器,保证长久稳定开放。目前百度,google收录良好,alexa目前排名40W左右。
       最后衷心的祝愿oldjun身体健康,万事兴隆!!谢谢您的支持!!
                                            — 168黑客导航网 敬  

  12. MiMi: Oct,30th,2010

    哈哈,还是挖X1吧。

  13. 中华: Nov,1st,2010

    你的博文真好,虽然有许多我看不大懂!

  14. 中国: Nov,3rd,2010

    支持一下

  15. magicmlw: Nov,7th,2010

    。。。  军军 jiayou!!!!!!!!!!!!

  16. magicmlw: Nov,7th,2010

    你结婚了???????????呵呵

  17. oldjun: Nov,11th,2010

    ...

  18. AA: Dec,17th,2010

    收 股票流量。股票 shell 有的Q下  643999413

NAME:

required

E-MAIL:

required, will not be published

HOMEPAGE:

CONTENT:

VERIFY:(请输入P后的英文字母!)

required