找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4022

积分

0

好友

564

主题
发表于 9 小时前 | 查看: 0| 回复: 0

安全声明:本文所述技术内容仅供安全研究与授权测试使用,旨在提升安全防御意识。任何未经授权的访问或攻击行为均属违法,使用者需自行承担全部法律责任。

在渗透测试或红队演练过程中,我们有时会获取到Kubernetes(K8s)集群的配置文件(kubeconfig)。这份文件是通往集群控制权的钥匙,通过它,我们可以使用kubectl命令行工具与集群进行交互,执行部署应用、管理资源、查看状态等一系列操作。

要成功使用kubectl,我们首先需要在本地配置好连接环境。下面,我们将分别介绍在Windows和Linux系统上配置及连接K8s集群的完整流程,并探讨如何利用已控制的节点进行横向移动。

K8s集群配置文件解析

我们获取到的集群配置文件通常是一个经过Base64编码的字符串,解码后即可得到标准的YAML格式kubeconfig文件。

Kubernetes集群配置文件示例

关键点提示:在配置中,server字段的地址通常是内网IP。若想直接利用,我们需要寻找一份server地址为公网的配置文件。更常见的攻击路径是:先控制一个公网可达的集群,在该集群内部寻找可以访问目标内网的容器,再通过此容器作为跳板,进一步渗透内网集群。后续的横向移动思路正基于此。

配置连接环境并实施连接

Windows 环境配置

1. 下载Windows版kubectl

访问Kubernetes官方发布页面,下载对应版本的kubectl.exe。例如:

https://dl.k8s.io/release/v1.21.14/bin/windows/amd64/kubectl.exe

2. 组织本地目录结构

在本地创建一个文件夹(例如kubernetes),并在其中新建binconfig两个子文件夹。

  • 将下载的kubectl.exe放入bin文件夹。
  • 将获取到的k8s配置文件保存为.conf格式的文件(例如test.conf),放入config文件夹。

Windows环境k8s目录结构

3. 配置系统环境变量

需要配置以下三个环境变量:

  1. KUBERNETES_HOME:指向你的kubernetes主目录。

    • 变量名:KUBERNETES_HOME
    • 变量值:C:\Users\Administrator\Downloads\kubernetes(请根据实际路径修改)

    配置KUBERNETES_HOME环境变量

  2. KUBECONFIG:指向你的k8s配置文件。

    • 变量名:KUBECONFIG
    • 变量值:C:\Users\Administrator\Downloads\kubernetes\config\test.conf(请根据实际路径和文件名修改)

    配置KUBECONFIG环境变量

  3. PATH:将kubectl所在目录添加到系统路径。

    • 编辑Path变量,新增一项:%KUBERNETES_HOME%\bin

    在Path中添加kubectl路径

4. 验证配置

打开新的命令提示符(CMD),执行以下命令测试是否配置成功:

kubectl -h

若出现kubectl的帮助信息,则说明工具环境配置成功。此时,你已经可以远程控制目标K8s集群了。

验证kubectl命令

5. 开始控制集群

配置完成后,我们就可以对集群执行各种操作。

(1) 查看所有Pod信息
首先,获取所有命名空间下的Pod列表及其详细信息,这有助于我们了解集群概况并选择目标。

kubectl get pods --all-namespaces -o wide

查看所有Pod信息

重点关注NAMESPACE(命名空间)、NAME(Pod名称)和IP字段。后续对容器的操作将依赖于前两者。

(2) 探测容器内可用的Shell
进入容器前,最好先查看其/bin目录下有哪些可用的Shell解释器。

kubectl exec -it <容器名> -n <命名空间> -- ls /bin

例如:

kubectl exec -it apixxxxxxxx8w -n cxxxxxxxxxt -- ls /bin

查看容器内/bin目录

(3) 获取容器交互式Shell
根据上一步的探测结果,尝试获取容器的交互式Shell。常见的是/bin/bash/bin/sh

kubectl exec -it <容器名> -n <命名空间> -- /bin/bash
# 或
kubectl exec -it <容器名> -n <命名空间> -- /bin/sh

