WordPress 备份迁移插件是一个强大的工具,可简化 WordPress 网站的备份和迁移过程,提供一系列易于使用的功能。
近日,CDNetworks 安全实验室在 1.3.8 之前的 Backup Migration 插件版本中发现了一个远程代码执行漏洞。该漏洞在 CVSS 3.1 中的评级为 9.8,危险等级为严重。该漏洞允许恶意攻击者通过后门访问对目标网站进行远程执行命令,从而完全控制该网站。
该漏洞的利用条件相对简单,但影响范围较广,为防止被利用,企业应检查该插件的版本,并修复相关漏洞,甚至最好引入Web防护解决方案。
在本快速指南中,我们对该漏洞进行了分析。
漏洞分析与复制
该漏洞存在于插件文件/includes/backup-heart.php中。 复现此漏洞的第一步是找到这个文件,设置断点,然后向路径/wp-content/plugins/backup-backup/includes/backup-heart.php发送数据进行动态调试,服务器收到数据后发现请求头数据保存在变量$fields中。
继续往下看,我们可以看到$fields中的字段值被定义为常量。这里主要关注的是常量BMI_ROOT_DIR和BMI_INCLUDES。BMI_ROOT_DIR的值由请求头中的content-dir值决定,BMI_INCLUDES的值由BMI_ROOT_DIR和“includes”连接而成。
另外发现BMI_INCLUDES与bypasser.php连接在一起,使用require_once函数进行包含,因此require_once的参数是可控的,是一个典型的文件包含漏洞。
在某些编码中,使用固定前缀作为编码的起始字符。以下是不同编码的字符。例如,在韩语字符编码 (ISO-2022-KR) 中,编码消息必须以序列“\x1b$)C”开头。
编码标识符 | 前置字符 |
ISO2022KR | \x1b$)C |
UTF16 | \xff\xfe |
UTF32 | \xff\xfe\x00\x00 |
全球有近7000种语言,各种可打印字符是全球互联网通信所必需的。
基本的 ASCII 编码表广为人知,但它有局限性。它无法表达日语字符,也无法包含希腊字母中的“λ”、“ν”、“π”等符号。为了显示来自其他语言的字符和“☺”等表情符号,已经开发了各种编码表。
这些编码表可以将一种语言中的字符转换为另一种语言中的字符,转换过程受到编码长度、前缀字符等因素的影响,甚至可能产生新的字符。
在主机上我们可以使用iconv -l来查看支持的编码转换表。
这些转换表可以通过 php://convert.iconv.*.* 过滤器使用。例如,convert.iconv.CP861.UTF-16 表示将文件的字符编码从 CP861 转换为 UTF-16。
在下面的代码示例中,通过将字符串“START”经过“CP861”、“UTF16”、“L4”和“GB13000”编码转换,可以在字符串的开头插入一个新字符“B”。
那么编码转换过程中产生的垃圾字符该如何处理呢?在 PHP 中,base64 解码有一个特点,就是只识别 '0-9'、'a-z'、'A-Z'、'/'、'+' 和填充字符 '=' 这 64 个字符。如果解码的字符串中含有其他字符,PHP 会直接忽略这些字符,将剩余可以识别的字符拼接起来进行解码。例如:
可以看到,在解码过程中,字符串中的 '@&>>_' 等字符会被自动忽略。我们可以使用松散解析的 base64 解码来消除编码转换过程中产生的垃圾字符。需要注意的是,如果垃圾字符中包括 '=',会影响 convert.base64-decode 过滤器的解码,我们可以使用 UTF-7 编码将 '=' 符号转换为其他符号,而不会影响 convert.base64-decode 过滤器的解码。
利用上面的方法,我们可以生成任意的base64字符,对生成的base64字符进行解码后,可以得到任意的原始字符。最后,我们将构造好的原始payload与php://filter/{filter}/resource=php://temp进行拼接(指定resource=php://temp可以附加任意的.php文件,以确保路径有效),将payload写入文件,然后使用require_once包含该文件,实现文件包含到代码执行。
在GitHub上,有作者编写了一个编码转换工具,可以快速使用php://convert.iconv.*.*过滤器生成相应的base64字符。
该脚本生成的payload被设置为请求头content-dir的值。
可以看出,编码转换后生成的恶意代码已成功写入并包含,完成了从文件包含到代码执行的过程。
使用 WordPress 6.4.3 + Backup Migration Plugin 1.3.6 在本地进行设置。使用 php_filter_chain 工具生成 payload 代码out.txt`; ?>` 命令。
(https://github.com/synacktiv/php_filter_chain_generator/blob/main/php_filter_chain_generator.py)
将结果复制作为请求头中content-dir的值,并将数据包发送到路径http://localhost/wordpress/wp-content/plugins/backup-backup/includes/backup-heart.php。
访问http://localhost/wordpress/wp-content/plugins/backup-backup/includes/out.txt,可以看到系统命令执行结果已经写入out.txt文件中。
漏洞修复解决方案
这 最新版本的备份迁移插件 已修复该问题,建议尽快更新至最新版本。
最大限度地减少漏洞:CDNetworks 的云安全 2.0
CDNetworks 的云 WAF 针对该漏洞利用,提供即时防护,并持续调查分析其他变种攻击手法及各类组件漏洞,及时部署防护规则,最大限度降低企业的“漏洞窗口”。
最近一个月,CDNetworks 将其云安全解决方案升级为 云安全 2.0,介绍WAF的几个主要特性:
- 内置规则集: 针对 0-day/N-day 和 OWASP Top 10 攻击的 1,000 多个规则集。
- 智能分析(自我调节): 人工智能驱动的用户行为学习,自动生成规则例外以减少误报。
- 零日攻击虚拟补丁: 持续监控漏洞,每小时生成新规则。
- 采用 AI 技术的托管保护模式: 增强威胁检测和响应。
- 可扩展性和易于部署: 可根据需要扩展并轻松部署。
通过整合这些功能,CDNetworks 旨在满足亚太地区企业不断变化的安全需求,确保组织在竞争激烈的市场中保持受到保护。