漏洞概要 关注数(24) 关注此漏洞
缺陷编号:wooyun-2014-068781
漏洞标题:Fengcms 最新版v1.24任意文件下载(绕过过滤)
相关厂商:fengcms.com
漏洞作者: phith0n
提交时间:2014-07-16 21:33
修复时间:2014-10-14 21:34
公开时间:2014-10-14 21:34
漏洞类型:任意文件遍历/下载
危害等级:高
自评Rank:15
漏洞状态:厂商已经确认
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]
Tags标签: 无
漏洞详情
披露状态:
2014-07-16: 细节已通知厂商并且等待厂商处理中
2014-07-17: 厂商已经确认,细节仅向厂商公开
2014-07-20: 细节向第三方安全合作伙伴开放
2014-09-10: 细节向核心白帽子及相关领域专家公开
2014-09-20: 细节向普通白帽子公开
2014-09-30: 细节向实习白帽子公开
2014-10-14: 细节向公众公开
简要描述:
之前fengcms修复了好几次这个问题,但依旧知识不对。不过到我这个应该就终结了,我会给出好的解决方案。这也不是厂商的问题,如果不是专门搞安全的人也很难考虑到这一点。
多说一句,fengcms送的礼物已经收到了,再次感谢!这种厂商要奖励,很负责!!
官方给出的测试站已经升到最新版了,我这里测试通过,已经可以下载config.php。
详细说明:
/app/controller/downController.php:
看他是怎么处理的:
1.base64_decode解码
2.过滤..为空
3.将$_GET['file']用/分割成$exp,并取第二个($exp[1]),判断$exp[1]是否等于upload,等于才允许下载
4.将root_path和$_GET['file']组合成绝对路径,下载文件
如何绕过过滤,答案是\0截断。
首先,不管有没有全局addslashes或GPC,base64_decode就能无视之,引入一个\0,进行截断。
因为代码里取得是$exp[1]判断是否是"upload",所以我们可以把要下载的文件内容写在$exp[0]里,之后用\0截断掉,readfile的时候就能够把我要的config.php下载下来了。
所以罪魁祸首还是root_path是网站根目录,如果root_path是/upload目录的话,我想要下载config.php的话就必须要用../跳转到上层目录。
使用%00截断的条件是php版本小于5.3.4(左右吧,记不得),而官方给的测试站正好是5.2.x,所以可以通过测试,下载config.php。
漏洞证明:
首先测试一下之前的https://wooyun-img.oss-cn-beijing.aliyuncs.com/upload/../config.php还能不能下载:
果断不能了。。。
那么将file改成这样:
也就是:
http://guf521656.h163.92hezu.org/?controller=down&file=XGNvbmZpZy5waHAAL3VwbG9hZA
访问发现可以继续文件下载:
这是下载到的config.php:
修复方案:
获得file的代码加一个addslashes,过滤%00截断。
$_GET['file']=addslashes(base64_decode($_GET['file']));
版权声明:转载请注明来源 phith0n@乌云
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:20
确认时间:2014-07-17 11:02
厂商回复:
非常感谢!这个漏洞已经困扰我们很久了,没想到都这样了还能被破解,在安全的道路上真的是永无终点啊!非常感谢!我们立即着手安排程序员处理这个问题!再一次感谢!
最新状态:
暂无