例如:

kubectl exec -it apixxxxxxxx8w -n cxxxxxxxxxt -- /bin/bash
kubectl exec -it apixxxxxxxx8w -n cxxxxxxxxxt -- /bin/sh

注意:如果容器内没有对应的Shell,命令会报错。例如,尝试使用/bin/bash进入一个只有/bin/sh的容器时会失败。此时应换用存在的Shell。

尝试进入bash报错
成功通过sh进入容器

Linux环境配置与横向移动

K8s集群的横向移动思路很直接:先控制一个公网可达的集群,然后在集群内部寻找能连通目标内网的容器。此时,之前关注的server内网IP就派上用场了。进入该容器后,重复上述步骤,将内网集群的kubeconfig配置部署上去,即可实现控制。由于控制的容器通常是Linux系统,我们需要配置Linux版的kubectl

1. 进入容器并下载Linux版kubectl

首先,通过上一节的方法获取到一个容器的Shell。然后,在容器内下载kubectl二进制文件。

# 下载地址示例
curl -O https://dl.k8s.io/release/v1.21.14/bin/linux/amd64/kubectl
# 或使用 wget
wget https://dl.k8s.io/release/v1.21.14/bin/linux/amd64/kubectl

2. 创建目录结构

与Windows类似,创建统一的目录结构来管理kubectl和配置文件。

mkdir /opt/kubernetes
mkdir /opt/kubernetes/bin
mkdir /opt/kubernetes/config

在Linux容器中创建k8s目录

  • 将下载的kubectl文件移动到/opt/kubernetes/bin/目录。
  • 将目标内网集群的kubeconfig文件(建议以易于识别的内网地址命名)放入/opt/kubernetes/config/目录。
  • 重要:记得为kubectl文件添加执行权限:chmod +x /opt/kubernetes/bin/kubectl

3. 配置环境变量

编辑/etc/profile文件,将相关路径加入环境变量。

vi /etc/profile

在文件末尾添加以下内容(请根据你的实际配置文件名称修改KUBECONFIG的值):

KUBERNETES_HOME=/opt/kubernetes
KUBECONFIG=$KUBERNETES_HOME/config/10.247.xxx.xxx.conf # .conf文件是你自己命名的文件。
PATH=$PATH:$KUBERNETES_HOME/bin
export PATH KUBERNETES_HOME KUBECONFIG

保存退出后,使配置立即生效:

source /etc/profile

编辑并加载环境变量配置文件

4. 控制新集群

配置完成后,即可使用与Windows下完全相同的命令来控制新的内网集群。

# 查看新集群的所有Pod
kubectl get pods --all-namespaces -o wide

# 获取新集群中容器的Shell
kubectl exec -it <新容器名> -n <新命名空间> -- /bin/bash
# 或
kubectl exec -it <新容器名> -n <新命名空间> -- /bin/sh

至此,我们已经成功实现了一次横向移动,能够控制至少两个集群(一个公网,一个内网)。

控制同网段的其他集群

在已控制的跳板节点上,如果想切换控制同一网段内的另一个集群,方法非常简单:

  1. 将新集群的kubeconfig文件保存为新的.conf文件,放入/opt/kubernetes/config/目录。
  2. 更新KUBECONFIG环境变量的值,指向新的配置文件。
  3. 在Linux上,重新执行source /etc/profile;在Windows上,则需要重新打开一个CMD窗口。

操作提示:通常,使用kubectl进行常规的集群连接和容器操作,不会触发安全告警机制。但进行渗透测试活动时,务必在授权范围内进行,并在退出前妥善清理操作痕迹。

Kubernetes集群的攻防是云原生安全中的重要议题,深入理解其配置与连接机制,无论对于攻击方还是防守方都至关重要。如果你对这类安全技术话题感兴趣,欢迎在云栈社区与我们进行更多交流。




上一篇:IngressNightmare漏洞深度分析:远程代码执行风险与完整PoC
下一篇:多集群管理必知:kubectl配置文件的优先级、合并与切换详解
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-3 20:16 , Processed in 1.487017 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表