# 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: 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']; } } } }