前言
距第一次梦里的渗透已经过去2年有余,感叹时间过得真快的同时,最近又来了一场梦,当然这是新的一场梦,全文文字记录。
环境
“我想要往容器中上传文件,但是curl、wget啥啥没有怎么办”,再深入一看是k8s pod,而且还是kubelet 10250未授权访问在往pod中执行命令,既然是pod就不要纠结没有curl这些命令了,直接拿下k8s集群,然后kubectl cp不就行了?
过程记录
首先通过10250的/pods
接口获取了当前node上的pod信息,然后尝试在kube-system namespace下找了几个pod想获取token、ca证书,但是都无果,只找到了几个basic认证的账号密码,其格式为password, user, uid
,可惜访问apiserver api路由时也是没啥权限,访问方式可以直接浏览器访问apiserver的6443端口,也可以通过curl -u
去访问/api
路径。但是后面发现了ingress pod,ingress是拿来做7层转发的,想着权限应该比较大,因此通过查看/var/run/secrets/kubernetes.io/serviceaccount/token
拿到了serviceaaccount的token,然后尝试去访问/api/v1/secrets
拿到了所有的secret,后面想着curl着实不方便,就想着用kubectl
进行测试,但是结果却一直超时,通过-v=10
参数打印了curl命令,除了user-agent
不太一样其他都一样,为什么curl可以访问、浏览器可以,kubectl
却不行?所以怀疑是user-agent
被拦截了,因此尝试通过在windows cmd如下命令先设置http流量走burpsuite代理:
set http_proxy=http://127.0.0.1:8080
set https_proxy=http://127.0.0.1:8080
然后重放修改user-agent后数据请求成功,因此确认user-agent被拦截,前期可以通过burpsuite来自动replace header的功能完成user-agent的替换,但是不是很优雅,因此可以修改kubectl源码来达到自定义user-agent的目的。代码很简单,直接问chat-gpt o3,代码路径:
https://github.com/Jumbo-WJB/kubernetes/tree/feature-add_custom-user-agent
最终效果为:
./_output/dockerized/bin/darwin/arm64/kubectl get pods -v=10 --custom-user-agent="MyAgent/1.0"
...
curl -v -XGET -H "User-Agent: MyAgent/1.0" -H "Accept: application/json;g=apidiscovery.k8s.io;v=v2;as=APIGroupDiscoveryList,application/json;g=apidiscovery.k8s.io;v=v2beta1;as=APIGroupDiscoveryList,application/json" 'https://127.0.0.1:58128/api?timeout=32s'
...
还有个问题,可能是新版本kubectl和老版本kubernetes不兼容的问题,Accept必须只能是application/json
,否则服务端不认识,因此也是直接在burpsuite上改了算了..
总结
当你梦见一个很久不见的人,说明她正在遗忘你。
原文始发于微信公众号(中国白客联盟):梦里的一次渗透(二)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论