Показать сообщение отдельно

  #751  
Старый 20.07.2018, 12:24
mardoksp
Новичок
Регистрация: 08.04.2007
Сообщений: 7
Провел на форуме:
20649

Репутация: 0
По умолчанию

Нашел уязвимость, Opencart 1.5.5.1

Получил хэш паролей из бд в админку, есть доступ в админку.

Залить шелл через восстановление из бэкапа не получилось, просто открывается после клика восстановить белый экран и все, может быть что-то со скриптом намутили или какие-то расширения на сайте мешают нормально сделать. Но ни в логах ни ответа никакого нет.

Пробую через скрипт admin/controller/common/filemanager.php

Могу изменять файлы, переносить, но вот проблема в том, что через админку загружается файл и дописывается свое расширение, допустим shell.php.uhd673h76576

Но когда через filemanager пробую копировать/переносить, то все ровно дописывается расширения файла.

.SpoilerTarget" type="button">Spoiler: function copy()

Код:
Code:
public function copy() {
        $this->language->load('common/filemanager');
       
        $json = array();
       
        if (isset($this->request->post['path']) && isset($this->request->post['name'])) {
            if ((utf8_strlen($this->request->post['name']) request->post['name']) > 255)) {
                $json['error'] = $this->language->get('error_filename');
            }
               
            $old_name = rtrim(DIR_IMAGE . 'data/' . str_replace('../', '', html_entity_decode($this->request->post['path'], ENT_QUOTES, 'UTF-8')), '/');
           
            if (!file_exists($old_name) || $old_name == DIR_IMAGE . 'data') {
                $json['error'] = $this->language->get('error_copy');
            }
           
            if (is_file($old_name)) {
                $ext = strrchr($old_name, '.');
            } else {
                $ext = '';
            }      
           
            $new_name = dirname($old_name) . '/' . str_replace('../', '', html_entity_decode($this->request->post['name'], ENT_QUOTES, 'UTF-8') . $ext);
                                                                             
            if (file_exists($new_name)) {
                $json['error'] = $this->language->get('error_exists');
            }          
        } else {
            $json['error'] = $this->language->get('error_select');
        }
       
        if (!$this->user->hasPermission('modify', 'common/filemanager')) {
              $json['error'] = $this->language->get('error_permission');
        }  
       
        if (!isset($json['error'])) {
            if (is_file($old_name)) {
                copy($old_name, $new_name);
            } else {
                $this->recursiveCopy($old_name, $new_name);
            }
           
            $json['success'] = $this->language->get('text_copy');
        }
       
        $this->response->setOutput(json_encode($json));  
    }
Есть какой-то вариант залить свой шелл в opencart помимо вышеперечисленных, либо как-то можно обойти strrchr?

Если залить шелл через админку, открыть полный путь, то отрабатывается только html, причем я загружаю php файл, не меняю mime.

На картинке пример.
 
Ответить с цитированием