<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Docker逃逸 on root@wanth3f1ag</title>
    <link>https://wanth3f1ag.top/tags/docker%E9%80%83%E9%80%B8/</link>
    <description>Recent content in Docker逃逸 on root@wanth3f1ag</description>
    <image>
      <title>root@wanth3f1ag</title>
      <url>https://wanth3f1ag.top/images/avatar.jpg</url>
      <link>https://wanth3f1ag.top/images/avatar.jpg</link>
    </image>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Thu, 28 May 2026 20:27:36 +0800</lastBuildDate>
    <atom:link href="https://wanth3f1ag.top/tags/docker%E9%80%83%E9%80%B8/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Docker逃逸学习</title>
      <link>https://wanth3f1ag.top/posts/Docker%E9%80%83%E9%80%B8%E5%AD%A6%E4%B9%A0/</link>
      <pubDate>Thu, 28 May 2026 20:27:36 +0800</pubDate>
      <guid>https://wanth3f1ag.top/posts/Docker%E9%80%83%E9%80%B8%E5%AD%A6%E4%B9%A0/</guid>
      <description>&lt;h1 id=&#34;前言&#34;&gt;前言&lt;/h1&gt;
&lt;p&gt;趁着这几天刚出完公司的题，抽出时间看了一下docker逃逸方面的东西，这里的话主要就是放攻击手法了，一些基础的概念就懒得赘述了&lt;/p&gt;
&lt;h1 id=&#34;如何判断虚拟环境类型&#34;&gt;如何判断虚拟环境类型&lt;/h1&gt;
&lt;p&gt;参考：https://yuy0ung.github.io/blog/%E4%BA%91%E5%AE%89%E5%85%A8/%E8%AF%86%E5%88%AB%E8%99%9A%E6%8B%9F%E6%9C%BAdocker%E5%92%8Ck8s%E9%9B%86%E7%BE%A4%E7%8E%AF%E5%A2%83/&lt;/p&gt;
&lt;p&gt;通常在getshell之后，我们都需要考虑一个问题：我们是真的拿到目标机器的shell了还是只是处于机器中虚拟环境里？前者的话肯定直接做一些比如提权，内网穿透，横向移动，权限维持等内网渗透的手法，但是如果我们此时是处在机器中的虚拟环境中的话，我们需要先判断该虚拟环境的类型&lt;/p&gt;
&lt;p&gt;通常情况下，shell的虚拟环境可能有三个类型：虚拟机，Docker，k8s。这三种类型对应着三种不同的攻击面：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;虚拟机&lt;/strong&gt;：通常考虑横向移动来扩大攻击效果&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Docker&lt;/strong&gt;：通常考虑容器逃逸到宿主机&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;K8s&lt;/strong&gt;：通常先尝试接管集群，以获取对容器和集群资源的完全控制（注意：K8s其实本质上也是跑容器，只不过不一定用 Docker，现代 K8s 常见运行时是 containerd / cri-o）&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;当然，仍有一些特殊的情况比如：Docker运行在虚拟机里，这种情况在这里就不讲述了&lt;/p&gt;
&lt;h2 id=&#34;查看主机名和进程&#34;&gt;查看主机名和进程&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hostname	&lt;span class=&#34;c1&#34;&gt;#查看主机名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ps aux		&lt;span class=&#34;c1&#34;&gt;#显示系统上所有用户的详细进程信息&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Docker 默认 hostname 通常是容器 ID 的前 12 位（不绝对），PID1非系统进程，可初步判断当前为容器环境&lt;/p&gt;
&lt;p&gt;如果是在普通虚拟机或物理机里，PID 1 通常是：systemd 或者 init&lt;/p&gt;
&lt;p&gt;如果是在容器里，PID 1 可能是：&lt;/p&gt;
&lt;p&gt;bash，sh，python，node，java，nginx，tini，supervisord&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://wanth3f1ag.top/posts/Docker%E9%80%83%E9%80%B8%E5%AD%A6%E4%B9%A0/image/Pasted%20image%2020260604204425.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;但是注意：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;有些容器也会跑 systemd&lt;/li&gt;
&lt;li&gt;有些轻量 VM 也可能不是 systemd&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以 PID 1 只是作为初步的判断&lt;/p&gt;
&lt;h2 id=&#34;检查根目录下dockerenv文件&#34;&gt;检查根目录下.dockerenv文件&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls -la /.dockerenv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;通过判断根目录下的&lt;code&gt;.dockerenv&lt;/code&gt;文件是否存在，确认当前环境是否为容器环境。&lt;/p&gt;
&lt;p&gt;需要注意：有些 Docker 容器可能没有这个文件，甚至有些镜像为了伪装会删除掉这个文件&lt;/p&gt;
&lt;h2 id=&#34;看-cgroup-信息&#34;&gt;看 cgroup 信息&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat /proc/1/cgroup
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  或者：
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat /proc/self/cgroup
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这个文件是一个 &lt;strong&gt;内核提供的虚拟文件，里面包含了PID 1 这个进程属于哪些 cgroup&lt;/strong&gt;，而cgroup 是 Linux 用来做&lt;strong&gt;资源隔离和限制&lt;/strong&gt;的机制，通常用于限制一个进程/容器的cpu，内存等资源使用&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
