删库跑路未遂
惊魂 rm -rf /*
话不多说,先上图。胖友你是否也有过这么脑残的行为!!root
猛如虎!!root
下的 rm
猛如虎!!
冷静思考
心里暗想,这难道要删库跑路吗!搬着指头算了一下,上面装了多少个环境:K8s
集群 + TSDB
+ CDH
;虽然不是生产环境,但这么多系统,多多少少还是有点懵逼加心慌。
简单检查了一下 K8s
集群、TSDB
、 CDH
发现这些应用都还是正常的,祈求上天保佑没删什么重要的文件!🙏🙏🙏
为什么连不上SSH
仔细一对比发现 /bin
目录不见的,这下搞的有点大,难怪 ssh
连不上了,应该是找不到相关的二进制文件了。也有可能是 .ssh
被删除了,必须 ssh
上去验证一下才能确定
现在的问题是怎么恢复 /bin
这个目录,关键是 ssh 不上去;开始思考怎么拿到 shell
;以前研究过一点渗透测试,于是开始思考怎么利用上面的应用软件来搞事。
想办法拿shell权限
还必须是 root
权限;
CDH
之前在安装 CDH
的时候已经做过 SSH
互信,当然我本地不能连上去,做了 SSH
互信也没用。然后把方向调转到了 CDH Web
管理界面,到 web
界面逛了一圈没发现有现成的入口可以利用,先暂时放弃这条路。
K8s
比较下来感觉还是 K8s
希望大一点,我简单试了几次,部署了个测试的 pod
到该节点上去,可以部署成功,但是 ssh
上去连接到的是 Container
内的 ssh
。也操作不了 宿主机。突然一个灵光闪现,把宿主机的根路径挂我我容器里面来,感觉可行,于是就创建了如下的 pod
。
由于一开始我没指定 pod
部署的 node
,老是会把这个 pod
部署到其他节点上去,通过下面的方法查询 node
的 label
,然后进行指定:
# 查询 node 标签
$ kubectl describe node "dbnode2.localdomain"
从结果中选取一个能标识 node
的 label
,我们就选取kubernetes.io/hostname=dbnode2.localdomain
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
kubernetes.io/arch=amd64
kubernetes.io/hostname=dbnode2.localdomain
kubernetes.io/os=linux
最终 pod
的配置如下:
apiVersion: v1
kind: Pod
metadata:
name: privileged-pod
namespace: default
spec:
containers:
- name: busybox
image: busybox
resources:
limits:
cpu: 200m
memory: 100Mi
requests:
cpu: 100m
memory: 50Mi
stdin: true
securityContext:
privileged: true
volumeMounts:
- name: host-root-volume
mountPath: /host
readOnly: true
volumes:
- name: host-root-volume
hostPath:
path: /
hostNetwork: true
hostPID: true
restartPolicy: Never
nodeSelector:
kubernetes.io/hostname: dbnode2.localdomain
# 部署pod
kubectl create -f privileged-pod.yaml
# 查看,pod 已经在运行了
kubectl get pods -o=wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
privileged-pod 1/1 Running 0 8s 10.115.0.223 dbnode2.localdomain <none> <none>
# ssh 连接
kubectl exec -ti privileged-pod sh
# 查看挂载目录,果然挂上来了
/ # ls /host
bin boot data1 data2 data3 data4 dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
分析到底是缺了什么导致 ssh
不能连接,进入 .ssh
目录发现文件还在,先还原 /bin
看看,发现该目录上只读的。刚燃起的信心又凉了半截,仔细一看发现 readOnly: true
果断改成 readOnly: false
。
# 发现没有 w 权限,执行创建还是没权限
/ # ls -na
dr-xr-xr-x 21 0 0 4096 Oct 29 09:29 host
# 添加权限然后再创建然后成功了
/ # chmod u+w /host
幸运的是发现 /bin
原来是 /usr/bin
的一个软连接,搞半天删了个软件链接,看来机会大大的有,于是新建一个软连接
ln -s bin usr/bin
然后在 ssh
试一下,发现成功的了!!卧槽感动的想哭!!再次提醒自己一边 root
猛如虎!rm
猛如虎!这次真的不用跑了。
总结
- 最小权限原则无论是什么时候都适用,就算因为 0day 被攻破了,黑客拿到的是非 root 权限,那么黑客能做的事业有限。
- rm 必须谨慎使用,特别是加上 -rf 两个参数,特别是在 root 权限下执行。
- 不要心存侥幸,墨菲定律,凡事有几率的事情都一定会发生。
本文由 zealzhangz 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:
2019/10/30 10:18
666666,厉害了