Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Fix дырок/безопасности


Recommended Posts

Хотелось бы рассказать о решении нескольких неприятных моментов.

 

1. Вместо route=blablabla попробуйте route[]=blablabla

2. Вместо path=blablabla попробуйте path[]=blablabla

3. http://demo.myopencart.ru/index.php?route=common/home/__construct

4. В строке поиска передаем массив

5. Формы авторизации обратной связи и подобные подвержены этой проблеме

 

 

Решение:

В system/library/request.php добавить метод
 

   /**
    * This function performs validation of the input parametrs
    * If somebody wants to use Array instead of string param,
    * this function will prevent php warnings
    * by imploding the input array to the string
    * @param String $key, $value
    * @return true
    */
 
private function getValidValue ( $key, $value = '' )
 {


   $strKeysArray = array ( 'selected', 'option', 'order_product', 'order_total' );


   if ( '/admin/index.php' == $_SERVER['PHP_SELF'] )
   {


    $adminCheckKeys = array ( 'route', 'username', 'password', 'email' );
   if ( in_array ( $key, $adminCheckKeys ) && ! empty ( $value ) && is_array ( $value ) )
    return $this->multi_implode ( $value );


   } else {


   if ( ! in_array ( $key, $strKeysArray ) && ! empty ( $value ) && ! preg_match ( '#\d+#', $key ) && is_array ( $value ) )
    return $this->multi_implode ( $value );      


   }


   return $value;


 }




 private function multi_implode( $sep = '', $array = array() )
 {


is_array ( $sep ) && $array = $sep;
is_array ( $sep ) && $sep = '';


   $_array = array();
   
   foreach( $array as $val )
   {


        $_array[] = is_array( $val ) ? $this->multi_implode($sep, $val) : $val;


   }
   
   return implode( $sep, $_array );
 }
 

Найти:

$data[$this->clean($key)] = $this->clean($value);

Выше вставить:

is_array ( $value ) && $value = $this->getValidValue ( $this->clean($key), $value );

--------------------------------

 

В /system/engine/action.php найти:

 

if ($method) {
$this->method = $method;
} else {
$this->method = 'index';}

Выше вставить:

'__construct' == $method && $method = null;

 

 

 

 

Пришлось делать правки в ядре, но увы.

 

 

Пример #1:

 

err1.jpg

 

 

Пример #2:

 

 

err2.jpg

 

 

Пример #3:

 

err3.jpg

 

 

Пример #4 ( пытаемся в куку писать мусор, при помощи валют ):

 

err4.jpg

 

 

Пример #5 ( немного массива вместо файла ):

 

 

err5.jpg

Надіслати
Поділитися на інших сайтах


1. Вместо route=blablabla попробуйте route[]=blablabla

2. Вместо path=blablabla попробуйте path[]=blablabla

Попробовал.

1. 404

2. home page

Какие угрозы безопасности это несёт?

Надіслати
Поділитися на інших сайтах


Насчет актуальных дырок - заливка файлов через "route=product/product/upload". Не требует никаких прав. Постоянно нахожу залитые шеллы в директории "downloads" на своих демо-сайтах. А отключить руки не доходят т.к. это относительно безопасно, хотя все решается достаточно просто.

 

Наблюдается аж вплоть до 1.5.6.4. Таким образом можно насолить владельцу магазина заливая гигабайты файлов на хостинг. Приведу код формы, через которую идет заливка файлов:

<html>
	<body>
		<form action="http://1541.ocstore.im/index.php?route=product/product/upload" method="post" enctype="multipart/form-data">
			<input type="file" name="file">
			<input type="submit" value="Upload">
		</form>
	</body>
</html>
Надіслати
Поділитися на інших сайтах

Попробовал.1. 4042. home pageКакие угрозы безопасности это несёт?

Вывод путей на сторону юзера ( в определенных версиях ) к корню, при error_reporting. Можно посмотреть в логи сервера. А так никаких - просто совет.

Надіслати
Поділитися на інших сайтах


Поставил фиксы, при редактировании заказа в админке при нажатии кнопки обновления итого вылазит енто

Для удобства написал, что у меня в тех строках

