大部分计算机系统都被设计为可以「多个用户一起使用」,其中就产生了管理员用户和普通用户。
普通用户可以理解为使用者,他的权限只可以查看、编辑部分文件;而管理员的权限则可以对全部的文件进行「增删改查」操作,甚至收集主机系统中的敏感信息,修改系统关键配置。
在黑客的攻击渗透中,会想尽办法通过「某个漏洞」获取到目标主机系统上的一个 shell 用于执行系统命令,从而达到控制目标主机的目的。而当他获取到的初始 shell 为低权限用户时,需要想办法提升权限为高权限用户,这个过程就叫做系统权限提升,简称「提权」 。
为什么要提权
一次完整的渗透测试流程,应该包含以下 8 个步骤:
主机发现
> 服务枚举
> 实施攻击
> 获取shell
> 权限提升
> 权限维持
> 内网渗透
> 痕迹清除
可以看到所有的步骤都是围绕「提权」来进行的,高权限 shell 能带来以下好处:
- 对更多的文件进行「增删改查」操作,便于进一步收集主机系统中的敏感信息
- Linux 系统的 root 权限可获取 shadow 文件中的密码 Hash,若内网环境中存在「账户 / 密码复用」的情况,可用于横向扩展
- Windows 系统中的 system 权限可提取内存中的密码 Hash,可进一步用于域渗透
简而言之,提权能为渗透测试后期的工作带来便利。
Linux 提权的 11 种方法
Linux 提权的花样非常多,涉及的技术五花八门,大致分为以下 11 种方法:
一、passwd 文件提权
/etc/passwd
和 /etc/shadow
文件是 Linux 系统登录认证的关键文件,如果系统运维人员对 passwd
或 shadow
文件的内容或权限配置有误,则可以被利用来进行系统提权。通常来说,通过 /etc/passwd
提权的方法有两种:
- 如果具有
/etc/passwd
的 w (写入) 权限,可以直接添加一个 root 权限的用户 - 如果
/etc/passwd
中存储 root 用户密码哈希,可以使用 john 进行破解
二、shadow 文件提权
通过 /etc/shadow
提权的方法有两种:
- 如果具有
/etc/shadow
的 w (写入) 权限,可以直接修改 root 密码 - 如果具有
/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 用户的密码:
- 通过 su 命令爆破 root 密码
- 通过 SSH 协议爆破 root 密码
十一、自动化提权工具
最常用的 Linux 提权自动化辅助工具 —— LinEnum
和 linux-exploit-suggester
,合理的使用自动化脚本,能大大节约我们的时间。
如何学习?
实验楼和爱安全学院合作推出了一门新课 ——《渗透测试方法论之 Linux 提权实战》,详细梳理了以上 11 种 Linux 系统的提权方法。你可以亲手演练,逐一攻破靶机,体验当黑客的感觉,同时掌握提权的方法和技巧。
在课程中,每一种提权场景都会搭配相应的实战实验,帮助你更好的理解其中的原理。
- 反弹回 root 权限的 shell
- SUID 提权示例
- 通配符注入提权示例
- 查找内核漏洞的方法
- 使用内核漏洞 EXP 进行提权
如果你正在备考 OSCP,课程完整覆盖了 OSCP 考试中的各种 Linux 提权场景,能帮助你更好的巩固这部分考试重点。
如果你是渗透测试爱好者,这门课也能帮助你快速掌握 Linux 提权的各种方法。
课程地址:
渗透测试方法论之 Linux 提权实战 www.lanqiao.cn来源:oschina
链接:https://my.oschina.net/u/4400642/blog/4752366