gmsmeghana/Linux-Permissions-Privilege-Escalation

GitHub: gmsmeghana/Linux-Permissions-Privilege-Escalation

一个 Linux 文件权限与权限提升的实战教学项目,通过实验演示 SetUID 滥用、PATH 劫持和 capability 泄露等提权技术。

Stars: 0 | Forks: 0

# Linux 文件权限与权限提升 — SetUID、umask 与 Capability 泄露 深入探讨 **Linux 文件权限管理**和**权限提升技术**,包括 SetUID 滥用、PATH 劫持和 capability 泄露。涵盖 Linux 访问控制的底层机制,以及如何利用配置不当获取提升的权限。 ## 工具与环境 | 工具 | 用途 | |------|---------| | Ubuntu Linux | 实验环境 | | chmod / chown | 权限管理 | | umask | 默认权限控制 | | SetUID binaries | 权限提升途径 | | GCC | 编译 exploit 代码 | ## Part A — Linux 文件权限 ### 第 1 步 — 文件所有权与基本权限 在多个用户账户下创建文件和目录,以观察所有权和权限的继承: ![screenshot-01](https://raw.githubusercontent.com/gmsmeghana/Linux-Permissions-Privilege-Escalation/main/screenshots/screenshot-01.png) ![screenshot-02](https://raw.githubusercontent.com/gmsmeghana/Linux-Permissions-Privilege-Escalation/main/screenshots/screenshot-02.png) ![screenshot-03](https://raw.githubusercontent.com/gmsmeghana/Linux-Permissions-Privilege-Escalation/main/screenshots/screenshot-03.png) **所有权分析:** - `Hello world` — 属于 `user1`,组为 `users` - 执行 `chown` 后 — 所有权转移给 `user2`,组为 `users` ### 第 2 步 — 目录权限分析 检查了多个用户家目录的权限: ![screenshot-04](https://static.pigsec.cn/wp-content/uploads/repos/cas/f0/f01fcd206229f1cbe0629b55b0ef23ec7c7a231e8640c03c0aadb44a14f8ec0a.png) ![screenshot-05](https://static.pigsec.cn/wp-content/uploads/repos/cas/e4/e4ed04390014f1f6df0f963fbf5ab1b68a2e9f02a99c896abfd2f52f708b8ade.png) | 目录 | 权限 | 含义 | |-----------|-------------|---------| | `/home/user1` | `drwxr-xr-x` | 所有者:完全访问;组/其他人:读取 + 执行 | | `/home/user2` | `drwxrwx---` | 所有者 + 组:完全访问;其他人:无访问权限 | | `/home/test` | `drwxr-xr-x` | 所有者:完全访问;组/其他人:读取 + 执行 | ### 第 3 步 — 跨用户访问测试 测试了在不同权限设置下,`user1` 是否能访问 `user2` 的家目录: ![screenshot-06](https://static.pigsec.cn/wp-content/uploads/repos/cas/aa/aacc98950fe478bc1e4bc11a7d4f1acb3269f2857d0d4a4dea568b04d9f49623.png) ![screenshot-07](https://static.pigsec.cn/wp-content/uploads/repos/cas/a3/a3dae064f04fa3b4d55e7f98f389b2877d1f02bf210663be15a879a78b99cb6f.png) ![screenshot-08](https://static.pigsec.cn/wp-content/uploads/repos/cas/96/96b97bfd56b340d2df3a4de94d9c7e986a5647a89347a7f9bca4203c174ca31e.png) ![screenshot-09](https://static.pigsec.cn/wp-content/uploads/repos/cas/91/91d4665c9192a607a609e15d64644474a05e9e18097b7fbc52db0700174f6351.png) ![screenshot-10](https://static.pigsec.cn/wp-content/uploads/repos/cas/ac/ac7e76b098939c7b178daf5b88026ee72dbb792ef0879692fa39f905d7be3c43.png) **发现:** - 当组权限允许时,`user1` 可以 `cd` 进入 `/home/user2` - 执行 `chmod 700 /home/user2` 后,访问被正确拒绝 - 将权限修改为 `755` 后,`user1` 可以列出目录内容并创建文件 ### 第 4 步 — 文件读写权限测试 测试了用户之间对共享文件的读写访问权限: ![screenshot-11](https://static.pigsec.cn/wp-content/uploads/repos/cas/bd/bd0b0b2213e6787cec5bb4f1c2528ee6c4ce0f4cdfcb9ddb666e198351801166.png) ![screenshot-12](https://static.pigsec.cn/wp-content/uploads/repos/cas/e4/e4964a3151d488766d8aa8dd323732bf5332de9f838fcb097a4981214e8451d4.png) ![screenshot-13](https://static.pigsec.cn/wp-content/uploads/repos/cas/eb/ebed6416c245f6fc6d7e75fadd35ff0e44017ef2ef29309ef00cf091200b916c.png) ![screenshot-14](https://static.pigsec.cn/wp-content/uploads/repos/cas/a6/a6d25b6803e6143806f669ff324054934c0f44c634ceb43b9b0299d026f572fb.png) **结果:** 如果没有写权限,`user1` 无法修改 `file1`。`user2`(所有者)保留完全访问权限。 ### 第 5 步 — 符号链接 创建并分析了符号链接 — 确认 symlink 继承目标文件的权限,而不是拥有自己的权限: ``` lrwxrwxrwx -> /test/temp/hello.txt ``` 无论 symlink 显示的权限如何,`hello.txt` 的实际权限始终为 `-rw-rw-r--`。 ![screenshot-15](https://static.pigsec.cn/wp-content/uploads/repos/cas/7a/7a5f618696e56f0033e1cbccc11f3e2a322cfcf8874089e0f84956df983feee5.png) ![screenshot-16](https://static.pigsec.cn/wp-content/uploads/repos/cas/2d/2d67a1f4ac61dfe03ff5b28af23d5b589d969b5cb78a1e516d710d3ad5b9f522.png) ![screenshot-17](https://static.pigsec.cn/wp-content/uploads/repos/cas/13/1368d031035f39347ced0163fc510478adf726b21d5c9b5098b897fa0fa8c065.png) ### 第 6 步 — umask — 默认权限控制 测试了不同 `umask` 值对新创建文件和目录的影响: ![screenshot-18](https://static.pigsec.cn/wp-content/uploads/repos/cas/4f/4f705b2062f0638abf73de0a633fdc66ff27b6b3dc4256064d6ed4293abff82f.png) | umask | 新文件权限 | 新目录权限 | |-------|---------------------|--------------------------| | `0002`(默认) | `664` (rw-rw-r--) | `775` (rwxrwxr-x) | | `0077`(限制) | `600` (rw-------) | `700` (rwx------) | | `0000`(开放) | `666` (rw-rw-rw-) | `777` (rwxrwxrwx) | **`umask 0000` 的安全风险:** 所有用户都可以读取和修改任何新文件 — 这在多用户环境中是严重的配置失误。对于敏感文件,最佳实践是使用 `umask 0022` 或 `0077`。 ![screenshot-19](https://static.pigsec.cn/wp-content/uploads/repos/cas/b9/b98402ba678b3d3e2749aa4d219694801be6ae6e2875e521d90c4ab4961785cb.png) ![screenshot-20](https://static.pigsec.cn/wp-content/uploads/repos/cas/fb/fbb13594ce9aab11ac03cff13ac80a718992c59c1fcf20153f4cd2ccec00ee39.png) ![screenshot-21](https://static.pigsec.cn/wp-content/uploads/repos/cas/79/796e09c242d47d7ed2130e73f05a1eecaf2db374ab0f079b275c8ea68d935a9b.png) ## Part B — 权限提升 ### 第 1 步 — SetUID Binaries **SetUID** 允许程序以文件所有者的权限运行,而不是执行用户的权限。需要 SetUID 的关键系统 binaries: | Binary | 为什么需要 SetUID | |--------|---------------------| | `passwd` | 必须写入 `/etc/shadow`(仅限 root) | | `chsh` | 必须编辑 `/etc/passwd`(仅限 root) | | `su` | 必须对特权资源进行身份验证 | | `sudo` | 必须检查 `/etc/sudoers` 以获取提升的权限 | 如果没有 SetUID,普通用户将无法执行所有这些操作。 ![screenshot-22](https://static.pigsec.cn/wp-content/uploads/repos/cas/45/45c7d4c42d71d6a5d5934ff5e1e87f4aea860bab35523b7abcc09fa6a5acbd95.png) ![screenshot-23](https://static.pigsec.cn/wp-content/uploads/repos/cas/6c/6c50d60fe63f45d979259d19eed412d70652e8711a1ecc76af84613712971dcd.png) ![screenshot-24](https://static.pigsec.cn/wp-content/uploads/repos/cas/e4/e4c6328b9725e62209ee810692a0f61a5990f4d995f9266d31a1521f758c28b1.png) ![screenshot-25](https://static.pigsec.cn/wp-content/uploads/repos/cas/ec/ec2be3535508c751b3039d0e943c6ea2c66dcec4fee2715b2e407910a060a340.png) ![screenshot-26](https://static.pigsec.cn/wp-content/uploads/repos/cas/0c/0cd00e526c2eaf219f6f30eb1226a6377c298358d5e0d1e95c8375299b67e763.png) ![screenshot-27](https://static.pigsec.cn/wp-content/uploads/repos/cas/28/28820ba2a3ad179aaf9d4d535d61c1bcd8af94a37dde6d730529cffa37b2f0fb.png) **结果:** Bash 会检测其是否在 SetUID 环境中运行,并自动放弃提升的权限 — 这是一种内置保护机制,可防止以这种方式直接获取 root shell 访问权限。 ### 第 2 步 — 通过 SetUID 进行 PATH 劫持 滥用了一个在没有绝对路径的情况下调用 `ls` 的 SetUID 程序。通过修改 `PATH` 变量,使其指向一个名为 `ls` 的恶意 binary(实际上是一个 shell),从而获得了提升的权限: ![screenshot-28](https://static.pigsec.cn/wp-content/uploads/repos/cas/18/185fbfdcfe860d722b9ffa8e07d0537074f4345ec13ec50d87751647d0fdf7f6.png) ![screenshot-29](https://static.pigsec.cn/wp-content/uploads/repos/cas/71/718583d290bb4fea90eb003f29088a86a0e96636f7dfdb2f25f3456006539df7.png) ![screenshot-30](https://static.pigsec.cn/wp-content/uploads/repos/cas/2d/2d2c731adbed72effa51aacecaaf474ff3e2bcdbb7e13146120a0c88039fefb8.png) ![screenshot-31](https://static.pigsec.cn/wp-content/uploads/repos/cas/29/293bb074e12401d15308df053aaa373072f2b7cd5f6857bc8122f9d33ebb9f08.png) ![screenshot-32](https://static.pigsec.cn/wp-content/uploads/repos/cas/60/607586bbaf217d0db7766ed8981d984f693631ed987892ef418f311b52ae81df.png) **结果:** 该程序执行了恶意的 `ls` binary 而非真正的 `ls`,从而生成了一个 root shell。这说明了为什么 SetUID 程序在进行系统调用时必须始终使用**绝对路径**。 ![screenshot-33](https://static.pigsec.cn/wp-content/uploads/repos/cas/5c/5c1b6c1862cac40cdae4ab67d535f8891c05bcb5f810dfdb6816e705b4d27b6a.png) ### 第 3 步 — Capability 泄露 分析了一个存在漏洞的 SetUID C 程序(`hack2.c`),该程序在放弃权限后会泄露文件描述符的访问权限: ![screenshot-34](https://static.pigsec.cn/wp-content/uploads/repos/cas/57/57b1c75dd66f3c43ec152d319c29187978cb7550d765ac4dea03cbd1b2e3b55a.png) ![screenshot-35](https://static.pigsec.cn/wp-content/uploads/repos/cas/cb/cb53efcbb08bd3944c3b995561d03f078b67c82b14b8a968380edff77f1b639f.png) ![screenshot-36](https://static.pigsec.cn/wp-content/uploads/repos/cas/aa/aa6d75837554f732698dac13693c47824ad982b4d1b5df931bab37d159a8310b.png) **漏洞解析:** 1. 程序以读/写权限打开 `/etc/zzz`(属于 root) 2. 使用 `setuid(getuid())` 放弃 root 权限 3. Fork 一个子进程 — 该进程**继承了打开的文件描述符** 4. 子进程(现在以普通用户身份运行)向 `/etc/zzz` 写入 `"Malicious Data"` **根本原因:** 程序在放弃权限之前未能关闭文件描述符。即使在父进程放弃其提升权限之后,子进程仍保留对特权资源的访问权限 — 这是一个典型的 **capability 泄露**漏洞。 ## 关键要点 - 文件权限配置失误是最常见的 Linux 权限提升途径之一 - SetUID binaries 必须始终使用绝对路径,以防止 PATH 劫持攻击 - `umask 0000` 是一个严重的安全风险 — 应始终使用限制性的默认配置 - 在放弃权限之前,必须显式关闭文件描述符,以防止 capability 泄露 - 了解 Linux 访问控制的工作原理对于系统加固和渗透测试都是至关重要的 ## 免责声明 所有权限提升技术均在受控、隔离的实验环境中进行。这些技术只能用于您拥有或获得明确授权进行测试的系统。
标签:子域名枚举, 应用安全, 权限管理, 模型越狱, 特权提升, 系统安全, 自动化部署