最近在搭建复现CVE-2021-3129踩了一些坑,在这边记录一下。顺便拓展下利用编码控制文件内容的一些姿势。
希望直接看环境搭建和exp的可以先跳过~
其实当时在写这个漏洞POC的时候,就发现这个漏洞给我一种似曾相识的感觉,就是当年hitcon的这个经典CTF题。
区别在于one-line-php-challenge这题是通过写入session文件利用文件包含getshell。而CVE-2021-3129则是通过控制laravel.log最终反序列化执行命令。
共同点则在于都是利用编码转换清除内容,令写入的文件内容绕过特定或者冗余数据的限制。
赛题可以说是很简洁明了了。
通过Get传入orange参数作为文件名,系统将该文件的前6个字符与@<?php比较,若匹配则包含这个文件。
当时的条件是
通过?PHP_SESSION_UPLOAD_PROGRESS控制?session 文件
文件的开头必须是?@<?php
这个文件是以?upload_progress_?开头的,不能直接包含,需要控制这个开头。
首先了解下base64编码。
base64编码表为:0-9,26个英文小写字母a-z,26个英文大写字母:A-Z,除此之外还有额外两个字符"+"和"/"
如果遇到非编码表中的字符则会绕过。
可以看到如",,,,"被base64解码忽略
这边我们需要绕过的文件开头为upload_progress_,只要令其最终解码为非编码表内容即可。
"upload_progress_"为16位字符。可被base64解析为14个字符,所以我们需要补两个字符。假设补充字符为"zz",则base64 decode后结果为3个可解析字符,我们需要fuzz两个字符,令其之一次解码后存在四个编码表内容,且这四个字符base64解码后的内容均不在编码表中。其中"ZZ"满足条件。
已知我们需要三次解码才能绕过文件开头,所以将我们写入的内容编码三次即可。最后再三次解码即成功绕过。
实际题目中利用php伪协议三次base64解码判断绕过文件头,成功写入的webshell文件。
然后我们再来看CVE-2021-3129
Laravel <=8.4.2
Ignition <2.5.2
目前vulhub在dockerhub上并无现成的镜像可以pull。如果后续增加了可以直接pull vulhub的Laravel镜像。
vulhub给了dockerfile
composer 的安装包网址是国外镜像,这边换成阿里的镜像源
构建镜像起容器。
访问8080端口如下则环境构建完毕。
在Ignition(<=2.5.1)中,默认提供了一些solutions,其中可以通过MakeViewVariableOptionalSolution的file_get_contents()的可控参数利用phar伪协议反序列化。
通过控制器调用MakeViewVariableOptionalSolution传入可控parameters参数。
显然如果存在一个可控的上传点,可以触发反序列化执行命令。
使用phpggc生成序列化利用POC
https://github.com/ambionics/phpggc
我这边将phar.log放到服务的/var/www/storage/logs路径下。
尝试反序列化成功执行命令
利用这边的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
log文件转换为phar文件
利用phar伪协议反序列化
效果如下:
https://xz.aliyun.com/t/9030
https://www.ambionics.io/blog/laravel-debug-rce?
本以为百度推出惊雷算法,那些7天内上首页的服务商全部会成为历史,但依然没有成为历史,而且做的还比以前要好,为何呢,因为惊雷算法看起来如此完美,但是依然留下了一些遗憾。 刚开始,我还以为那些存在7...
赚钱的app(有什么比较靠谱的赚钱APP)说到赚钱APP,大家一定想到 刷宝、拼多多、阳光养猪场这类App……但是,这些APP真的可以赚钱吗? 传统的「薅羊毛」在互联网老早已经...
点球规则(国际足球点球判罚规则)经常看球的球迷都知道,点球是足球比赛中最严厉的处罚之一,也是足球比赛中最刺激的场景之一 比赛中处罚的点球,简单来说...
前两天朋友圈发满了关于自己18岁的照片,这只是针对90后的,而过了这个热点后,朋友圈又来了一个游戏小程序“跳一跳”,如此简单的程序,却刷满了朋友圈。 所谓的跳一跳游戏操作非常简单,长按手机,等着...
有人说“此刻的告白要做成「窄告」,才有代价”,所以有一个重要的前提就是区分工具,而要区分工具就需得先举办市场细分。因而本文便先来谈谈这两个问题。 有位告白界前辈说过:“此刻的告白必需做成「窄告」,才...
深圳商报记者 陈小慧 在深圳,独生子女或将有每年不超过20天的护理假,并且在规定假期内照发工资,不影响福利待遇和全勤评奖。近日,市人大常委会在其官网公布了《深圳经济特区养老服务条例(草案)》(以下简...