Перейти к содержанию
Форум поддержки пользователей VamShop

Логи доступа


Алексей Туркин

Рекомендуемые сообщения

Алексей Туркин

приветсвую.

в результате действий неизвестных лиц поменялись адреса почты для оформленных заказов.

в какой месте можно в магазине посмотреть логи доступа по фтп и нттп - а то провайдер говорит, что не ведет.

Ссылка на сообщение
Поделиться на другие сайты
Алексей Туркин

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

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

Ссылка на сообщение
Поделиться на другие сайты

Есть у Вас на ftp нет папки типа logs, то никак.

Логи доступны только Вашему хостингу.

Если у Вас веб-сервер apache, то логи обязательно ведутся.

Лог ошибок и лог доступа, т.е. error log и access log, соответственно.

Автоматического удаления заказов нет.

Разве что в Админке - Покупатели - Заказы удалять время от времени.

А вообще, какая версия магазина у Вас, старая?!

Ссылка на сообщение
Поделиться на другие сайты

Логи  должен вести хостер. Скорее обязан. Именно для того, чтобы разбирать подобные ситуации. И для seo полезно. Вообще, логи бывают очень нужны. Пусть не постоянно, но иногда без них просто никуда. Это я к тому, что нужно или хостера напрячь или сменить его.

В магазине таких логов нет.

Проверьте все файлы в магазине - они соответствуют оригиналам? Нет лишних?

Саша! Тема всплывает второй раз. Почерк одинаковый. Похоже на sql injection. Хорошо-бы провести аудит этих магазинов.

Ссылка на сообщение
Поделиться на другие сайты
Алексей Туркин

92.115.197.123 - - [30/Jul/2010:14:25:02 +0400] "GET/affiliate_show_banner.php?affiliate_banner_id=-1+UNION+SELECT+0x6F6B2

E67696 6,1+FROM+customers+WHERE+customers_id=1+AND+ASCII(SUBSTRING(customers_

password,19,1))IN(54,55)%23 HTTP/1.0" 200 668 "-" "-"

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

далее ручками былит поменяны адреса электронной почты,

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

Ссылка на сообщение
Поделиться на другие сайты

Спасибо за информацию!!! Значит логи всё-таки нашлись ;)

Исправленный файл (не проверял, если найдутся синтаксические ошибки, пишите):

<?php
/*------------------------------------------------------------------------------
  $Id: affiliate_show_banner.php,v 1.3 2004/01/09 14:05:44 hubi74 Exp $

  XTC-Affiliate - Contribution for XT-Commerce http://www.xt-commerce.com
  modified by http://www.netz-designer.de

  Copyright (c) 2003 netz-designer
  -----------------------------------------------------------------------------
  based on:
  (c) 2003 OSC-Affiliate (affiliate_show_banner.php, v 1.15 2003/08/18);
  http://oscaffiliate.sourceforge.net/

  Contribution based on:

  osCommerce, Open Source E-Commerce Solutions
  http://www.oscommerce.com

  Copyright (c) 2002 - 2003 osCommerce

  Released under the GNU General Public License
  ---------------------------------------------------------------------------*/

// CHECKIT
// -> optimize code -> double parts

// require of application_top not possible
// cause then whois online registers it also as visitor
//

define('TABLE_AFFILIATE_BANNERS_HISTORY', 'affiliate_banners_history');
define('TABLE_AFFILIATE_BANNERS', 'affiliate_banners');
define('TABLE_PRODUCTS', 'products');

require('includes/application_top.php');
require('includes/configure.php');
require('includes/affiliate_configure.php');

// include used functions
require_once(DIR_FS_INC . 'vam_db_input.inc.php');
require_once(DIR_FS_INC . 'vam_db_connect.inc.php');
require_once(DIR_FS_INC . 'vam_db_close.inc.php');
require_once(DIR_FS_INC . 'vam_db_query.inc.php');
require_once(DIR_FS_INC . 'vam_db_fetch_array.inc.php');

// make a connection to the database... now
vam_db_connect() or die('Unable to connect to database server!');

function affiliate_show_banner($pic) {
  //Read Pic and send it to browser
    $fp = fopen($pic, "rb");
    if (!$fp) exit();
    // Get Image type
    $img_type = substr($pic, strrpos($pic, ".") + 1);
    // Get Imagename
    $pos = strrpos($pic, "/");
    if ($pos) {
      $img_name = substr($pic, strrpos($pic, "/" ) + 1);
    }
  else {
    $img_name=$pic;
    }
    header ("Content-type: image/$img_type");
    header ("Content-Disposition: inline; filename=$img_name");
    fpassthru($fp);
    // The file is closed when fpassthru() is done reading it (leaving handle useless). 
    // fclose ($fp);
    exit();
}

