入侵 Linux 系统的惯用姿势:11 种提权方式揭秘

ぃ、小莉子 提交于 2020-11-27 09:18:31

大部分计算机系统都被设计为可以「多个用户一起使用」,其中就产生了管理员用户和普通用户。

普通用户可以理解为使用者,他的权限只可以查看、编辑部分文件;而管理员的权限则可以对全部的文件进行「增删改查」操作,甚至收集主机系统中的敏感信息,修改系统关键配置。

在黑客的攻击渗透中,会想尽办法通过「某个漏洞」获取到目标主机系统上的一个 shell 用于执行系统命令,从而达到控制目标主机的目的。而当他获取到的初始 shell 为低权限用户时,需要想办法提升权限为高权限用户,这个过程就叫做系统权限提升,简称「提权」 。

为什么要提权

一次完整的渗透测试流程,应该包含以下 8 个步骤:

主机发现 > 服务枚举 > 实施攻击 > 获取shell > 权限提升 > 权限维持 > 内网渗透 > 痕迹清除

可以看到所有的步骤都是围绕「提权」来进行的,高权限 shell 能带来以下好处:

  • 对更多的文件进行「增删改查」操作,便于进一步收集主机系统中的敏感信息
  • Linux 系统的 root 权限可获取 shadow 文件中的密码 Hash,若内网环境中存在「账户 / 密码复用」的情况,可用于横向扩展
  • Windows 系统中的 system 权限可提取内存中的密码 Hash,可进一步用于域渗透

简而言之,提权能为渗透测试后期的工作带来便利。

Linux 提权的 11 种方法

Linux 提权的花样非常多,涉及的技术五花八门,大致分为以下 11 种方法:

一、passwd 文件提权

/etc/passwd/etc/shadow 文件是 Linux 系统登录认证的关键文件,如果系统运维人员对 passwdshadow 文件的内容或权限配置有误,则可以被利用来进行系统提权。通常来说,通过 /etc/passwd 提权的方法有两种:

  1. 如果具有 /etc/passwd 的 w (写入) 权限,可以直接添加一个 root 权限的用户
  2. 如果 /etc/passwd 中存储 root 用户密码哈希,可以使用 john 进行破解

二、shadow 文件提权

通过 /etc/shadow 提权的方法有两种:

  1. 如果具有 /etc/shadow 的 w (写入) 权限,可以直接修改 root 密码
  2. 如果具有 /etc/shadow 的 r (读取) 权限,可以通过读取 root 用户密码并使用 john 进行破解

三、SUID 提权

通常情况下,Linux 运行一个程序,是使用当前运行这个程序的用户权限,这种机制是非常合理的,但有一些程序比较特殊,比如我们常用的 ping 命令。

ping 需要发送 ICMP 报文,这个操作需要发送 Raw Socket,而使用 Raw Socket 是需要 root 权限,那怎么才能让普通用户也能使用 ping 命令呢?这时候就要使用到 suid

suid 全称是 Set owner User ID up on execution , 即 —— 使文件在执行时拥有文件所有者的权限。

试想,如果拥有 suid 权限(root)的某文件提供了文件修改、执行系统命令的功能,那就能被攻击者恶意利用来提升系统权限 —— 这就是 SUID 提权的原理。

四、Cron Jobs 提权

Cron Jobs 是 Linux 系统中的「定时任务」,常被用来安排那些需要周期性执行的命令,例如定期备份数据、定期清理缓存等功能,因为使用到 cron 工具(crontab),因此被称作 Cron Jobs。

CronJobs 作为系统管理员最常用的功能之一,本身是非常棒的一个工具,但如果「定时任务」被设定为以更高的用户权限运行(例如 root 用户),则可能会被黑客利用来提权。

五、通配符注入提权

对 Linux 有一定了解的同学应该会知道通配符,通配符是一个字符或一组字符,可以用来替换某些范围 / 类别的字符。在实际的 Linux 提权中,我们使用到比较多的是 *-

六、sudo 提权

在 Linux 中,sudo 命令的作用是让当前用户以 root 或其他用户身份(取决于 /etc/sudoers 文件配置)运行命令,sudo 这个词是「Super User Do root privilege task」的缩写。

/etc/sudoers 就是 sudo 权限的配置文件,该文件用于配置具有 sudo 权限的用户和组,当你使用 sudo 运行任何命令时,Linux 系统会检查 sudoers 文件中配置的用户名或组,若当前用户和当前用户所在的用户组均不在 sudoers 文件中,则不能使用 sudo 命令。

七、查找敏感文件提权

有时候通过查找服务器上的 Web 配置文件,可以发现数据库的连接账户和密码。登录数据库后,通过收集数据库中存储的用户密码,并且管理员如果存在密码复用的情况,即可完成提权

八、跳板用户提权

有时候我们尝试了所有的方法,也无法直接提权到 root 权限,此时可以考虑先提权到其他用户,再通过其他用户的权限提权到 root 权限,而这个中间用户就被我称为 —— 跳板用户。

九、内核漏洞提权

Linux 内核漏洞可能会造成 Linux 系统崩溃、宕机,当前几种方法都无法成功提权时,可以考虑使用内核漏洞来提权。

十、暴力破解提权

最原始但有力的方法 —— 暴力破解。

通常来说,可以通过两种途径暴力破解 root 用户的密码:

  1. 通过 su 命令爆破 root 密码
  2. 通过 SSH 协议爆破 root 密码

十一、自动化提权工具

最常用的 Linux 提权自动化辅助工具 —— LinEnumlinux-exploit-suggester,合理的使用自动化脚本,能大大节约我们的时间。

如何学习?

实验楼和爱安全学院合作推出了一门新课 ——《渗透测试方法论之 Linux 提权实战》,详细梳理了以上 11 种 Linux 系统的提权方法。你可以亲手演练,逐一攻破靶机,体验当黑客的感觉,同时掌握提权的方法和技巧。

在课程中,每一种提权场景都会搭配相应的实战实验,帮助你更好的理解其中的原理。

  • 反弹回 root 权限的 shell
  • SUID 提权示例
  • 通配符注入提权示例
  • 查找内核漏洞的方法
  • 使用内核漏洞 EXP 进行提权

如果你正在备考 OSCP,课程完整覆盖了 OSCP 考试中的各种 Linux 提权场景,能帮助你更好的巩固这部分考试重点。

如果你是渗透测试爱好者,这门课也能帮助你快速掌握 Linux 提权的各种方法。

课程地址:

渗透测试方法论之 Linux 提权实战www.lanqiao.cn图标

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!