Linux 提权原理及10种提权姿势详解 | OSCP 备考指南 – 作者:爱安全学院iSecurityClub

图片[1]-Linux 提权原理及10种提权姿势详解 | OSCP 备考指南 – 作者:爱安全学院iSecurityClub-安全小百科

蓝桥教育」是国内 TOP 的以在线实验为核心的教育平台,这篇文章摘录自《渗透测试方法论之 Linux 提权》,目前该课程已上线「蓝桥教育平台」,其中梳理了 Linux 提权的十种方法,并且每个提权场景都会搭配相应的在线实战实验,能帮助你更好的理解提权的原理,掌握提权的方法和技巧。

  • 如果你正在备考 OSCP,本课程完整覆盖 OSCP 考试中的各种 Linux 提权场景,能帮助你更好的巩固这部分考试重点。
  • 如果你是渗透测试爱好者,本课程能帮助你快速掌握 Linux 提权的各种方法。

别忘了专属优惠码(7MaDpzNc)还能折上折哦!

一、基础理论知识

在开始学习 Linux 提权之前,我们需要先理解以下三个问题:

  • 什么是系统提权?
  • 为什么获取的 shell 会有高低权限的区别?
  • 为什么我们需要进行提权?

只有理解了以上的三个问题,才能做到在后续学习具体的提权技巧时,能够知其然并知其所以然。

0x1 什么是提权?

首先我们来看一下什么是系统提权?

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

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

图片[2]-Linux 提权原理及10种提权姿势详解 | OSCP 备考指南 – 作者:爱安全学院iSecurityClub-安全小百科

在渗透测试前期,我们会想尽办法通过「某个漏洞攻击」获取到目标主机系统上的一个 shell 用于执行系统命令,从而达到控制目标主机的目的,也就是图中的第4步。

当我们获取到的初始 shell 为低权限用户时,需要想办法提升权限为高权限用户,这个过程就叫做系统权限提升,简称「提权」 (对应图中第5步)。

0x2 为什么 shell 会有高低权限的区别?

有些同学会有一个疑惑:为什么同样是通过漏洞攻击获取到的 shell ,有时候是低权限,有时候又是高权限呢?

下面以一个简单的例子来说明:

图片[3]-Linux 提权原理及10种提权姿势详解 | OSCP 备考指南 – 作者:爱安全学院iSecurityClub-安全小百科

通常情况下 Web 服务架构如上图所示:后端 linux 服务器通过 Tomcat 中间件提供 Web 服务

如今的计算机操作系统都是基于多用户设计的,通常一台计算机上同时存在着多个不同权限的系统用户,而在 Linux 服务器上,每个服务都需要先赋予某个用户权限才能运行。

用户权限定义:「用户权限」是用来控制某个系统用户被允许做哪些操作和不允许做哪些操作。

假设 tomcat 服务以普通用户www-data的权限运行并提供 Web 服务,此时如果黑客通过 Web 漏洞获取到 shell,此 shell 就是一个www-data用户权限的 shell——此时就需要提权。

反之,若 tomcat 是以root用户权限运行,那黑客获取到的 shell 就是 root 权限。

0x3 为什么要提权?

在渗透测试中,高权限 shell 能带来以下好处:

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

简而言之,获取更高权限的 shell,能为渗透测试后期的工作带来便利。

二、Linux 提权方法

Linux 常用的提权方法有下面几种:

  1. passwd文件提权
  2. shadow文件提权
  3. SUID可执行文件提权
  4. Cron Jobs定时任务提权
  5. 通配符注入提权
  6. sudo滥用提权
  7. 敏感文件提权
  8. 跳板用户提权
  9. Linux内核漏洞提权
  10. 暴力破解提权

0x1 Passwd 文件提权

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

在本章中,我们主要探讨/etc/passwd文件的提权方法, 利用/etc/shadow提权的方法会在下一章节讨论。

本章节实验需要有 Linux 操作系统文件权限方面的基础知识,如果你对 Linux 文件权限尚不了解,建议先学习课程「Linux 基础入门」实验 3——用户及文件权限管理。

知识点

  • Linux 登录认证过程
  • /etc/passwd文件含义
  • 通过 /etc/passwd文件提权

「理解 /etc/passwd 文件含义」

我们先了解一下 /etc/passwd内容的含义:

Linux 密码信息保存在两个文件中,分别为:/etc/passwd和 /etc/shadow

/etc/passwd文件用于保存用户信息,每一行代表一个用户,每一行通过冒号 :分为七个部分:

  1. 用户名
  2. 密码,若为 x则表示密码保存在/etc/shadow
  3. UID,0 代表 root
  4. GID,表示所在组
  5. 描述信息,依次为 Full Name、Room Number、Work Phone、Home Phone 和 Other
  6. 用户主目录
  7. 默认 shell 类型

