今天就跟大家聊聊有关怎么进行CVE-2021-3129 漏洞分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。CVE-2021-3129漏洞很像hitcon2018的One Line PHP Challenge,于是去看了看通过Get传入orange参数作为文件名,系统将该文件的前6个字符与@
文件上传时应用可以发送一个POST请求到终端(例如通过XHR)来检查这个状态如下:简而言之,我们可以在上传文件时POST一个可控参数来达到远程命令执行的目的php.ini的默免费云主机域名认选项enabled=on
表示upload_progress
功能开始,也意味着当浏览器向服务器上传一个文件时,php将会把此次文件上传的详细信息(如上传时间、上传进度等)存储在session当中 ;cleanup=on
表示当文件上传结束后,php将会立即清空对应session文件中的内容,这个选项非常重要;name
当它出现在表单中,php将会报告上传进度,最大的好处是,它的值可控;prefix+name
将表示为session中的键名这里主要是介绍filter伪协议的convert.base64-decode
会将非base64字符给过滤掉后再进行decode
,但是如果=
后面出现了别的base64字符,则会出现报错个人理解:interface类似于python的装饰器,implements就是@。清空log写入phar读取phar通过对Laravel的debug页面进行抓包,再对比源码
我们发现ViewFile以及variableName参数是可控的,源码如下分析下来,发现viewFile参数利用了php的”危险函数”进一步分析,发现我们可以通过此页面往Laravel的log文件写入数据。那么我们可以结合上述函数,对laravel的log文件进行注入,达到远程执行命令的目的。我们首先清空log,然后写入phar的POP链,再清空多余的字符,这样就把log文件完全变成了phar规范的代码,所以可以利用phar协议,反序列化执行代码,达到RCE。难点在于清空log以及POP构造通过多次编码,将log文件内的字符转换为非base64字符,然后再base64_decode写入AA,对齐log文件的格式:PAYLOAD会在log中出现两次,我们可以通过编码去掉其中一个以及其他无关的字符。记得在payload后添加一个字符payload的生成一般使用phpggc小问题:在file_get_contents()
传入