免费试用
CDNetworks
我们的多数产品都有14天的免费试用。无需信用卡。
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 的云 WAF 针对该漏洞利用,提供即时防护,并持续调查分析其他变种攻击手法及各类组件漏洞,及时部署防护规则,最大限度降低企业的“漏洞窗口”。
最近一个月,CDNetworks 将其云安全解决方案升级为 云安全 2.0,介绍 WAF 的几个主要特性:
通过整合这些功能,CDNetworks 旨在满足亚太地区企业不断变化的安全需求,确保组织在竞争激烈的市场中保持受到保护。
Edge Application (边缘应用)是 CDNetworks 领先的无服务器边缘计算解决方案。阅读了解了解其原理、核心优势及典型应用场景。
2024年10月24日,CDNetworks成功抵御了东南亚某大型用户群页游平台遭受的超大规模DDoS攻击,攻击在网络层达到1.24Tbps,在应用层超过百万QPS。