漏洞分析 | WordPress Backup Migration远程代码执行漏洞(CVE-2023-655...
发布网友
发布时间:2024-10-23 22:18
我来回答
共1个回答
热心网友
时间:2024-10-24 04:20
WordPress Backup Migration插件,一个功能强大的WordPress插件,旨在简化备份和迁移WordPress网站的过程。然而,近期有安全研究人员发现,该插件在小于1.3.8的版本中存在远程代码执行漏洞(CVE-2023-6553),此漏洞评分9.8,等级危急,允许恶意攻击者远程执行命令,甚至获取后门访问,完全控制目标网站。
漏洞影响广泛,建议企事业单位检查插件版本并及时修复,或引入Web防护方案以阻止利用此漏洞。受影响的版本为Backup Migration <= 1.3.7。
漏洞定位在插件文件`includes/backup-heart.php`中。在动态调试时,服务器接收的数据被存入了变量`$fields`,该字段值受到请求头中`content-dir`值的影响。`$fields`中的`BMI_ROOT_DIR`和`BMI_INCLUDES`常量值由`$fields`决定,`BMI_INCLUDES`与“bypasser.php”拼接后通过`require_once`函数进行文件包含,显式地,`require_once`参数可控,属于典型的文件包含漏洞。
为了进一步利用此漏洞实现代码执行,需思考如何绕过限制。注意到某些编码中存在特定的前缀作为字符的开始,如韩语编码(ISO-2022-KR)以“\x1b$)C”开头。互联网支持7000多种语言,为了在不同语言间进行信息交互,需要使用不同的可打印字符集。基本的ASCII编码表受限,无法表示所有语言的字符,包括日语、希腊语等。因此,创建了多种编码表,用于不同语言之间的字符转换,但转换过程中受到编码长度和前置字符等因素的影响,可能会生成新的字符。
通过`iconv`命令检查支持的编码转换表。例如,使用`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`、`/`、`+`和填充字符`=`。如果字符串包含其他字符,`base64`解码会忽略这些字符,只处理可识别字符并进行拼接。例如,在字符串中插入`@>>>_`等字符,通过`base64`解码可以消除这些垃圾字符。
通过将构造的原始payload进行`base64`编码转换,再进行解码,可以得到任意原始字符。将payload与`php://filter/{filter}/resource=php://temp`方式结合,将payload写入文件,最终通过`require_once`引用实现文件包含到代码执行。GitHub上存在一个工具,可以快速使用`php://convert.iconv.*.*`生成相应`base64`字符的编码转换。
利用生成的payload作为请求头`content-dir`的值,发送请求至`http://localhost/wordpress/wp-content/plugins/backup-backup/includes/backup-heart.php`路径下。在编码转换后,恶意代码成功写入并被引用包含,实现了从文件包含到代码执行。
为修复此漏洞,建议使用最新版本的Backup Migration插件,其已修复此问题。同时,网宿WAAP全站防护-云WAF模块已针对该漏洞的利用攻击提供防护,并持续分析和防护各类组件漏洞,确保及时上线防护规则,缩短防护“空窗期”。