例如,假设 /etc/passwd文件中其中一行信息如下:

图片[4]-Linux 提权原理及10种提权姿势详解 | OSCP 备考指南 – 作者:爱安全学院iSecurityClub-安全小百科

其含义解读如下:

  • 用户名:test-user
  • 密码保存在 /etc/shadow
  • UID 为 1001
  • GID 为 1001
  • 描述信息: Full Name [test]: Room Number [11111]: Work Phone [111111-11]: Home Phone [222222-22]: Other [test]
  • 用户主目录为 /home/test-user
  • 默认 shell 为 /bin/bash

简单来说,当你登录 Linux 系统时会有以下几个步骤:

  1. 检测「输入的用户名」是否与 /etc/passwd文件中某一行第一个字段匹配。
  2. 若匹配成功,再对比该行第二个字段的密码,如果均匹配成功即登录成功。
  3. 登录成功之后所具有的权限,通过第三个字段 UID和第四个字段 GID确定。其中 UID=0代表 root 用户,也就是说——无论第一个字段代表的用户名是什么,只要 UID=0,则该账户就拥有 root 权限——这点在提权中非常重要。

由此可见,/etc/passwd文件在 linux 登录认证过程中起到非常关键的作用。

试想,如果我们能够对 /etc/passwd文件内容进行伪造、篡改,那就能很轻易的登录成功并获取任意用户权限。

不过一般情况下,只有 root 用户拥有对 /etc/passwd文件的写入权限,其他用户均只有读取权限。但有时候由于系统管理员的错误配置,也会给我们带来可乘之机。

「通过 /etc/passwd 文件提权」

通常来说,通过 /etc/passwd提权的方法有两种:

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

场景一:/etc/passwd 具有写权限

简单介绍:/etc/passwd权限配置错误,造成普通用户具有写权限。

开始实验

使用 whomai查看当前用户:

图片[5]-Linux 提权原理及10种提权姿势详解 | OSCP 备考指南 – 作者:爱安全学院iSecurityClub-安全小百科

使用 id查看 用户组 id信息:

1607658143_5fd2ea9f110466d6ca647.jpg!small?1607658143169

通过上图中的信息可以看到,当前用户组为普通用户组 tomcat-syl,也没有明显可进一步利用的信息。

接下来使用如下命令查看 /etc/passwd和 /etc/shadow文件的权限:

ls -alh /etc/passwd /etc/shadow

1607658184_5fd2eac822ccf976f3a02.jpg!small?1607658184269

结果如上图所示,可以发现由于运维人员的错误配置,导致「其他用户」对 /etc/passwd文件具有“写”权限

于是接下来的利用思路就是:

“自己构造一行用户数据添加到 passwd 文件中,用户名和密码自定义,并且将 UID设置为 0,此时我们登陆就可以获取 root 权限。”

使用如下命令查看 passwd 文件中 root 用户数据的格式,以此为参考来构造我们的用户数据:

cat /etc/passwd|grep root

图片[8]-Linux 提权原理及10种提权姿势详解 | OSCP 备考指南 – 作者:爱安全学院iSecurityClub-安全小百科

得到的结果是:

root:x:0:0:root:/root:/bin/bash

第一步-先设置用户名:将用户名从 root 修改为其他任意用户名即可,例如 syl-passwd:

syl-passwd:x:0:0:root:/root:/bin/bash

第二步-设置密码:之前讲到过,第二个字段 x 表示该用户密码存放在 /etc/shadow文件中,如果密码不用存在 /etc/shadow中,可以直接将 x替换为 「密码」即可。

但需要注意的是,这里的「密码」并不是指明文密码,而是经过 hash 算法加密之后的密文字符串,那如何计算 hash 字符串呢?我们可以使用 openssl套件。

使用 openssl创建一个密码为 pass123 的 linux hash,命令如下:

openssl passwd -1 -salt ignite pass123

参数解释:

  • -1 :使用 MD5 hash 算法
  • -salt :对 hash 算法加 “盐”

图片[9]-Linux 提权原理及10种提权姿势详解 | OSCP 备考指南 – 作者:爱安全学院iSecurityClub-安全小百科

计算得到的 hash 为$1$ignite$3eTbJm98O9Hz.k1NTdNxe1,用它来替换 x,最终我们构造出的 passwd 用户数据如下:

syl-passwd:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash

接下来将它添加到 passwd 文件中:

echo 'syl-passwd:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash' >> /etc/passwd

注意:

  1. 必须使用单引号,不能使用双引号
  2. 使用 >>,而不是 >

