Linux 提权思路

简介

  1. 枚举是提权的关键所在,存在多个辅助脚本 : (LinEnumPEASS),

# 查找可写目录
find / -path /proc -prune -o -type d -perm -o+w 2>/dev/null
# 查找可写文件
find / -path /proc -prune -o -type f -perm -o+w 2>/dev/null

本地提权技术

1. 内核漏洞利用

各种 Linux 内核版本都存在内核漏洞利用

# 查看内核级别以及 Linux 操作系统版本
uname -a
cat /etc/lsb-release 
# 查找对应的内核漏洞版本利用即可

2. 易受攻击的服务

在目标主机上可能存在被用来权限提升的服务漏洞,我们可以查看对应服务的版本,彬查找到其对应的 exp 利用即可

3. Cron 作业滥用

Cron 作业通常用户管理任务,在利用该作业时,我们可以查找对应的目标人员 (eg: root) 设置的定时任务,查找目标人员设置的定时任务你是不是可以修改,如果可以,对定时任务进行修改以获取更高的权限

在这里我们可以使用 pspy 工具对正在运行的进程进行查看,当然我们也可以使用其他的命令以获取关于定时任务的更多信息

4. 特殊权限

详细介绍 --> 链接

setuid 权限可以允许用户使用另一个用户的权限执行脚本或程序,通常具有提升的权限,该 setuid 位显示为 s

setgid 权限是另一个特殊的权限,该权限允许我们运行二进制文件,就好像我们是创建它们的组的一部分一样

5. Sudo 滥用

sudo 权限可以授予一个账号,以允许该账户以 root 权限允许一些命令

6. PATH 滥用

PATH 是一个环境变量,指定可执行文件所在的目录集

我们可以通过修改用户的 PATH 变量,来使其运行一个二进制文件

7. 通配符滥用

这里我们使用 tar 作为解释

--checkpoint-action 选项允许在到达检查点时执行 EXEC 操作(即,在 tar 命令执行后运行任意操作系统命令。)通过使用这些名称创建文件,当指定通配符时,-- checkpoint=1 和 --checkpoint-action=exec=sh root.sh 作为命令行选项传递给 tar,实践如下:

8. 凭据搜索

在枚举系统时,我们可以在 配置文件、shell 脚本、用户的 bash 历史文件、备份文件、数据库文件甚至是文本文件中查找,这些凭据有助于权限提升

在凭据搜索中,我们也应该尽可能搜索 SSH 密钥文件

9. 共享库

Linux 程序通常使用动态连接的共享对象库,库包含编译后的代码或其他数据,在 Linux 中存在两种类型的库: 静态共享库由 .a 文件扩展名表示 和 动态共享对象库由 .so 文件扩展名表示,编译时静态库作为程序的一部分不能改变,但是可以修改动态库以控制调用他们的程序执行。

有多种指定动态库位置的方法,因此系统将知道在程序执行时在哪里寻找它们。 这包括编译程序时的 -rpath 或 -rpath-link 标志,使用环境变量 LD_RUN_PATH 或 LD_LIBRARY_PATH,将库放在 /lib 或 /usr/lib 默认目录中,或指定另一个包含库的目录 /etc/ ld.so.conf 配置文件。

LD_PRELOAD环境变量可以在二进制文件执行前加载库,该库的函数优先于默认函数

使用 LD_PRELOAD 权限提升

编写自定义共享库文件并编译

10. 共享对象劫持

我们可以使用 ldd 打印二进制或共享对象所需的共享对象

在上面的输出中我们发现一个非标准库被列为二进制文件的依赖项,在这里我们可以使用 readelf 进行检查

该配置允许从所有用户可写的 /development 文件夹加载库,并且在这个文件夹的库优先于其他文件夹。

可以通过在 /development 中放置恶意库来利用此错误配置,这将优先于其他文件夹,因为首先检查此文件中的条目(在配置文件中出现其他文件夹之前)

编译包含 dbquery 函数的共享对象

11. 特权组

1. LXC/LXD

LXD 类似于 Docker,是 Ubuntu 的容器管理器,安转后,琐碎又的用户都会添加到 LXD 组,该组的成员可以通过创建 LXD 容器提升权限,使其具有特权

LXD 初始化过程 --> 参考文章

2. Docker

