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 |
3.2 启动docker容器
1 | bash |
3.3 搭建成功
搭建成功后,我们访问http://127.0.0.1:8080/
即可
4 漏洞分析
1.创建一个zip压缩包,抓包观察:
2.观察包可以看到操作是在connector.minimal.php文件中进行的,进入此代码中发现一个autoload.php文件:
3.进入autoload.php,观察代码:
4.抓到的包中可看到cmd=archive,所以先去查找archive函数。
5.在该函数中,参数进行isset判断最后传入archive类,查找public function archive:
在其中可以发现两个类,uniqueName和remoteArchive:
6.先查找public function uniqueName,发现其对传进的参数进行判断替换后又将其传回:
7.再进入protected function remoteArchive,发现其将参数传给了makeArchive:
8.查找protected function makeArchive,观察后发现参数通过escapeshellarg()进行转义,然后拼接其它参数赋值给$cmd,最后进入到procExec中
9.进入procExec,发现最终name参数传入proc_open中执行:
Proc_open:一个php函数,执行一个命令,并且打开用来输入/输出的文件指针,简单将就是可以操作执行服务器命令行。
4 漏洞复现
1.首先创建一个111.txt文件:
2.将111.txt文件打入222.zip压缩包文件中
3.然后再将222.zip打入新的333.zip压缩包中,同时开启代理抓包.
在抓包的过程中也获取了111.txt与222.zip的base64编码:
4.最后修改创建333.zip的请求报文,获取id信息并将其输入到新的名为test.txt文件中:
5.可成功查看到结果:
6.修改报文创建新文件:
7.成功:
4 漏洞修复
4.1 升级版本
及时更新到新版本2.1.49及以上。