使用如下命令确认我们添加成功:

cat /etc/passwd|grep syl-passwd

图片[10]-Linux 提权原理及10种提权姿势详解 | OSCP 备考指南 – 作者:爱安全学院iSecurityClub-安全小百科

确认添加成功后,接下来我们使用 su syl-passwd切换到 syl-passwd 用户,密码为 pass123:

图片[11]-Linux 提权原理及10种提权姿势详解 | OSCP 备考指南 – 作者:爱安全学院iSecurityClub-安全小百科

如上图所示,可以看到我们切换成功之后,我们成功获取到 Linux 系统的最高权限 —— root 权限。

场景二:/etc/passwd 存储用户密码 hash

简单介绍:/etc/passwd中存储密码 hash,而不是存储在 /etc/shadow中。

开始实验

和之前一样,使用如下命令查看 /etc/passwd和 /etc/shadow文件的权限:

ls -alh /etc/passwd /etc/shadow

图片[12]-Linux 提权原理及10种提权姿势详解 | OSCP 备考指南 – 作者:爱安全学院iSecurityClub-安全小百科

但是发现权限配置都是正确的,普通用户只具有 /etc/passwd文件的权限。

接下来查看 /etc/passwd文件的内容:

cat /etc/passwd

图片[13]-Linux 提权原理及10种提权姿势详解 | OSCP 备考指南 – 作者:爱安全学院iSecurityClub-安全小百科

发现存在这样一行内容:

root:$1$ignite$J98A8EVPG1O40.WnwrPEM1:0:0:root:/root:/bin/bash

这种情况一般是由于该主机曾经被入侵过,或者运维人员的错误配置造成的,这样我们就获得了 root 用户的密码 hash,但是如何利用呢?

这就要使用到 hash 破解神器——john,该工具在 Kali 上是默认安装的,但在 ubuntu 上需要自己安装。 打开一个新终端,输入如下命令进行安装:

sudo apt install john

图片[14]-Linux 提权原理及10种提权姿势详解 | OSCP 备考指南 – 作者:爱安全学院iSecurityClub-安全小百科

john 会调用指定字典对 hash 字符串进行破解,破解时间取决于字典大小和计算机性能。john 支持使用内置字典,也可以指定自定义字典,本课程中我们使用 john 自带字典完成破解。

先将之前获取到的 root 用户 hash 写入文件 hash.txt 中:

# 此处必须单引号
echo 'root:$1$ignite$J98A8EVPG1O40.WnwrPEM1:0:0:root:/root:/bin/bash' > ~/hash.txt

然后使用 john 进行破解:

john ~/hash.txt

图片[15]-Linux 提权原理及10种提权姿势详解 | OSCP 备考指南 – 作者:爱安全学院iSecurityClub-安全小百科

如上图所示,john 成功破解出密码为 hello。(由于此实验中密码比较简单,故 john 破解速度非常快,实际环境中由于密码复杂度可能更高,破解时间会更长。)

我们再回到 tomcat-syl用户 shell 中,使用 su 命令切换到 root 用户(输入密码时,不会有显示):

图片[16]-Linux 提权原理及10种提权姿势详解 | OSCP 备考指南 – 作者:爱安全学院iSecurityClub-安全小百科

至此,我们成功提权到 root 用户。

注意:

john 工具对于同一个破解文件中的同一条 hash 记录只会爆破一次,如果第二次执行 john ~/hash.txt是不会得到结果的,只会得到如下输出:

图片[17]-Linux 提权原理及10种提权姿势详解 | OSCP 备考指南 – 作者:爱安全学院iSecurityClub-安全小百科

如果想查看上一次爆破的结果,需要使用 --show参数:

图片[18]-Linux 提权原理及10种提权姿势详解 | OSCP 备考指南 – 作者:爱安全学院iSecurityClub-安全小百科

「本章实验总结」

在本节实验中,我们学习了 Linux 系统登录认证的过程,/etc/passwd文件的意义,并通过做实验的方式对 Linux 系统 passwd 文件提权方法有了深入的理解。

祝你在接下来的课程中学习愉快,学有所获~

课后思考题

我们将构造的数据添加到 passwd 中时使用的命令如下:

echo 'syl-passwd:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash' >> /etc/passwd
  1. 为什么必须使用单引号呢?

0x2 其他提权方法

更多提权技巧详解,请见《渗透测试方法论之 Linux 提权》,我们真心的希望能帮到你,同时也感谢你的支持。

v2-0b68d3f93cc8dbd9afbbe899b85bbb1a_1440w.jpg

来源:freebuf.com 2020-12-11 12:33:43 by: 爱安全学院iSecurityClub

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论