Loading

Gitlab CVE-2018-14364 压缩包上传getshell 漏洞复现分析

0x00 前言

该漏洞属于登录后的任意文件写入漏洞,该漏洞可以通过写入公钥复现该漏洞需要注意版本问题,一开始用vulhub起的环境发现复现不了,于是到网上找了一个docker镜像搭建起来才复现成功。

0x01 漏洞复现

首先搭建环境,不建议手动从头搭起,除了gitlab以外还有其他组件,相对麻烦,这里可以直接借助docker上的image进行搭建。

//拉取镜像
sudo docker pull gitlab/gitlab-ce:11.0.3
//映射同期端口80到本地的10081
docker run -d -p 10081:80 beginor/gitlab-ce:11.0.1-ce.0

访问10081端口,并设置密码,设置完成后,进入登录,使用“root/刚刚设置的密码”进行登录

image-20210518105535722

新建项目

image-20210518105933015

选择导入项目

image-20210518110000749

选择从gitlab export导入

image-20210518110201369

选择生成步骤一中的压缩包1,项目名称填一个新的名称,这里为test2,选择导入项目

image-20210518110642602

选择删除该项目

image-20210518110756028

再次按照上面的步骤新建项目导入

image-20210518110833596

填入跟上面的步骤同名的项目名test2,并导入第二个压缩包,选择导入项目

image-20210518110909039

可以看到该文件已被写入

image-20210518111023277

0x02 漏洞分析

关键漏洞修补代码地址,如下。在导入gitlab压缩包之后,走这个流程

image-20210518152453677

接着会试图解压该压缩包并检查压缩包中的内容是否存在软链接并删除软链接

image-20210518152755271

该匹配的正则表达式为

image-20210518160630052

$符号表示匹配到一行的最末尾,该表达式被绕过,若以\n开头也是末尾,而\n表示换行放开软链接名字的开头,则该软链接不被列出进行检测。

第一步上传为上传包含软链接的压缩包,解压后该压缩包中的软链接指向gitliab根目录

第二部上传文件解压后解压到软链接当中,而软件链接指向安装的根目录,则会重定下至固定目录。

0x03 参考

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

https://gitlab.com/gitlab-org/gitlab-foss/-/compare/v11.0.3...v11.0.4

https://segmentfault.com/a/1190000021593151

posted @ 2021-12-13 21:04  0x28  阅读(961)  评论(0编辑  收藏  举报