LaravelDebugmode远程代码执⾏漏洞(CVE-2021-3129)复
如何搭建php开发环境现分析
Laravel Debug mode远程代码执⾏漏洞(CVE-2021-3129)复现分析
漏洞描述:
Laravel 是⼀个免费的开源 PHP Web 框架,在国内外应⽤⼗分⼴泛。2021年1⽉份,国外某安全研究团队披露了 Laravel <= 8.4.2 版本中存在远程代码执⾏漏洞。
当Laravel开启了Debug模式时,由于Laravel⾃带的Ignition组件的某些函数功能存在过滤不严的问题,导致攻击者可以发起恶意请求,构造恶意Log⽂件等⽅式触发Phar反序列化,造成远程代码执⾏,执⾏任意命令控制服务器。
影响范围:
Laravel 框架 < 8.4.3
facade ignition 组件 < 2.5.2
漏洞分析:
环境搭建
系统环境:centos 7
Laravel:Laravel v8.30.0
PHP:PHP v7.3.25
运⾏以下命令使⽤docker部署Laravel漏洞环境
cd CVE-2021-3129
docker-compose up -d
docker images
远程代码执⾏漏洞分析
安装好环境,使⽤命令
docker ps -a
docker exec -it d1ef96fcb17f /bin/sh
进⼊容器,执⾏容器命令
查看.env⽂件,此时app key为空
在错误页⾯点击generate app key
burpsuite抓包可以抓到⼀个参数为solution的post请求包。此时再去查看.env⽂件,app key已经被赋予了⼀个值。
刷新页⾯也正常了。
在源码中搜索上述请求包中的GenerateAppKeySolution,发现其在\Laravel\src\vendor\facade\ignition\src\Solutions路径下。在这个⽬录下存在9个solution php⽂件,通过这些solution,开发者可以通过点击按钮的⽅式,快速修复⼀些错误。本次漏洞就是其中的MakeViewVariableOptionalSolution.php过滤不严谨导致的。
所有的solution都是通过solution控制器进⾏调⽤的,控制器的路径为
\Laravel\src\vendor\facade\ignition\src\Http\Controllers\ExecuteSolutionController.php。当解决不同的错误时,就会调⽤不同的solution,solution中的run⽅法会接收参数执⾏相应操作。
跟进MakeViewVariableOptionalSolution.php中的run⽅法,发现其调⽤了makeOptional⽅法。makeOptional⽅法采⽤
file_get_contents函数处理接收参数中的viewFile参数,file_get_contents函数的作⽤是把整个⽂件读⼊⼀个字符串中。此处viewFile参数是可控的,且接收后也未作任何处理。
可以实现php反序列化漏洞从⽽RCE,如果存在⽂件上传功能,通过在⽂件中插⼊构造的恶意序列化内容,上传后配合配合phar://伪协议给viewFile参数赋值,就可以实现反序列化远程命令执⾏
漏洞复现
远程代码执⾏漏洞复现
将exp下载到本地
给phpggc执⾏权限
chomd  777  phpggc/phpggc
ls
vim exploit.py
:wq
把exp和phpggc放在同⼀⽬录下,使⽤python3执⾏exp        ls
python3  exploit.py

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。