Θ laravel 远程代码执⾏ (CVE-2021-3129)
# 0x00 Laravel简介
Laravel是一套简洁 、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码 中解脱出来; 它可以帮你构建一个完美的网络APP ,而且每行代码都可以简洁 、富于表达力。官网: https://lara vel.com/ 。
当 Laravel 开 启 了 Debug 模 式 时 , 由 于 Laravel 自 带 的 Ignition 组 件 对 file_get_contents() 和 file_put_contents()函数的不安全使用 ,攻击者可以通过发起恶意请求 ,构造恶意Log文件等方式触发Phar反序 列化 ,最终造成远程代码执行。
# 0x01 漏洞描述
Laravel 开 启 了 Debug 模 式 时 , 由 于 Laravel 自 带 的 Ignition 组 件 对 file_get_contents() 和 file_put_contents()函数的不安全使用 ,攻击者可以通过发起恶意请求 ,构造恶意Log文件等方式触发Phar反序
列化 ,最终造成远程代码执行。
# 0x02 影响版本
Laravel <= 8.4.2
# 0x03漏洞复现
。 启动环境 ,使⽤浏览器访问
。 验证是否开启了 debug 模式 ,访问
/_ignition/execute-solution
,并开启bp抓包
。 修改请求⽅法为 POST ,构造 payload ,发送
。 如图提⽰file_get_contents()⽅法调⽤失败 ,没有对应⽂件或⽬录 ,说明存在此漏洞 。 下载 phpggc ⼯具,
。 ⽤ phpggc指定利⽤链为Laravel/RCE5⽣成反序列化利⽤的POC ,此处为写⼊⼀句话⽊⻢到shell.php中。 如图发送AA⽣成⽆害paylaod ,进⾏⽅便后续补⻬
。 发送POC⾄服务器 ,注意要在viewFile 的最后添加⼀个字⺟ a ,否则最终laravel.log⾥⾯将⽣成两个 POC ,导致利⽤失败
。 发送如下请求 ,消除多余字符串 ,只留下—个payload。 通过phar://进⾏反序列化。 访问 /shell.php。 有这个⽂件了 ,现在使⽤ 蚁剑 进⾏连接
复现成功
⽅法⼆
。 直接使⽤⼯具⽣成webshell进⾏连接(这⾥使⽤的是哥斯拉)
。 使⽤哥斯拉进⾏连接。
连接成功