安全研究

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

发布日期:2007-12-24
更新日期:2007-12-25

受影响系统:
TikiWiki Project TikiWiki < 1.9.9
不受影响系统:
TikiWiki Project TikiWiki 1.9.9
描述:
BUGTRAQ  ID: 27008

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

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

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

有漏洞的代码段如下:

if(isset($_GET["movie"])) {
  $movie = $_GET["movie"];
...

if ($movie) {
        // Initialize movie size
        $confFile = 'tikimovies/'.substr($movie,0,-4).".xml";

        //trc('confFile', $confFile);
        $fh = @fopen($confFile,'r');
        $config = @fread($fh, 1000);
        @fclose($fh);
        if (isset($config) && $config <>'') {
                $width =
preg_replace("/^.*?<MovieWidth>(.*?)<\/MovieWidth>.*$/ms", "$1", $config);
                $height =
preg_replace("/^.*?<MovieHeight>(.*?)<\/MovieHeight>.*$/ms", "$1",
$config);
                $smarty->assign('movieWidth',$width);
                $smarty->assign('movieHeight',$height);
        }
}

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

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

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

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

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

<*来源:Jesus Olmos Gonzalez (jolmos@isecauditors.com
  
  链接:http://marc.info/?l=bugtraq&m=119851138307467&w=2
        http://tikiwiki.org/ReleaseProcess199
        http://secunia.com/advisories/28225/
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

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

建议:
厂商补丁:

TikiWiki Project
----------------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

http://downloads.sourceforge.net/tikiwiki/tikiwiki-1.9.9.tar.gz?modtime=1198314005&big_mirror=1

浏览次数:3542
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障