docker-逃逸提权
字数 1244 2025-08-15 21:32:24
Docker逃逸提权技术详解
1. 信息收集阶段
1.1 端口扫描
使用nmap扫描目标系统,发现开放了三个端口:
- FTP端口(21):允许匿名登录(用户名:Anonymous,密码为空)
- HTTP端口(80):Web服务
- 其他端口(未明确说明)
1.2 FTP服务利用
- 使用匿名登录FTP:
ftp <目标IP> 用户名: Anonymous 密码: (直接回车) - 发现有用信息:字符串"Security@hackNos"
1.3 Web服务渗透
- 访问80端口Web服务
- 发现"Troubleshool"功能需要认证
- 尝试使用发现的字符串作为凭据:
- 用户名:admin
- 密码:Security@hackNos
- 成功登录
2. 初始访问获取
2.1 命令注入漏洞利用
- 发现"ping_scan"功能,推测后端使用:
shell_exec("ping ".$input) - 利用管道符"|"进行命令注入:
<输入命令> | <要执行的命令> - 通过命令注入上传并执行Web Shell,获取初始访问权限
2.2 系统用户枚举
- 查看可用用户:
cat /etc/passwd | grep -v "nologin" - 发现两个可用用户:root和recon
3. 权限提升尝试
3.1 查找SUID文件
find / -user root -perm -4000 -print 2>/dev/null
未发现可利用的SUID命令
3.2 查找敏感文件
- 在/var/opt/目录下发现python.py文件
- 该文件是一个Python反弹Shell脚本
- 修改并执行该脚本,获取交互式Shell
3.3 密码重用攻击
- 发现"Security@hackNos"也是recon用户的密码
- 通过SSH直接连接:
ssh recon@<目标IP> 密码: Security@hackNos - 尝试sudo提权,获取哈希值
4. Docker逃逸提权
4.1 检测Docker环境
- 确认系统安装了Docker
- 检查可用镜像:
发现没有可用镜像docker images
4.2 下载小型镜像
- 下载Alpine Linux镜像:
(注意:网络连接可能不稳定,可能需要多次尝试)docker run alpine chroot
4.3 挂载根目录实现逃逸
-
使用以下命令将主机根目录挂载到容器中:
docker run -it -v /:/mmmt alpine-it:交互式终端-v /:/mmmt:将主机根目录挂载到容器的/mmmt目录
-
进入容器后,访问挂载的目录:
cd /mmmt现在拥有对主机文件系统的完全访问权限
4.4 提权原理
- Docker容器默认以root权限运行
- 通过挂载主机根目录,可以修改主机上的任何文件
- 典型修改包括:
- 添加SSH密钥到root的authorized_keys
- 修改/etc/passwd或/etc/shadow
- 创建计划任务或服务
5. 防御措施
5.1 防止Docker逃逸
- 不要以root用户运行容器:
docker run -u <username> ... - 使用只读挂载:
docker run -v /host/path:/container/path:ro ... - 启用Docker的user namespace功能
5.2 其他安全建议
- 禁用FTP匿名登录
- 对Web应用输入进行严格过滤
- 避免密码重用
- 定期检查SUID文件和sudo权限
- 监控容器活动
6. 总结
本案例展示了从信息收集到最终通过Docker逃逸实现权限提升的完整过程。关键点包括:
- 通过信息泄露获取初始凭据
- 利用命令注入获取Shell
- 通过密码重用获取更高权限
- 最终利用Docker挂载功能实现容器逃逸和root权限获取
这种攻击链强调了纵深防御的重要性,任何一个环节的安全漏洞都可能导致整个系统沦陷。