参考学习
K8S服务器集群取证实战—2024版安全村专刊
https://blog.csdn.net/SinnetCloud/article/details/105580566
什么是K8S
Go语言开发的容器集群管理平台,管理多个主机上的容器化应用。
K8S核心概念
命名空间(NameSpace)
用于资源隔离。默认生成四个ns:
-
default:默认命名空间,所有未指定NameSpace的对象都会被分配在default命名空间
-
kube-system:系统命名空间,所有由Kubernetes系统创建的资源都在这里
-
kube-public:公共命名空间,该空间下的资源可以被所有人访问(包括未认证用户)
Network Policy是一种关于Pod间及外部与Pod间如何通信的规范。通过定义Network Policy,你可以限制不同命名空间下的Pod之间的访问。例如,你可以创建策略来限制某个命名空间中的Pod只能被另一个特定命名空间中的Pod访问,或者阻止任何跨命名空间的流量。
-
kube-node-lease:该命名空间含有与每个节点关联的Lease对象。节点租用允许kubelet发送heartbeat(心跳),以便控制平面能检测节点故障。
-
kubernetes-dashboard:是一个图形用户界面,简化了与 Kubernetes 控制台的交互过程。它提供了一个易于使用的视图来管理你的Kubernetes集群、应用和服务等资源。你可以使用它进行操作而无需直接输入复杂的命令行指令。
在“
kubernetes-dashboard
”命名空间内通常会创建以下几种类型的K8s资源: -
Service: 该服务定义了 Dashboard 能够通过何种方式被访问。
-
Deployment: 运行 Dashboard 的实际应用程序部分。
-
ConfigMap 和 Secret: 可能存储凭证、配置信息等敏感数据。
Pod
是K8S系统中工作最小单元,容器存放在Pod里,
Deployment
控制Pod,使得Pod拥有多副本、自愈、扩缩容等能力
Service
将一组Pod公开为网络服务的抽象方法,K8S内部署应用后,需要借助Service将对外访问的接口暴露,让用户通过节点IP访问应用,同时K8S的服务发现和负载均衡由Service实现
Ingress
实现域名方式访问K8S内部应用
PV
持久卷(Persistent Volume),是一个集群资源,代表的是集群中的一个具体存储单元。它可以由管理员预先创建,也可以通过StorageClass动态生成。PV独立于任何单个Pod的生命周期,并且可以被整个集群中的Pod使用,不受命名空间限制
PV定义了实际的存储资源,比如大小、访问模式(例如只读、读写等)、后端存储类型(如NFS、iSCSI、云存储等),以及回收策略(如保留或删除数据)等属性
PVC
是用户对PV资源的请求或声明它类似于Pod对于计算资源(CPU和内存)的需求。用户通过PVC来申请具体的存储需求,包括存储的大小、访问模式等
PVC有命名空间隔离性,这意味着它们只能被同一命名空间中的Pod使用。当创建PVC时,如果没有指定命名空间,默认会创建在default命名空间中
ConfigMap
抽取应用(例如:nginx、redis)的配置文件,实现配置文件的自动同步。通过ConfigMap,用户无需进入Pod内部进行配置文件修改,只需要修改相应的CondifMap
Secret
存储敏感数据,密码、token、密钥等
常用命令
K8S的命令是在master节点上执行,命令以kubectl开头
-
get命令,获取基本信息
kubectl --version #查看K8S版本
kubectl get nodes #查看节点和服务版本信息
kubectl get pods -A #查看所有命名空间下的所有pod,-A即--all-namespace,默认显示default下的pod
kubectl get pods -n namespace #查看指定命名空间下的pods
kubectl get pods -n namespace -o wide #查看指定命名空间下的pods,并包含附加信息,如IP、节点名等
kubectl get svc -n namespace #查看指定命名空间下的网络配置,包括类型、端口映射
Type分为NodePort和ClusterIP,前者表示可以通过任意节点IP地址访问到Pod,后者为集群内部使用,只能通过ClusterIP访问
kubectl get pods podname -n namespace -o yaml #查看指定命名空间下指定Pod,以yaml格式显示,用于查看Pod的详细配置
kubectl get deploy -A #查看所有命名空间下的deployment
-
apply命令,部署或更新应用
kubectl apply -f xxx.yaml #使用xxx.yaml中的配置,用于应用部署和更新服务
kubectl apply -f <dir> #目录下的.yaml/.yml/.json文件都会被使用
-
describe命令
kubectl describe pod pod-name -n namespace #查看pod详情,状态、卷挂载、MySql密码等
-
exec命令
kubectl exec -it pod-name -c container-name -n namespace /bin/bass #TTY方式进入指定Pod内的指定容器
-
expose命令
kubectl expose deployment tomcat6 --port=80 --target-port=8080 --type=NodePort
# 将Pod的80端口映射到容器的8080;service会代理Pod的80端口并开放一个随机端口供集群外部访问服务
-
cp命令
kubectl cp filename namespace/podname:podpath
# 将主机上的文件拷贝到指定路径,反过来就是容器里的文件拷贝到主机上
K8S集群取证方法
节点联通
每个镜像单独仿真起来。需要提前获知各节点的IP,因为K8S在部署时候,需要给各个节点设置静态IP,并在/etc/hosts文件内添加各节点主机名和IP地址对应关系,所以可以通过ip addr命令或直接查看任意节点的hosts文件来提前获知。但通常来说,在使用厂商软件解析镜像的时候,一般都能解析出各个节点设置的静态IP。
集群基本信息获取
这一步目的是了解集群的基本情况,主要收集:主机基本信息、命名空间、Pod、deployment、容器等
获取网站源代码
-
可以通过查看K8S的配置集ConfigMap内中间件配置文件来定位网站源码存放路径
-
有些集群中可能没有ConfigMap,这种情况下查看pod详细信息
从中找出pod内的文件挂载路径,在该路径下找网站源码
kubectl describe pod nginx-drewsg -n default
具体的挂载方法是通过PVC实现的,通过下面的命令查看pvc详情,找到对应的PV
kubectl describe pvc claimName -n namespace-name
再通过下面的命令查看PV信息,找到持久化卷的路径和节点
kubectl describe pv Volume -n namespace-name
这样就可以获知源码所在哪个节点的哪个路径下
-
直接进入pod内的nginx容器
kubectl exec -it xxxxx -c nginx -n xxxxxx /bin/bash
获取数据库
获取数据库首先要拿到数据库的账号密码以及对外映射端口,有两种方法:
-
通过网站源码的数据库连接配置文件
-
通过
kubectl describe pod pod-name -n namespace-name
或者kubectl get pod pod-name -n namespace -o yaml
获取数据库端口映射可以用kubectl get svc -n namespace
然后通过Navicat连接数据库,转储即可
网站重建
转储网站源码和数据库可以进行重建,但是这里讲在集群服务器上重启网站
-
首先
kubectl get pod -n namespace-name
检查Pod运行状态是否为running
-
检查网站数据库连接配置文件是否正确
-
检查网站中间件配置文件是否正确
-
找网站暴露到节点的端口号和type类型,这里需要将Type设置为NodePort
-
注意Pod内的中间件容器内中间件服务(例如Nginx服务)需要重启
-
如果需要域名访问,
kubectl get pod -A
检查集群是否安装ingress,kubectl get ingress -A
检查是否配置ingress,没有问题即可在hosts文件做域名映射
题目
网络配置
将虚拟网络改为NAT模式,设置为192.168.2的网段
主节点为192.168.2.199,DHCP从.199开始
1.该集群主节点操作系统版本是?[标准格式:100.100.100]
7.9.2009
2.该集群创建时间是?[标准格式:0000-00-00T00:00:00Z]
2024-06-24T11:28:11Z
集群创建时,自动生成4个命名空间,查看它们的创建时间就可以了
3.该集群共有多少个命名空间?[标准格式:100]
7
4.该集群所有命名空间内总共有多少个pod?[标准格式:100]
19
5.请给出该集群所使用的cni网络插件及其版本?[标准格式:abc-V1.1.1]
flanner-V1.0.0
fannel是K8S常用的cni网络插件,kube-flannel-ds-xxxxx指三个节点的flannel
6.其中打金平台的后台登录地址跳转文件是?[标准格式:abc.php]
WIdbdgd1Us.php
火眼分析得知node1和node2上使用宝塔面板创建了总共四个网站
先看node1的宝塔,网站的nginx服务是暂停的,需要启动。然后在"C:WindowsSystem32driversetchosts"域名映射
第一个域名网页写JinRui Coin
,是一个虚拟币网站
第二个域名网页写菲华国际
再看node2的宝塔,分别是交友盲盒和贷款,猜测菲华国际为打金网站
查看网站日志找到后台管理登录
在宝塔面板用文件内容搜索,确定为WIdbdgd1Us.php
7.其中打金平台密码加密算法是?[标准格式:abc]
sha1
定位systemlogin
再定位login,第一个PHP文件
8.其中打金平台中"13067137585"用户的累计产量有多少?[标准格式:100.00]
43813.52
Navicat连接数据库,修改admin密码为123456
登录后台管理系统
9.其中打金平台会员组最高溢价比例是多少?[标准格式:10.00]
1.70
10.其中打金平台会员推广人数最多的会员其姓名是?[标准格式:名字]
李奕欣
11.其中打金平台最早一次备份数据库的时间(Asia/Shanghai)是?[标准格式:2024-01-01-01:01:01]
2019-05-06-22:27:57
后台只有一个,到数据库确认一下发现更早的
12.其中金瑞币(JINRUI COIN)平台图片上传平台是哪种类型?[标准格式:腾讯云ABC]
阿里云OSS
也是一样通过日志发现后台URL,解密密码的md5是付费记录,找到盐值,发现原本的密码就是123456
登入后台没找到相关信息,搜代码
13.其中金瑞币平台手机直充接口是什么?[标准格式:http://xxx.xxx.xxx/xxx]
http://op.juhe.cn/ofpay/mobile/onlineorder
后台也找不到,翻代码
14.其中金瑞币平台后台登录地址是?[标准格式:http://xxx/xxx/xxx.xxx]
http://www.gsjksu2kig.com/admin.php/login/index.html
15.其中金瑞币平台中密码加密盐值是?[标准格式:AbC1d]
GWwRbMOPJYZCvE5gembG
16.其中金瑞币平台中交易手续费是百分之多少?[标准格式:100]
36
17.其中金瑞币平台中目前有几种充值方式?[标准格式:100]
3
18.二号集群节点有源代码的网站目录有几个?(正在运行的除外)[标准格式:1]
5
find搜索index.html,正在运行的是宝塔中的两个站点,发现除了/www/wwroot
中的两个,opt下还有很多
19.二号集群节点memcached端口是?[标准格式:100]
11211
20.盲盒平台中余额最多的用户是?[标准格式:AbC1d]
ZrAuyMT1tyo
尝试admin直接到后台登录,数据库数据量不大,直接从数据库找就行
21.盲盒平台可选二级域名有多少个?[标准格式:100]
13
22.盲盒平台的支付密钥是?[标准格式:AbC1d]
LDAWIucAQQGQp7rEE4nSlvzQMKZxTxopqNSwjL8PcAIBbVLJkh
23.盲盒平台中拥有分站的用户名是?[标准格式:123abc]
5432ef
这个题从数据库不太好看出来了,还是要进后台
报错输出密码Hash,然后在数据库中修改pwd即可
24.借贷平台(www.jiedai0rmr.com)中验证码发送接口域名是?[标准格式:http://xxx.xxx.xxx/]
http://api.smsbao.com/
还是从日志找后台URL
删除密码验证部分,任意密码登录,成功进入后台,但是没有发现验证码配置
还是搜索文件内容,发现发送接口类
25.借贷平台后台登录密码的加密算法中共使用了多少次hash函数加密?[标准格式:10]
4
登录逻辑里使用getpass()
函数获取密码
三次md5,一次sha1,总共4次
26.接上题,借贷平台中后台登录的密码额外加密字符串?[标准格式:123ABc+]
26XBAmVMs+n_
27.借贷平台中一共有多少借款订单?[标准格式:100]
43
28.借贷平台中"包玉莲"的收款卡号是?[标准格式:1000]
15056258898
29.借贷平台中贷款最大限额是多少?[标准格式:100]
350000
30.请综合该集群一共有多少个网站数据库?[标准格式:100]
7
数据库都在.200这台主机上,所以宝塔面板拿到root密码Navicat直接连
原文始发于微信公众号(金星路406取证人):电子数据取证每日一练—服务器取证6-K8S集群
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论