PHP-Fusion 9.03.50 – ‘Edit Profile’ Arbitrary File Upload

  • 作者: Besim
    日期: 2020-04-27
  • 类别:
    平台:
  • 来源:https://www.exploit-db.com/exploits/48381/
  • # Exploit Title: PHP-Fusion 9.03.50 - 'Edit Profile' Arbitrary File Upload
    # Date: 2020-04-24
    # Author: Besim ALTINOK
    # Vendor Homepage: https://www.php-fusion.co.uk/home.php
    # Software Link: https://sourceforge.net/projects/php-fusion/files/PHP-Fusion%20Archives/9.x/PHP-Fusion%209.03.50.zip/download
    # Version: v9.03.50
    # Tested on: Xampp
    # Credit: İsmail BOZKURT and AkkuS
    
    -------------------------------------------------------------------------------------------------
    Description
    ---
    - This system does not check the file extension when user upload photo for
    avatar :). So you can upload PHP file like:
    
    Content of the file
    --
    Sample PHP code: <? phpinfo(); ?>
    
    Name of the file:
    ---
    Sample PHP File name: tester.php
    
    - When you want to try to upload the image to the avatar, just, try to
    change the file name and content.
    
    ----------------------------------------------------------------------------------------
    Vulnerable code section in the UserFieldsInput.inc
    ----------------------------------------------------------
    private function _setUserAvatar() {
    if (isset($_POST['delAvatar'])) {
    if ($this->userData['user_avatar'] != "" &&
    file_exists(IMAGES."avatars/".$this->userData['user_avatar']) &&
    is_file(IMAGES."avatars/".$this->userData['user_avatar'])) {
    unlink(IMAGES."avatars/".$this->userData['user_avatar']);
    }
    $this->data['user_avatar'] = '';
    }
    if (isset($_FILES['user_avatar']) &&
    $_FILES['user_avatar']['name']) { // uploaded avatar
    if (!empty($_FILES['user_avatar']) &&
    is_uploaded_file($_FILES['user_avatar']['tmp_name'])) {
    $upload = form_sanitizer($_FILES['user_avatar'], '',
    'user_avatar');
    if (isset($upload['error']) && !$upload['error']) {
    // ^ maybe use empty($upload['error']) also can but
    maybe low end php version has problem on empty.
    $this->data['user_avatar'] = $upload['image_name'];
    }
    }
    }
    }