7-22 0:28:00 - PHP Notice:  Array to string conversion in /home/f/censored/censored.ru/public_html/system/library/request.php on line 45
2014-07-22 0:28:00 - PHP Notice:  Array to string conversion in /home/f/censored/censored.ru/public_html/system/library/request.php on line 45
2014-07-22 0:28:00 - PHP Notice:  Array to string conversion in /home/f/censored/censored.ru/public_html/system/library/request.php on line 45
2014-07-22 0:28:00 - PHP Notice:  Array to string conversion in /home/f/censored/censored.ru/public_html/system/library/request.php on line 45
2014-07-22 0:28:00 - PHP Notice:  Array to string conversion in /home/f/censored/censored.ru/public_html/system/library/request.php on line 45
2014-07-22 0:28:00 - PHP Notice:  Array to string conversion in /home/f/censored/censored.ru/public_html/system/library/request.php on line 45
2014-07-22 0:28:00 - PHP Notice:  Array to string conversion in /home/f/censored/censored.ru/public_html/system/library/request.php on line 45
2014-07-22 0:28:00 - PHP Notice:  Array to string conversion in /home/f/censored/censored.ru/public_html/system/library/request.php on line 45
45я строка request.php - return implode ( $value );  


2014-07-22 0:28:00 - PHP Warning:  session_start(): Cannot send session cache limiter - headers already sent (output started at /home/f/censored/censored.ru/public_html/index.php:449) in /home/f/censored/censored.ru/public_html/system/library/session.php on line 11
11 строка session.php - session_start();
449 строка index.php - echo '<b>' . $error . '</b>: ' . $errstr . ' in <b>' . $errfile . '</b> on line <b>' . $errline . '</b>';


