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反序列化漏洞实现远程代码执行。
具体技术细节:
- Ignition组件在处理错误日志时,允许用户通过HTTP请求控制日志文件内容
- 攻击者可构造特殊的Phar文件(PHP归档文件)作为日志内容
- 当系统使用
file_get_contents()或file_put_contents()读取/写入这些日志时,会触发Phar反序列化 - 精心构造的反序列化链可导致任意代码执行
漏洞复现环境准备
靶机环境
- Laravel v8.78.1
- PHP v7.4.3
- 开启Debug模式
攻击机工具
- PHPGGC工具:用于生成反序列化payload
git clone https://github.com/ambionics/phpggc.git - 漏洞利用脚本:需要下载专门的exploit.py脚本
漏洞复现步骤
步骤1:准备利用工具
- 克隆PHPGGC仓库:
git clone https://github.com/ambionics/phpggc.git - 下载漏洞利用脚本(exploit.py)
步骤2:设置环境
- 将整个phpggc目录移动到cve-2021-3129漏洞复现目录下
- 编辑exploit.py脚本:
vi exploit.py - 修改脚本最后几行EXP()函数中的目标地址为实际靶场IP
步骤3:执行攻击
- 运行利用脚本:
python3 exploit.py - 成功执行后,脚本将返回当前Web服务运行用户(通常为www-data)
步骤4:执行任意命令
- 再次编辑exploit.py脚本:
vi exploit.py - 修改EXP()函数中的命令为需要执行的系统命令,例如:
EXP("ls /tmp") # 查询/tmp目录内容 - 重新运行脚本执行修改后的命令
漏洞修复方案
- 升级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
通过以上详细分析和复现步骤,安全研究人员可以深入理解该漏洞的原理和利用方式,同时帮助开发人员和安全运维人员采取有效措施防范此类攻击。