Laravel漏洞CVE-2021-3129分析

访客4年前黑客工具681

0x01 前言

最近在搭建复现CVE-2021-3129踩了一些坑,在这边记录一下。顺便拓展下利用编码控制文件内容的一些姿势。

0x02 从hitcon2018的One Line PHP Challenge看CVE-2021-3129

希望直接看环境搭建和exp的可以先跳过~

其实当时在写这个漏洞POC的时候,就发现这个漏洞给我一种似曾相识的感觉,就是当年hitcon的这个经典CTF题。

区别在于one-line-php-challenge这题是通过写入session文件利用文件包含getshell。而CVE-2021-3129则是通过控制laravel.log最终反序列化执行命令。

共同点则在于都是利用编码转换清除内容,令写入的文件内容绕过特定或者冗余数据的限制。

One-line-php-challenge

赛题可以说是很简洁明了了。

通过Get传入orange参数作为文件名,系统将该文件的前6个字符与@<?php比较,若匹配则包含这个文件。
当时的条件是

  • 通过?PHP_SESSION_UPLOAD_PROGRESS控制?session 文件

  • 文件的开头必须是?@<?php

  • 这个文件是以?upload_progress_?开头的,不能直接包含,需要控制这个开头。

base64编码绕过

首先了解下base64编码。

base64编码表为:0-9,26个英文小写字母a-z,26个英文大写字母:A-Z,除此之外还有额外两个字符"+"和"/"

如果遇到非编码表中的字符则会绕过。

image

可以看到如",,,,"被base64解码忽略

这边我们需要绕过的文件开头为upload_progress_,只要令其最终解码为非编码表内容即可。

"upload_progress_"为16位字符。可被base64解析为14个字符,所以我们需要补两个字符。假设补充字符为"zz",则base64 decode后结果为3个可解析字符,我们需要fuzz两个字符,令其之一次解码后存在四个编码表内容,且这四个字符base64解码后的内容均不在编码表中。其中"ZZ"满足条件。

image

构造编码

已知我们需要三次解码才能绕过文件开头,所以将我们写入的内容编码三次即可。最后再三次解码即成功绕过。

image

实际题目中利用php伪协议三次base64解码判断绕过文件头,成功写入的webshell文件。

然后我们再来看CVE-2021-3129

0x03 环境build

影响范围

Laravel <=8.4.2

Ignition <2.5.2

docker搭建

目前vulhub在dockerhub上并无现成的镜像可以pull。如果后续增加了可以直接pull vulhub的Laravel镜像。

vulhub给了dockerfile

composer 的安装包网址是国外镜像,这边换成阿里的镜像源

构建镜像起容器。

访问8080端口如下则环境构建完毕。
image

0x04 分析

漏洞点

在Ignition(<=2.5.1)中,默认提供了一些solutions,其中可以通过MakeViewVariableOptionalSolution的file_get_contents()的可控参数利用phar伪协议反序列化。

image

通过控制器调用MakeViewVariableOptionalSolution传入可控parameters参数。

image

测试phar反序列化

显然如果存在一个可控的上传点,可以触发反序列化执行命令。

使用phpggc生成序列化利用POC

https://github.com/ambionics/phpggc

image

我这边将phar.log放到服务的/var/www/storage/logs路径下。

尝试反序列化成功执行命令

image

利用laravel.log实现phar反序列化

image

利用这边的file_put_contents 使用php伪协议php://filter/write达到控制log内容的效果。

首先要想利用laravel.log,清空log内容。可能会想到一直base64 decode。直到都为不可见字符解码清空。但是这个做法会有问题。因为base64在解码的时候如果等号后面还有内容则会报错。

这边大佬的做法是utf-8转utf-16 然后quoted-printable编码 然后utf-16转utf-8 完成上述操作后log中所有字符转为不可见字符,最后base64 decode即可。

利用报错写入laravel.log

给Log增加一次前缀

phpggc生成序列化利用POC

image

log文件转换为phar文件

image

利用phar伪协议反序列化

image

0x05 Exploit

效果如下:
image

0x06 参考

https://xz.aliyun.com/t/9030

https://www.ambionics.io/blog/laravel-debug-rce?

相关文章

山东涉疫奶枣产品流入韩红山西 大同等地在奶枣样本

  (抗击新冠肺炎)山东涉疫奶枣产品流入山西 大同等地在奶枣样本中检出阳性   中新网太原1月30日电 (记者 范丽芳)1月30日,记者从山西省卫健委获悉,大同、晋城等地在未食用完的奶枣样本中核酸检...

手机是谁发明的(世界第一台手机是谁发明的)

  第一部电话的发明家是英国人亚历山大·贝尔。 贝尔出生在英国一个声学世家,后移居美国。在波士顿曾开办过增益聋哑人教师的学校。由于职业上的原因,他研究过听和说的生理功能。后受聘为波士顿大学声音生理学教...

微信号封了没有好友怎么解封(微信不是好友解

12月30日消息,日前,高清晰DVD技术倡导者们公开表示,将对之前爆发出的黑客破译问题进行调查。这也体现出下一代DVD技术公司们对于有可能出现未知情况的担忧。 据路透社报道,在此之前一个名为Musl...

2014江西高考语文(江西高考语文试卷)

江苏2014年高考阅卷已进入尾声,预计语文均分在94—95分左右。其中作文达到47、48分左右,而且满分作文大大超过去年,约为去年的两倍多。阅卷老师介绍。 2011年普通高等学校招全国统一考试(江西卷...

一本孙悟空赋予主角黑客技术(一本孙悟空赋予主角黑客技术的小说)

一本孙悟空赋予主角黑客技术(一本孙悟空赋予主角黑客技术的小说)

本文目录一览: 1、求一本书,主角有从书中获得异能的能力。第一个是孙悟空的能力。 2、孙悟空—全息碎影的含义你知道吗? 3、小说主角在漫威世界,主角被孙悟空附身,跟整个漫威英雄对抗,这个小说叫...

妈妈生日礼物送什么好(最适合送妈妈的礼物大

妈妈生日礼物送什么好(最适合送妈妈的礼物大

妈妈可是这辈子最亲密的称呼了,她是整个家庭的繁衍基础,她哺育我们,教育我们,是子女这辈子最好精神支柱。现如今,子女长大了就要学会给关心母亲给母亲尽孝,妈妈的生日到来的时候该送什么礼物呢?下面为大家整理...