docker-逃逸提权
字数 1244 2025-08-15 21:32:24

Docker逃逸提权技术详解

1. 信息收集阶段

1.1 端口扫描

使用nmap扫描目标系统,发现开放了三个端口:

  • FTP端口(21):允许匿名登录(用户名:Anonymous,密码为空)
  • HTTP端口(80):Web服务
  • 其他端口(未明确说明)

1.2 FTP服务利用

  1. 使用匿名登录FTP:
    ftp <目标IP>
    用户名: Anonymous
    密码: (直接回车)
    
  2. 发现有用信息:字符串"Security@hackNos"

1.3 Web服务渗透

  1. 访问80端口Web服务
  2. 发现"Troubleshool"功能需要认证
  3. 尝试使用发现的字符串作为凭据:
    • 用户名:admin
    • 密码:Security@hackNos
    • 成功登录

2. 初始访问获取

2.1 命令注入漏洞利用

  1. 发现"ping_scan"功能,推测后端使用:
    shell_exec("ping ".$input)
    
  2. 利用管道符"|"进行命令注入:
    <输入命令> | <要执行的命令>
    
  3. 通过命令注入上传并执行Web Shell,获取初始访问权限

2.2 系统用户枚举

  1. 查看可用用户:
    cat /etc/passwd | grep -v "nologin"
    
  2. 发现两个可用用户:root和recon

3. 权限提升尝试

3.1 查找SUID文件

find / -user root -perm -4000 -print 2>/dev/null

未发现可利用的SUID命令

3.2 查找敏感文件

  1. 在/var/opt/目录下发现python.py文件
  2. 该文件是一个Python反弹Shell脚本
  3. 修改并执行该脚本,获取交互式Shell

3.3 密码重用攻击

  1. 发现"Security@hackNos"也是recon用户的密码
  2. 通过SSH直接连接:
    ssh recon@<目标IP>
    密码: Security@hackNos
    
  3. 尝试sudo提权,获取哈希值

4. Docker逃逸提权

4.1 检测Docker环境

  1. 确认系统安装了Docker
  2. 检查可用镜像:
    docker images
    
    发现没有可用镜像

4.2 下载小型镜像

  1. 下载Alpine Linux镜像:
    docker run alpine chroot
    
    (注意:网络连接可能不稳定,可能需要多次尝试)

4.3 挂载根目录实现逃逸

  1. 使用以下命令将主机根目录挂载到容器中:

    docker run -it -v /:/mmmt alpine
    
    • -it:交互式终端
    • -v /:/mmmt:将主机根目录挂载到容器的/mmmt目录
  2. 进入容器后,访问挂载的目录:

    cd /mmmt
    

    现在拥有对主机文件系统的完全访问权限

4.4 提权原理

  • Docker容器默认以root权限运行
  • 通过挂载主机根目录,可以修改主机上的任何文件
  • 典型修改包括:
    • 添加SSH密钥到root的authorized_keys
    • 修改/etc/passwd或/etc/shadow
    • 创建计划任务或服务

5. 防御措施

5.1 防止Docker逃逸

  1. 不要以root用户运行容器:
    docker run -u <username> ...
    
  2. 使用只读挂载:
    docker run -v /host/path:/container/path:ro ...
    
  3. 启用Docker的user namespace功能

5.2 其他安全建议

  1. 禁用FTP匿名登录
  2. 对Web应用输入进行严格过滤
  3. 避免密码重用
  4. 定期检查SUID文件和sudo权限
  5. 监控容器活动

6. 总结

本案例展示了从信息收集到最终通过Docker逃逸实现权限提升的完整过程。关键点包括:

  1. 通过信息泄露获取初始凭据
  2. 利用命令注入获取Shell
  3. 通过密码重用获取更高权限
  4. 最终利用Docker挂载功能实现容器逃逸和root权限获取

这种攻击链强调了纵深防御的重要性,任何一个环节的安全漏洞都可能导致整个系统沦陷。

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