function affiliate_debug($banner,$sql) {
?>
    <table border=1 cellpadding=2 cellspacing=2>
      <tr><td colspan=2>Check the pathes! (catalog/includes/configure.php)</td></tr>
      <tr><td>absolute path to picture:</td><td><?php echo DIR_FS_CATALOG. DIR_WS_IMAGES . $banner; ?></td></tr>
      <tr><td>build with:</td><td>DIR_FS_CATALOG . DIR_WS_IMAGES . $banner</td></tr>
      <tr><td>DIR_FS_DOCUMENT_ROOT</td><td><?php echo DIR_FS_DOCUMENT_ROOT; ?></td></tr>
      <tr><td>DIR_FS_CATALOG</td><td><?php echo DIR_FS_CATALOG ; ?></td></tr>
      <tr><td>DIR_WS_IMAGES</td><td><?php echo DIR_WS_IMAGES; ?></td></tr>
      <tr><td>$banner</td><td><?php echo $banner; ?></td></tr>
      <tr><td>SQL-Query used:</td><td><?php echo $sql; ?></td></tr>
      <tr><th>Try to find error:</td><td>&nbsp;</th></tr>
      <tr><td>SQL-Query:</td><td><?php if ($banner) echo "Got Result"; else echo "No result"; ?></td></tr>
      <tr><td>Locating Pic</td><td>
<?php
    $pic = DIR_FS_CATALOG . DIR_WS_IMAGES . $banner;
    echo $pic . "<br>";
    if (!is_file($pic)) {
      echo "failed<br>";
    } else {
      echo "success<br>";
    }
?>
      </td></tr>
    </table>
<?php
    exit();
}

$banner = '';
$products_id = '';
$banner_id ='';
$prod_banner_id = '';
// Register needed Post / Get Variables
if (isset($_GET['ref'])) $affiliate_id = (int)$_GET['ref'];
if (isset($_POST['ref'])) $affiliate_id = (int)$_POST['ref'];

if (isset($_GET['affiliate_banner_id'])) $banner_id = (int)$_GET['affiliate_banner_id'];
if (isset($_POST['affiliate_banner_id'])) $banner_id = (int)$_POST['affiliate_banner_id'];
if (isset($_GET['affiliate_pbanner_id'])) $prod_banner_id = (int)$_GET['affiliate_pbanner_id'];
if (isset($_POST['affiliate_pbanner_id'])) $prod_banner_id = (int)$_POST['affiliate_pbanner_id'];



if (!empty($banner_id)) {
  $is_banner = 'true';
  $sql = "select affiliate_banners_image, affiliate_products_id from " . TABLE_AFFILIATE_BANNERS . " where affiliate_banners_id = " . (int)$banner_id  . " and affiliate_status = 1";
  $banner_values = vam_db_query($sql);
  if ($banner_array = vam_db_fetch_array($banner_values)) {
    $banner = $banner_array['affiliate_banners_image'];
    $products_id = $banner_array['affiliate_products_id'];
  }
}

if (!empty($prod_banner_id)) {
  $is_banner = 'false';
  $banner_id = 1; // Banner ID for these Banners is one
  $sql = "select products_image from " . TABLE_PRODUCTS . " where products_id = '" . (int)$prod_banner_id  . "' and products_status = 1";
  $banner_values = vam_db_query($sql);
  if ($banner_array = vam_db_fetch_array($banner_values)) {
    $banner = $banner_array['products_image'];
    $products_id = $prod_banner_id;
  }
}

// DebugModus
if (AFFILIATE_SHOW_BANNERS_DEBUG == 'true') affiliate_debug($banner,$sql);

