0x00前言
随着Docker的广泛应用,获取一个云端服务器的控制权限之后,检测目标是一个真实机器还是在Docker容器环境中变得越来越重要
0x01Docker检测
Docker基于Linux的LXC提供虚拟化服务,为了对不同Docker容器(Container)进行有效的控制,需要在容器内初始化一些配置文件,因此,可以通过检测这类的配置文件检测是Docker容器内部还是在真实机器。
基于/proc/self/cgroup内容是否包含”docker”的检测(左边Docker容器环境,右边真机环境)
基于/proc/self/cpuset内容是否包含”docker”的检测(左边Docker容器环境,右边真机环境)
基于是否包含存在”/.dockerenv”的检测(左边Docker容器环境,右边真机环境)
0x02检测脚本
先看看检测效果(左边Docker容器环境,右边真机环境)
源码如下,为了突出检测结果,增加了字体颜色修改1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
isDocker(){
if [ $(cat /proc/self/cgroup|grep -c "docker") -gt 1 ];
then
echo -e "\033[31mThis is a Docker container\033[0m";
elif [ $(cat /proc/self/cpuset|grep -c "docker") -gt 1 ];
then
echo -e "\033[31mThis is a Docker container\033[0m";
elif [ -f "/.dockerenv" ];
then
echo -e "\033[31mThis is a Docker container\033[0m";
else
echo -e "\033[34mThis is not a Docker container\033[0m";fi
}
isDocker
使用方法1
wget http://blackwolfsec.cc/static/code/isDocker.sh -O isDocker.sh && chmod +x isDocker.sh&& ./isDocker.sh
如果不喜欢上面下载bash脚本的方式,也可以直接复制下面的命令到shell下执行检测1
if [[ $(cat /proc/self/cgroup|grep -c "docker") -gt 1 || $(cat /proc/self/cpuset|grep -c "docker") -gt 1 || -f "/.dockerenv" ]];then echo -e "\033[31mThis is a Docker container\033[0m";else echo -e "\033[34mThis is not a Docker container\033[0m";fi