网上的文章有很多,只是复现时有些细节不清晰,本文尽可能详尽叙述
注:利用脚本没有采用docker库,直接使用的http请求
环境配置
安装Docker环境
Docker安装按照官方文档安装就好
当前环境:
靶机:Ubuntu16.04 + Docker 19.03.13
IP:172.16.180.160
1 | root@ubuntu:~# docker version |
攻击机:黑苹果(10.15.3)/可替换为Kali + Python3.7.7
IP:192.168.15.110
配置Docker Remote API
1 | #备份配置文件 |
如下图所示(14-15行):
之后执行命令:
1 | #加载配置文件 |
若无错误提示,则代表启动成功
请勿在生产环境中执行上述操作!
查看运行状态
浏览器访问:
http://172.16.180.160:8888/v1.25/images/json
可获得镜像列表,如下图所示:
其他API:
比如访问以下链接可以获得版本等信息
http://172.16.180.160:8888/v1.25/info
http://172.16.180.160:8888/version
复现步骤
攻击者会通过发送构造的http请求执行创建容器,启动容器,删除容器等操作
并且可以通过修改 /root/.ssh/authorized_keys或者/etc/crontab计划任务获得宿主机shell
查看攻击机用户公钥
1 | cat /Users/iqiqiya/.ssh/id_rsa.pub |
创建容器并获得容器ID
公钥复制到CMD那里,使用镜像alpine:latest(任意一个镜像都可以的)
1 | #!/usr/bin/env python |
启动该容器
上面输出的Id就是container_Id
1 | #!/usr/bin/env python |
返回是空的,开启成功
SSH登录
1 | #攻击机执行 |
脚本编写
1 | #!/usr/bin/env python |
问题解决记录
Q1:没有.ssh/id_rsa.pub这个文件或路径?
A1:ssh-keygen -c 生成
Q2:ssh无法登陆?
A2:靶机需要开启ssh登录,步骤如下
1 | 安装ssh服务 |