if ($banner) {
  if($is_banner == 'true') {
    $pic = DIR_FS_CATALOG . DIR_WS_IMAGES . $banner;
  }
  else {
    $pic = DIR_FS_CATALOG . DIR_WS_THUMBNAIL_IMAGES . $banner;
  }

  // Show Banner only if it exists:
  if (is_file($pic)) {
    $today = date('Y-m-d');
    // Update stats:
    if ($affiliate_id) {
      $banner_stats_query = vam_db_query("select * from " . TABLE_AFFILIATE_BANNERS_HISTORY . " where affiliate_banners_id = '" . (int)$banner_id  . "' and affiliate_banners_products_id = '" . (int)$products_id ."' and affiliate_banners_affiliate_id = '" . (int)$affiliate_id. "' and affiliate_banners_history_date = '" . vam_db_input($today) . "'");
      // Banner has been shown today
      if ($banner_stats_array = vam_db_fetch_array($banner_stats_query)) {
        vam_db_query("update " . TABLE_AFFILIATE_BANNERS_HISTORY . " set affiliate_banners_shown = affiliate_banners_shown + 1 where affiliate_banners_id = '" . (int)$banner_id  . "' and affiliate_banners_affiliate_id = '" . (int)$affiliate_id. "' and affiliate_banners_products_id = '" . (int)$products_id ."' and affiliate_banners_history_date = '" . vam_db_input($today) . "'");
      }
      else { // First view of Banner today
        vam_db_query("insert into " . TABLE_AFFILIATE_BANNERS_HISTORY . " (affiliate_banners_id, affiliate_banners_products_id, affiliate_banners_affiliate_id, affiliate_banners_shown, affiliate_banners_history_date) VALUES ('" . (int)$banner_id  . "', '" .  (int)$products_id . "', '" . (int)$affiliate_id . "', '1', '" . vam_db_input($today) . "')");
      }
    }
    // Show Banner
    affiliate_show_banner($pic);
  }
}

// Show default Banner if none is found
if (is_file(AFFILIATE_SHOW_BANNERS_DEFAULT_PIC)) {
  affiliate_show_banner(AFFILIATE_SHOW_BANNERS_DEFAULT_PIC);
}
else {
  echo "<br>"; // Output something to prevent endless loading
}
exit();
[/code]

Саша! Возвращаясь к старому разговору о фильтрации данных в запросах. Кто меня убеждал, что всё это ерунда?

Ссылка на сообщение
Поделиться на другие сайты

Спасибо, сейчас тогда сделаю новую версию из тех изменений, что накопились на данный момент и выпущу патч.

Ссылка на сообщение
Поделиться на другие сайты

Был не прав, что уж тут говорить.

Только как по всему коду выловить подобные проблемы?!

Указания типа данных ведь почти нигде нет, но не везде ведь возможно свой код подсунуть.

Ссылка на сообщение
Поделиться на другие сайты

Хотя наверное от версий mysql и php зависит работает этот sql injection или нет?!

У меня что-то не выводит хэш пароля при таком запросе.

Ссылка на сообщение
Поделиться на другие сайты

Только как по всему коду выловить подобные проблемы?!

Проводить аудит кода.

Указания типа данных ведь почти нигде нет, но не везде ведь возможно свой код подсунуть.

Это плохо, что фильтрации "почти нигде нет". Должна быть.

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

Санитаризация не отменяет фильтрацию.

Ссылка на сообщение
Поделиться на другие сайты

Хотя наверное от версий mysql и php зависит работает этот sql injection или нет?!

У меня что-то не выводит хэш пароля при таком запросе.

От этого всем остальным легче?

Ссылка на сообщение
Поделиться на другие сайты

Так вроде стоит какой-то class.inputfilter.php на входе /includes/application_top.php.

Но, видимо, не работает.

Вобщем, буду смотреть, спасибо большое.

Ссылка на сообщение
Поделиться на другие сайты

Не легче конечно, закрыть нужно в любом случае.

Просто говорю, что от настроек php.ini тоде зависит, видимо.

Ссылка на сообщение
Поделиться на другие сайты

Так попроси у Алексея Туркина phpinfo. И у другого пострадавшего тоже.

Нужно исходить из принципа "нет здоровых людей, есть только недообследованные". Т.е. исходить из того, что дыры всегда есть, просто они пока не обнаружены. Я бы на твоём месте всё-таки включил в дистрибутив систему мониторинга файловой системы и таблицы конифиг. Это не защитит от атак, но позволит своевременно обнаруживать их результаты, а также более-менее точно знать время атаки, что поможет при анализе логов и поиска способов атаки. К сожалению в логах сервера нет параметров post, поэтому наверное стоит вести логи в магазине.

Ссылка на сообщение
Поделиться на другие сайты
  • 1 month later...

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

Картинки загруженные ранее - остались.

Может заплатка блокирует загруз?

Ссылка на сообщение
Поделиться на другие сайты

На картинки никак влиять не должно.

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

Ссылка на сообщение
Поделиться на другие сайты
×
×
  • Создать...