Discuz!论坛程序wap\index.php页面存在变量覆盖漏洞


添加时间:
2008-12-09

系统编号:
WAVDB-01264

影响版本:
Discuz! 4.X

程序介绍:

Crossday Discuz! Board 论坛系统(简称 Discuz! 论坛)是一个采用 PHP 和 MySQL 等其他多种数据库构建的高效论坛解决方案。作为商业软件产品, Discuz! 在代码质量,运行效率,负载能力,安全等级,功能可操控性和权限严密性等方面都在广大用户中有良好的口碑。凭借 Discuz! 开发组长期积累的丰富的 web 开发及数据库经验,和强于创新,追求完美的设计理念,使得 Discuz! 在很短时间内以其鲜明的个性特色从国内外同类产品中脱颖而出。经过了效率最优化和负载能力最佳化设计的 Discuz! ,已获得业内越来越多专家和权威企业的认可。

漏洞分析:

Discuz!4.x一直存在着一个变量覆盖漏洞.代码如下:

 
  1. $chs =   
  2.   
  3. ;  
  4.  if($_POST && $charset !=   
  5. utf-8  
  6. ) {  
  7.   $chs = new Chinese(  
  8. UTF-8  
  9. $charset);  
  10.   foreach($_POST as $key => $value) {  
  11.    $$key = $chs->Convert($value); //foreach处理$_POST导致变量覆盖  
  12.   }  
  13.   unset($chs);  

 
 在此代码前还包含了很多变量初始化的文件,那些初始化了的变量[比如forumdata/cache/cache_forums.php里的变量]通过上面的代码后都可能被覆盖后注射非法代码,而导致sql注射/代码执行/xss等严重的漏洞.



解决方案:
该漏洞存在于Discuz!4.x很多年了,在fix号:20080804里[1]补丁那个wap宽字节漏洞时被一起偷偷补丁了,补丁代码:
$chs =
;
if($_POST && $charset !=
utf-8
) {
$chs = new Chinese(
UTF-8
, $charset);
foreach($_POST as $key => $value) {
$$key = addslashes(stripslashes($chs->Convert($$key)));
}
unset($chs);
}
[1]http://www.discuz.net/thread-1008182-1-1.html

信息来源:
<*
80vul
http://www.80vul.com/dzvul/sodb/05/sodb-2008-05.txt
*>