蚂蚁分类信息系统 文件上传漏洞及修复办法

原创 2017年03月23日 23:00:02

文件/member/include/inc_shop.php

if($if_corp == 1){

        if($ac == 'base'){
            if(empty($tname)) write_msg('','?m=shop&type=corp&error=39');
            if(empty($areaid)) write_msg('','?m=shop&type=corp&error=40');
            $db -> query("UPDATE `{$db_mymps}member` SET tname='$tname',catid='$catids',areaid='$areaid',introduce='$introduce',address='$address',busway='$busway',mappoint='$mappoint',msn='$msn',web='$web' $where AND if_corp = '1'");
            write_msg('','?m=shop&type=corp&success=13');
        } elseif($ac == 'template') {
            if($_FILES[$name_file]['name']){
                require_once MYMPS_INC.'/upfile.fun.php';
                $destination = "/banner/".date('Ym')."/";
                $mymps_image = start_upload($name_file,$destination,0,'','',$oldbanner,'');

前面的ac不用管就是if判断然后进入操作而已。我们主要看template这里,获取name_file的上传内容然后传入start_upload,这里说一下传参中可控的有oldbanner

看下函数内容

function start_upload( $file_name, $destination_folder, $watermark = 0, $limit_width = "", $limit_height = "", $edit_filename = "", $edit_pre_filename = "" )
{
    global $mymps_global;
    global $timestamp;
    if ( !is_uploaded_file( $_FILES[$file_name]['tmp_name'] ) )
    {
        write_msg( "请重新选择您要上传的图片!" );
    }
    $file = $_FILES[$file_name];
    @createdir( MYMPS_UPLOAD.$destination_folder );
    $file_name = $file['tmp_name'];
    $pinfo = pathinfo( $file['name'] );
    $ftype = $pinfo['extension'];
    $fname = $pinfo[basename];
    if ( empty( $edit_filename ) && empty( $edit_pre_filename ) )
    {
        $destination_file = $timestamp.random( ).".".$ftype;
        $destination = MYMPS_UPLOAD.$destination_folder.$destination_file;
        $small_destination = MYMPS_UPLOAD.$destination_folder."pre_".$destination_file;
    }
    else
    {
        $destination = MYMPS_ROOT.$edit_filename;
        $small_destination = MYMPS_ROOT.$edit_pre_filename;
        $forbidarray = array(
            MYMPS_ROOT."/images/logo.gif",
            MYMPS_ROOT."/images/nopic.gif",
            MYMPS_ROOT."/images/nophoto.jpg",
            MYMPS_ROOT."/images/noavatar.gif",
            MYMPS_ROOT."/images/noavatar_small.gif"
        );
        if ( !in_array( $destination, $forbidarray ) || $destination != MYMPS_ROOT )
        {
            @unlink( $destination );
        }
        if ( !in_array( $small_destination, $forbidarray ) || $destination != MYMPS_ROOT )
        {
            @unlink( $small_destination );
        }
        unset( $forbidarray );
    }
    if ( file_exists( $destination ) )
    {
        write_msg( "同名图片已存在,请重新选择您要上传的图片!" );
    }
    if ( !move_uploaded_file( $file_name, $destination ) )
    {
        write_msg( "图片上传失败,请重新选择您要上传的图片!" );
}

看这里

$file = $_FILES[$file_name];
    @createdir( MYMPS_UPLOAD.$destination_folder );
    $file_name = $file['tmp_name'];
    $pinfo = pathinfo( $file['name'] );
    $ftype = $pinfo['extension'];
    $fname = $pinfo[basename];

先是获取了文件内容然后获取了文件后缀以及文件名这些

{
        $destination = MYMPS_ROOT.$edit_filename;
        $small_destination = MYMPS_ROOT.$edit_pre_filename;
        $forbidarray = array(
            MYMPS_ROOT."/images/logo.gif",
            MYMPS_ROOT."/images/nopic.gif",
            MYMPS_ROOT."/images/nophoto.jpg",
            MYMPS_ROOT."/images/noavatar.gif",
            MYMPS_ROOT."/images/noavatar_small.gif"
        );

这里的edit与edit_pre是非空所以进入了该if进行后缀以及路径拼接(期间并无任何效验)

if ( file_exists( $destination ) )
    {
        write_msg( "同名图片已存在,请重新选择您要上传的图片!" );
    }
    if ( !move_uploaded_file( $file_name, $destination ) )
    {
        write_msg( "图片上传失败,请重新选择您要上传的图片!" );
    }

下面接着判断了是否存在相同名如果不存在同名则直接上传。

修复办法
打开include/upfile.fun.php 文件
84行左右找到function start_upload 函数

    global $timestamp;
    //下面的一句是增加的上传验证函数
    check_upimage($file_name);

保存即可

版权声明:本文为博主原创文章,未经博主允许不得转载。

分类,回归,标注

1. 分类问题 监督学习从数据中学习一个分类决策函数或分类模型,称为分类器(classifier)。分类器对新的输入进行输出的预测,这个过程称为分类。 2. 标注问题 标注问...

蚂蚁分类信息系统 5.8 百度地图标注优化

蚂蚁分类信息系统 5.8 PC端发布信息时地图标注感觉很不方便,需要先点击我要标注,还得拖动地图查找位置, 不熟悉地图的估计得找半天。 为方便快速、准确标注地理位置,修改蚂蚁分类信息系统 5.8 ...

蚂蚁分类信息系统 5.8 百度地图标注优化

蚂蚁分类信息系统 5.8 PC端发布信息时地图标注感觉很不方便,需要先点击我要标注,还得拖动地图查找位置,  不熟悉地图的估计得找很长时间。  为方便快速、准确标注地理位置,修改蚂蚁分类信...

蚂蚁分类信息系统5.8 数据标签调用方法(二)

该方法适用于5.8及以上版本的单城市和多城市版本。教程来源于其它网络截图,仅供参考...

蚂蚁分类信息系统0days

转载:天天向上网 http://www.52harry.com/network/2011-12-13/825.html 受影响的厂商: www.mymps.com.cn 是否...

蚂蚁分类信息系统 5.8 整合微信登录教程

1.首先要申请微信开发者账户并通过认证。 2.打开微信公众平台mp.weixin.qq.com 登录3.左侧找到 公众号设置4.点击 网页授权域名 填写域名 按要求上传验证文件到对应的目录5.开...

蚂蚁分类信息系统5.8 数据标签调用方法(三)

该方法适用于5.8及以上版本的单城市和多城市版本。教程来源于其它网络截图,仅供参考...

蚂蚁分类信息系统5.8多城市UTF8开源优化版

蚂蚁分类信息系统5.8多城市UTF8开源优化版介绍 蚂蚁分类信息系统5.8多城市蚂蚁分类多城市蚂蚁分类信息系统5.8多城市蚂蚁分类信息系统 蚂蚁分类蚂蚁分类信息蚂蚁分类多城市蚂蚁分类企业版蚂蚁分类信...

蚂蚁分类信息系统5.8 数据标签调用方法(四)

该方法适用于5.8及以上版本的单城市和多城市版本。教程来源于其它网络截图,仅供参考...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:蚂蚁分类信息系统 文件上传漏洞及修复办法
举报原因:
原因补充:

(最多只允许输入30个字)