laravel远程代码执行(CVE-2021-3129)
字数 1584 2025-08-11 11:39:36

Laravel远程代码执行漏洞(CVE-2021-3129)深度分析与复现指南

漏洞概述

漏洞名称: Laravel远程代码执行漏洞
CVE编号: CVE-2021-3129
影响组件: Laravel框架的Ignition组件
漏洞类型: 反序列化导致的远程代码执行
影响版本: Laravel开启Debug模式且使用Ignition组件的版本(特别是Laravel v8.78.1及之前版本)
风险等级: 高危
利用条件: 目标系统开启了Debug模式

漏洞背景

Laravel是一套简洁、开源的PHP Web开发框架,采用MVC架构。Ignition是Laravel的错误页面组件,用于在开发环境下提供更友好的错误信息展示。

漏洞原理

该漏洞源于Laravel自带的Ignition组件对file_get_contents()file_put_contents()函数的不安全使用。当Laravel开启Debug模式时,攻击者可以通过构造恶意请求,利用Phar反序列化漏洞实现远程代码执行。

具体技术细节:

  1. Ignition组件在处理错误日志时,允许用户通过HTTP请求控制日志文件内容
  2. 攻击者可构造特殊的Phar文件(PHP归档文件)作为日志内容
  3. 当系统使用file_get_contents()file_put_contents()读取/写入这些日志时,会触发Phar反序列化
  4. 精心构造的反序列化链可导致任意代码执行

漏洞复现环境准备

靶机环境

  • Laravel v8.78.1
  • PHP v7.4.3
  • 开启Debug模式

攻击机工具

  1. PHPGGC工具:用于生成反序列化payload
    git clone https://github.com/ambionics/phpggc.git
    
  2. 漏洞利用脚本:需要下载专门的exploit.py脚本

漏洞复现步骤

步骤1:准备利用工具

  1. 克隆PHPGGC仓库:
    git clone https://github.com/ambionics/phpggc.git
    
  2. 下载漏洞利用脚本(exploit.py)

步骤2:设置环境

  1. 将整个phpggc目录移动到cve-2021-3129漏洞复现目录下
  2. 编辑exploit.py脚本:
    vi exploit.py
    
  3. 修改脚本最后几行EXP()函数中的目标地址为实际靶场IP

步骤3:执行攻击

  1. 运行利用脚本:
    python3 exploit.py
    
  2. 成功执行后,脚本将返回当前Web服务运行用户(通常为www-data)

步骤4:执行任意命令

  1. 再次编辑exploit.py脚本:
    vi exploit.py
    
  2. 修改EXP()函数中的命令为需要执行的系统命令,例如:
    EXP("ls /tmp")  # 查询/tmp目录内容
    
  3. 重新运行脚本执行修改后的命令

漏洞修复方案

  1. 升级Laravel框架:更新到已修复该漏洞的版本
  2. 关闭Debug模式:生产环境必须关闭Debug模式
  3. 更新Ignition组件:升级到Ignition 2.5.2或更高版本
  4. 限制日志文件访问:确保日志文件不能被外部用户控制

技术要点总结

  1. 该漏洞需要Laravel开启Debug模式才能利用
  2. 利用过程涉及Phar反序列化技术
  3. 攻击者可以完全控制目标系统,执行任意命令
  4. 漏洞利用链涉及多个函数的不安全使用:
    • file_get_contents()
    • file_put_contents()
    • Phar反序列化

防御建议

  1. 严格遵循"最小权限原则"运行Web服务
  2. 定期进行安全审计,检查框架和组件版本
  3. 在生产环境中禁用所有开发调试功能
  4. 实施Web应用防火墙(WAF)规则,拦截可疑的序列化数据

参考资源

  1. PHPGGC工具仓库:https://github.com/ambionics/phpggc
  2. Laravel安全公告:https://blog.laravel.com
  3. CVE官方描述:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3129

通过以上详细分析和复现步骤,安全研究人员可以深入理解该漏洞的原理和利用方式,同时帮助开发人员和安全运维人员采取有效措施防范此类攻击。

Laravel远程代码执行漏洞(CVE-2021-3129)深度分析与复现指南 漏洞概述 漏洞名称 : Laravel远程代码执行漏洞 CVE编号 : CVE-2021-3129 影响组件 : Laravel框架的Ignition组件 漏洞类型 : 反序列化导致的远程代码执行 影响版本 : Laravel开启Debug模式且使用Ignition组件的版本(特别是Laravel v8.78.1及之前版本) 风险等级 : 高危 利用条件 : 目标系统开启了Debug模式 漏洞背景 Laravel是一套简洁、开源的PHP Web开发框架,采用MVC架构。Ignition是Laravel的错误页面组件,用于在开发环境下提供更友好的错误信息展示。 漏洞原理 该漏洞源于Laravel自带的Ignition组件对 file_get_contents() 和 file_put_contents() 函数的不安全使用。当Laravel开启Debug模式时,攻击者可以通过构造恶意请求,利用Phar反序列化漏洞实现远程代码执行。 具体技术细节: Ignition组件在处理错误日志时,允许用户通过HTTP请求控制日志文件内容 攻击者可构造特殊的Phar文件(PHP归档文件)作为日志内容 当系统使用 file_get_contents() 或 file_put_contents() 读取/写入这些日志时,会触发Phar反序列化 精心构造的反序列化链可导致任意代码执行 漏洞复现环境准备 靶机环境 Laravel v8.78.1 PHP v7.4.3 开启Debug模式 攻击机工具 PHPGGC工具 :用于生成反序列化payload 漏洞利用脚本 :需要下载专门的exploit.py脚本 漏洞复现步骤 步骤1:准备利用工具 克隆PHPGGC仓库: 下载漏洞利用脚本(exploit.py) 步骤2:设置环境 将整个phpggc目录移动到cve-2021-3129漏洞复现目录下 编辑exploit.py脚本: 修改脚本最后几行EXP()函数中的目标地址为实际靶场IP 步骤3:执行攻击 运行利用脚本: 成功执行后,脚本将返回当前Web服务运行用户(通常为www-data) 步骤4:执行任意命令 再次编辑exploit.py脚本: 修改EXP()函数中的命令为需要执行的系统命令,例如: 重新运行脚本执行修改后的命令 漏洞修复方案 升级Laravel框架 :更新到已修复该漏洞的版本 关闭Debug模式 :生产环境必须关闭Debug模式 更新Ignition组件 :升级到Ignition 2.5.2或更高版本 限制日志文件访问 :确保日志文件不能被外部用户控制 技术要点总结 该漏洞需要Laravel开启Debug模式才能利用 利用过程涉及Phar反序列化技术 攻击者可以完全控制目标系统,执行任意命令 漏洞利用链涉及多个函数的不安全使用: file_get_contents() file_put_contents() Phar反序列化 防御建议 严格遵循"最小权限原则"运行Web服务 定期进行安全审计,检查框架和组件版本 在生产环境中禁用所有开发调试功能 实施Web应用防火墙(WAF)规则,拦截可疑的序列化数据 参考资源 PHPGGC工具仓库:https://github.com/ambionics/phpggc Laravel安全公告:https://blog.laravel.com CVE官方描述:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3129 通过以上详细分析和复现步骤,安全研究人员可以深入理解该漏洞的原理和利用方式,同时帮助开发人员和安全运维人员采取有效措施防范此类攻击。