当前位置:首页 >> 网络通讯 >> 网络安全 >> 内容

ThinkSNS 2.8任意文件上传漏洞及修复

时间:2013/4/19 12:10:00 作者:平凡之路 来源:xuhantao.com 浏览:

微博上传图片时只在前端进行验证, 服务器端没有进行安全过滤。

 

\api\StatusesApi.class.php

  涛涛电脑知识技巧

function uploadpic(){

     if( $_FILES['pic'] ){

    //执行上传操作

    $savePath =  $this->_getSaveTempPath();

    $filename = md5( time().'teste' ).'.'.substr($_FILES['pic']['name'],strpos($_FILES['pic']['name'],'.')+1);

   if(@copy($_FILES['pic']['tmp_name'], $savePath.'/'.$filename) || @move_uploaded_file($_FILES['pic']['tmp_name'], $savePath.'/'.$filename))

       {

       $result['boolen']    = 1;

       $result['type_data'] = 'temp/'.$filename;

       $result['picurl']    = SITE_PATH.'/uploads/temp/'.$filename;

       } else {

       $result['boolen']    = 0;

       $result['message']   = '上传失败';

       }

    }else{

        $result['boolen']    = 0;

        $result['message']   = '上传失败';

    }

return $result;

    }

unloadpic()方法没有对文件类型进行验证

 

可以构建表单, 选择任意文件, 提交到

/index.php?app=w3g&mod=Index&act=doPost

 

在新提交的微博上可以找到上传的文件地址(去掉small_、middle_ 前缀)



在登录thinksns官方微博后,

构建以下表单:

 

<form action="?app=w3g&mod=Index&act=doPost" method="post" enctype="multipart/form-data" />

<textarea name="content">test</textarea>

file: <input id="file" type="file" name="pic" />

<input type="submit" value="Post" />

</form>

去掉缩略图的前缀(small_ )

 

 

 

 

修复方案:

\api\StatusesApi.class.php

 

function uploadpic(){

    /**

    * 20121018 @yelo

    * 增加上传类型验证

    */

    $pathinfo = pathinfo($_FILES['pic']['name']);

    $ext = $pathinfo['extension'];

    $allowExts = array('jpg', 'png', 'gif', 'jpeg');

 

    $uploadCondition = $_FILES['pic'] && in_array(strtolower($ext),$allowExts,true);

 

    if( $uploadCondition ){

    //执行上传操作

    $savePath =  $this->_getSaveTempPath();

    $filename = md5( time().'teste' ).'.'.substr($_FILES['pic']['name'],strpos($_FILES['pic']['name'],'.')+1);

   if(@copy($_FILES['pic']['tmp_name'], $savePath.'/'.$filename) || @move_uploaded_file($_FILES['pic']['tmp_name'], $savePath.'/'.$filename))

       {

       $result['boolen']    = 1;

       $result['type_data'] = 'temp/'.$filename;

       $result['picurl']    = SITE_PATH.'/uploads/temp/'.$filename;

       } else {

       $result['boolen']    = 0;

       $result['message']   = '上传失败';

       }

    }else{

        $result['boolen']    = 0;

        $result['message']   = '上传失败';

    }

return $result;

    }

相关文章
  • 没有相关文章
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
  • 徐汉涛(www.xuhantao.com) © 2024 版权所有 All Rights Reserved.
  • 部分内容来自网络,如有侵权请联系站长尽快处理 站长QQ:965898558(广告及站内业务受理) 网站备案号:蒙ICP备15000590号-1