Loading ...
快速识别虚拟主机、Docker 和 K8s 集群环境

一、基础概念

  1. 虚拟主机
    • 定义:一台物理服务器上运行的多个虚拟实例,各有独立环境和资源,常用于 Web 托管。
    • 注意:与 “虚拟机(VM)” 不同,虚拟机是包含操作系统、软件和硬件的完整虚拟化系统,可运行多个操作系统实例。
  2. Docker
    • 一种容器化虚拟化技术,将应用及依赖打包成独立轻量环境,支持快速部署、高效运行和跨平台。当容器以特权模式(--privileged)启动时,容器内 root 用户权限接近宿主机 root,可能绕过隔离机制实现逃逸。
  3. K8s(Kubernetes)
    • 开源容器编排平台,通过自动化部署、扩展和管理容器化应用,提供集群管理、服务发现、负载均衡等功能,实现高可用性和灵活性。

二、识别思路

在获取 shell 后,需根据环境类型采取针对性措施:
  • 虚拟主机:优先横向移动以扩大攻击范围。
  • Docker:先尝试容器逃逸,若为特权模式容器,可通过挂载宿主机分区、修改定时任务等方式突破隔离;成功逃逸后再进行内网横向移动。
  • K8s:目标是接管集群,获取对容器和集群资源的完全控制。

三、具体识别方法

1. 先判断是否采用虚拟化技术

使用命令:systemd-detect-virt
  • 作用:识别系统是运行在虚拟机(VM)、容器还是裸机上。

2. 针对性识别环境类型

(1)查看主机名和进程

  • 容器特征:主机名默认是随机字符串,且 PID1(进程 ID 为 1 的进程)非系统进程。
  • 命令:
    • hostname:查看主机名。
    • ps aux:显示所有用户的详细进程信息,检查 PID1 是否为系统进程。

(2)利用 cgroup 信息差异

  • 原理:cgroup 用于控制进程资源,不同环境的 cgroup 信息不同。
  • 命令:
    • cat /proc/1/cgroup:查看 PID1 进程的 cgroup 信息,判断环境类型。
    • grep 'docker' /proc/1/cgroup:针对性查找是否包含 “docker” 字符串,识别 Docker 环境。

(3)检查根目录下.dockerenv 文件

  • 容器特征:Docker 容器根目录通常存在.dockerenv 文件。
  • 命令:ls -alh /dockerenv:查看该文件是否存在,确认是否为容器环境。

(4)检查挂载信息

  • 命令:mount | grep '/type':列出所有已挂载文件系统,筛选包含 /type 路径的信息,推测环境类型。若发现宿主机分区(如 /dev/sda1)挂载到容器内(如 /host),可能为特权模式容器。

(5)查看硬盘信息

  • 命令:fdisk -l:列出系统所有磁盘分区信息,通过硬盘特征推断是否为容器环境。在特权容器中,此命令可直接查看宿主机磁盘分区(如 /dev/sda1 为 Linux 分区)。

(6)获取文件系统和挂载点信息

  • 命令:df -h:显示文件系统的磁盘使用情况和挂载点,辅助判断是否为容器环境。

(7)检查环境变量

  • 命令:env:显示当前系统所有环境变量,通过特定环境变量信息识别环境类型。
暂无评论

发送评论 编辑评论


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