将用户置于 docker 组中本质上等同于无需密码即可对文件系统进行 root 级别访问。 docker 组的成员可以生成新的 docker 容器。 一个示例是运行命令 docker run -v /root:/mnt -it ubuntu。 此命令创建一个新的 Docker 实例,其中主机文件系统上的 /root 目录作为卷安装。 一旦容器启动,我们就可以浏览到挂载的目录并为 root 用户检索或添加 SSH 密钥。 这可以用于其他目录,例如 /etc,可用于检索 /etc/shadow 文件的内容以进行离线密码破解或添加特权用户。

3. Disk

磁盘组中的用户可以完全访问 /dev 中包含的任何设备,例如 /dev/sda1,它通常是操作系统使用的主要设备。 拥有这些权限的攻击者可以使用 debugfs 以根级权限访问整个文件系统。 与 Docker 组示例一样,这可用于检索 SSH 密钥、凭据或添加用户。

4.ADM

adm 组的成员能够读取存储在 /var/log 中的所有日志。 这不会直接授予 root 访问权限,但可以用来收集存储在日志文件中的敏感数据或枚举用户操作和运行的 cron 作业。

12.杂项技术

1. 被动流量捕获

我们可以使用 tcpdump 来捕获网络流量,包括在某些情况下以明文形式传递的凭据,存在多种工具:net-credsPCredz 可以用于检查线路上传递的数据,

2.弱 NFS 权限

网络文件系统 NFS 允许用户通过托管在 Unix/Linux 系统上的网络访问共享文件或目录, NFS 使用 TCP/UDP 端口 2049,可以通过发出命令远程列出任何可访问的挂载

NFS 的配置文件: /etc/exports

选项
描述

root_squash

如果使用root用户访问NFS共享,则改为该nfsnobody用户,即非特权账户。root 用户创建和上传的任何文件都将归nfsnobody用户所有,这可以防止攻击者上传带有 SUID 位设置的二进制文件。

no_root_squash

以本地 root 用户身份连接到共享的远程用户将能够以 root 用户身份在 NFS 服务器上创建文件。这将允许创建带有 SUID 位集的恶意脚本/程序。

例如,我们可以创建一个/bin/sh使用本地 root 用户执行的 SETUID 二进制文件。然后我们可以在/tmp本地挂载目录,将 root 拥有的二进制文件复制到 NFS 服务器,并设置 SUID 位。

3. 劫持 Tmux 会话

用户可能会让tmux进程以特权用户身份运行,例如设置了弱权限的 root,这可能会被劫持。这可以通过以下命令来创建新的共享会话并修改所有权来完成。

13. Linux 加固

适当的 Linux 加固可以消除大部分本地权限升级的机会

1. 更新和补丁

过时的 Linux 内核和已知易受攻击的内置和第三方服务版本存在许多快速简单的特权升级漏洞

2. 配置管理

  • 审核可写文件和目录以及任何使用 SUID 位设置的二进制文件。

  • 确保任何 cron 作业和 sudo 权限使用绝对路径指定任何二进制文件。

  • 不要将凭据以明文形式存储在全球可读的文件中。

  • 清理主目录和 bash 历史记录。

  • 确保低权限用户无法修改程序调用的任何自定义库。

  • 删除任何可能增加攻击面的不必要的包和服务。

  • 考虑实施SELinux,它在系统上提供额外的访问控制。

3. 用户管理

限制每个系统上用户账户和管理账户数量并强制执行强密码策略、定期轮换密码以及通过将 /etc/security/opasswd 文件和 PAM 模块一起使用来限制用户重复使用旧密码

PuppetSaltStackZabbixNagios等配置管理自动化工具的模板可以自动执行此类检查,并可用于将消息推送到 Slack 频道或邮箱,以及通过其他方法。远程操作 (Zabbix) 和补救操作 (Nagios) 可用于在一组节点上查找并自动更正这些问题。Zabbix 等工具还具有校验和验证等功能,可用于版本控制和确认敏感二进制文件未被篡改。例如,通过vfs.file.cksum文件。

4. 审计

利用工具 Lynis 审计基于 Unix 的系统,该工具审核系统的当前配置并提供额外的强化提示,同时考虑到各种标准。它可供系统管理员等内部团队以及第三方(审计员和渗透测试员)使用,以获取系统当前安全配置的“基线”

克隆整个 repo 后,我们可以通过键入运行该工具./lynis audit system并收到完整的报告。

工具

https://github.com/wwl012345/Vuln-List

最后更新于

这有帮助吗?