elFinder ZIP 参数与任意命令注入漏洞(CVE-2021-32682)

elFinder ZIP 参数与任意命令注入漏洞(CVE-2021-32682)

1 漏洞简介

elFinder <= 2.1.58版本中,在创建新的zip存档文件时,对name参数过滤不足,导致参数被带入proc_open中执行,造成命令注入,攻击者可以利用该漏洞在elFinder服务器上执行任意代码。

2 影响范围

elFinder <= 2.1.58

3 环境搭建

3.1 导入docker image

1
bash
1
docker load -i elfinder_cve-2021-32682.tar

image

3.2 启动docker容器

1
2
bash
docker run -dit -p8080:80 elfinder_cve-2021-32682:web

image

3.3 搭建成功

搭建成功后,我们访问http://127.0.0.1:8080/即可
image

4 漏洞分析

1.创建一个zip压缩包,抓包观察:
image
2.观察包可以看到操作是在connector.minimal.php文件中进行的,进入此代码中发现一个autoload.php文件:
image
3.进入autoload.php,观察代码:
image
4.抓到的包中可看到cmd=archive,所以先去查找archive函数。
image
5.在该函数中,参数进行isset判断最后传入archive类,查找public function archive:
image
在其中可以发现两个类,uniqueName和remoteArchive:
image
6.先查找public function uniqueName,发现其对传进的参数进行判断替换后又将其传回:
image
7.再进入protected function remoteArchive,发现其将参数传给了makeArchive:
image
8.查找protected function makeArchive,观察后发现参数通过escapeshellarg()进行转义,然后拼接其它参数赋值给$cmd,最后进入到procExec中
image
9.进入procExec,发现最终name参数传入proc_open中执行:
image
Proc_open:一个php函数,执行一个命令,并且打开用来输入/输出的文件指针,简单将就是可以操作执行服务器命令行。

4 漏洞复现

1.首先创建一个111.txt文件:
image
2.将111.txt文件打入222.zip压缩包文件中
image
3.然后再将222.zip打入新的333.zip压缩包中,同时开启代理抓包.
在抓包的过程中也获取了111.txt与222.zip的base64编码:
image
4.最后修改创建333.zip的请求报文,获取id信息并将其输入到新的名为test.txt文件中:
image
5.可成功查看到结果:
image
6.修改报文创建新文件:
image
7.成功:
image

4 漏洞修复

4.1 升级版本

及时更新到新版本2.1.49及以上。