2014-07-22 0:28:00 - PHP Warning:  Invalid argument supplied for foreach() in /home/f/censored/censored.ru/public_html/vqmod/vqcache/vq2-catalog_controller_checkout_manual.php on line 57
57я строка кэшированного файла - foreach ($this->request->post['order_product'] as $order_product) {
Если закомментить добавленную строку is_array в request.php, то все работает.
Надіслати
Поділитися на інших сайтах


Я по ходу чего-то не догоняю. Сравнил сейчас старый код для request.php и сегодняшний, что в первом посте - они одинаковые же. Или обновку от куда-то качать нужно?

Надіслати
Поділитися на інших сайтах


Я по ходу чего-то не догоняю. Сравнил сейчас старый код для request.php и сегодняшний, что в первом посте - они одинаковые же. Или обновку от куда-то качать нужно?

У меня этих ошибок нет, просьба связаться со мной в icq 27272727 или skype: elhan.isaev для выяснения причин. Спасибо!

Надіслати
Поділитися на інших сайтах


Да ладно, не критично. Теперь нет ошибок про нажимании той кнопки, но естественно появились другие, при попытке сохранить заказ. При сохранении пропадает весь товар из заказа. Попробую ка я на дефолтной темке на локалке. У меня есть подозрения на несколько модулей, но от них я отказываться не могу, ибо уплочено, да и альтернативы нет.

 

 

2014-07-23 20:45:10 - PHP Warning:  Invalid argument supplied for foreach() in /home/f/censored/censored.ru/public_html/vqmod/vqcache/vq2-admin_controller_sale_order.php on line 1309
vq2-admin_controller_sale_order.php on line 1309 - foreach ($this->request->post['order_product'] as $order_product) {
 
2014-07-23 20:45:10 - PHP Warning:  Invalid argument supplied for foreach() in /home/f/censored/censored.ru/public_html/vqmod/vqcache/vq2-admin_controller_sale_order.php on line 101
vq2-admin_controller_sale_order.php - foreach ($this->request->post['order_total'] as $i=>$order_total) {
 
2014-07-23 20:45:10 - PHP Warning:  Invalid argument supplied for foreach() in /home/f/censored/censored.ru/public_html/vqmod/vqcache/vq2-admin_model_sale_order.php on line 211
vq2-admin_model_sale_order.php - foreach ($data['order_product'] as $order_product) {
 
2014-07-23 20:45:10 - PHP Warning:  Invalid argument supplied for foreach() in /home/f/censored/censored.ru/public_html/vqmod/vqcache/vq2-admin_model_sale_order.php on line 251
vq2-admin_model_sale_order.php - foreach ($data['order_total'] as $order_total) {
 
2014-07-23 20:45:10 - PHP Notice:  Undefined variable: order_total in /home/f/censored/censored.ru/public_html/vqmod/vqcache/vq2-admin_model_sale_order.php on line 255
vq2-admin_model_sale_order.php - $total += $order_total['value'];
 
2014-07-23 20:45:10 - PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/f/censored/censored.ru/public_html/admin/index.php:86) in /home/f/censored/censored.ru/public_html/vqmod/vqcache/vq2-system_engine_controller.php on line 28
vq2-system_engine_controller.php - header('Status: ' . $status);
 
2014-07-23 20:45:10 - PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/f/censored/censored.ru/public_html/admin/index.php:86) in /home/f/censored/censored.ru/public_html/vqmod/vqcache/vq2-system_engine_controller.php on line 29
vq2-system_engine_controller.php - header('Location: ' . str_replace(array('&', "\n", "\r"), array('&', '', ''), $url));
Потестил на чистой сборке с вкмодом. Та же беда. Нужно просто зайти в редактирование заказа и ничего не меняв его сохранить. Поимеем ошибки и удаление заказанного товара.

 

2014-07-23 21:21:22 - PHP Warning:  Invalid argument supplied for foreach() in Y:\home\test8.ru\office\admin\controller\sale\order.php on line 1244
foreach ($this->request->post['order_product'] as $order_product) {

2014-07-23 21:21:22 - PHP Warning:  Invalid argument supplied for foreach() in Y:\home\test8.ru\office\admin\model\sale\order.php on line 190
foreach ($data['order_product'] as $order_product) {


2014-07-23 21:21:22 - PHP Warning:  Invalid argument supplied for foreach() in Y:\home\test8.ru\office\admin\model\sale\order.php on line 225
foreach ($data['order_total'] as $order_total) {


2014-07-23 21:21:22 - PHP Notice:  Undefined variable: order_total in Y:\home\test8.ru\office\admin\model\sale\order.php on line 229
$total += $order_total['value'];


2014-07-23 21:21:22 - PHP Warning:  Cannot modify header information - headers already sent by (output started at Y:\home\test8.ru\office\admin\index.php:86) in Y:\home\test8.ru\office\vqmod\vqcache\vq2-system_engine_controller.php on line 28
2014-07-23 21:21:22 - PHP Warning:  Cannot modify header information - headers already sent by (output started at Y:\home\test8.ru\office\admin\index.php:86) in Y:\home\test8.ru\office\vqmod\vqcache\vq2-system_engine_controller.php on line 29
header('Status: ' . $status);
header('Location: ' . str_replace(array('&', "\n", "\r"), array('&', '', ''), $url));
Методом исключения остается vqmod чтоле? При чистой установке он вносит такие изменения

<file path="system/" name="startup.php,engine/*.php,library/*.php">
		<operation error="skip">
			<search position="replace" regex="true"><![CDATA[~(require|include)(_once)?\(([^)]+)~]]></search>
			<add><![CDATA[$1$2(VQMod::modCheck($3)]]></add>
		</operation>
	</file>
З.Ы. Самое главное забыл написать. Тестилось все на ocStore 1.5.5.1.2
Надіслати
Поділитися на інших сайтах


Если посмотреть в обновленные методы, то order_total и order_product добавлены в исключения:

 

$strKeysArray = array ( 'selected', 'option', 'order_product', 'order_total' );

 

 

Попробуй новые методы, и отпишись.

 

Благодарю.

Надіслати
Поділитися на інших сайтах


Самое забавное то, что я еще вчера это пробовал (если только опять там в первом посте что-то не подправлено). Сегодня потестю вообще на наичистейшей установке без вкмода. Если и после этого вылезет, то я умываю руки :)

Надіслати
Поділитися на інших сайтах


Ребят, для того чтобы не показывать ошибки

 

Необходимо:

Зайти в Админку -> Система -> Настройки -> Изменить -> Сервер ->  Показывать ошибки:  НЕТ

 

И как это нам поможет?

Надіслати
Поділитися на інших сайтах

Ставим, галочку в админке не писать ошибки. (Думаю специально не будут создавать ошибки). Конечно, понимаю, ошибки нужно исправить.

Парни, объясните чем грозит вывод этих ошибок, желательно в примере.

Надіслати
Поділитися на інших сайтах


Ставим, галочку в админке не писать ошибки. (Думаю специально не будут создавать ошибки). Конечно, понимаю, ошибки нужно исправить.

Парни, объясните чем грозит вывод этих ошибок, желательно в примере.

 

Есть ресурсы где подробно описано, здесь это не совсем уместно публиковать.

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.