Tikiwiki CMS tiki-listmovies.php文件目录遍历漏洞


添加时间:
2008-10-04

系统编号:
WAVDB-01126
BUGTRAQ: 27008

影响版本:
TikiWiki < 1.9.9

程序介绍:

TikiWiki是一款网站内容管理系统,基于PHP+ADOdb+Smarty等技术构建。

漏洞分析:

TikiWiki的实现上存在输入验证漏洞,远程攻击者可能利用此漏洞非授权访问到服务器上任意文件的部分内容。

TikiWiki的tiki-listmovies.php脚本允许用户获得任意文件的前1000个字节。该脚本将movie参数值设置为$movie,删除最后4字节并添加.xml扩展名,然后调用fopen($confFile,'r')打开文件并读取文件的前1000个字节,接着传送这1000字节用作MovieWidth和MovieHeight HTML标签的值,最后将web服务器所生成的HTML文件返回给用户。

有漏洞的代码段如下:

 
  1. if(isset($_GET["movie"])) {  
  2.   $movie = $_GET["movie"];  
  3. ...  
  4.   
  5. if ($movie) {  
  6.         // Initialize movie size  
  7.         $confFile = 'tikimovies/'.substr($movie,0,-4).".xml";  
  8.   
  9.         //trc('confFile', $confFile);  
  10.         $fh = @fopen($confFile,'r');  
  11.         $config = @fread($fh, 1000);  
  12.         @fclose($fh);  
  13.         if (isset($config) && $config <>'') {  
  14.                 $width =  
  15. preg_replace("/^.*?<MovieWidth>(.*?)<\/MovieWidth>.*$/ms""$1"$config);  
  16.                 $height =  
  17. preg_replace("/^.*?<MovieHeight>(.*?)<\/MovieHeight>.*$/ms""$1",  
  18. $config);  
  19.                 $smarty->assign('movieWidth',$width);  
  20.                 $smarty->assign('movieHeight',$height);  
  21.         }  
  22. }  

首先,将tikimovies附加到了文件名上,因此可以引用类似于../../../../../../file_name的相对文件系统对象。这还允许攻击者在配置文件获得数据库口令,或web目录外的其他文件,如/etc/passwd。

其次,从$movie变量删除了结尾的4字节,因此向字符串添加4个无效的结尾字节就可以绕过这个控制。

最后,可以通过添加空字节(%00)来防范向变量末尾添加.xml扩展名。

用于访问文件的恶意字符串类似于:

../../../../../../etc/passwd%001234



漏洞利用:

http://www.example.com/tiki-listmovies.php?movie=../../../../../../etc/passwd%001234

解决方案:
厂商补丁:
TikiWiki Project
----------------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://downloads.sourceforge.net ... 314005&big_mirror=1

信息来源:
<*来源:Jesus Olmos Gonzalez (jolmos@isecauditors.com)

链接:http://marc.info/?l=bugtraq&m=119851138307467&w=2
http://tikiwiki.org/ReleaseProcess199
http://secunia.com/advisories/28225/
*>