Linux提权系列19: [训练营]利用linux能力漏洞2
2023-4-13 00:6:52 Author: 奶牛安全(查看原文) 阅读量:18 收藏

在本文中,介绍另一组在传统上需要在系统中进行 DAC 权限验证的能力。例如,绕过目录的读取和执行权限和文件的只读权限。

CAP_DAC_READ_SEARCH

在本实验中,当在根目录中递归检查能力时,发现 tar 程序具有 dac_read_search

当任何程序在有效集中具有 cap_dac_read_search 时,这意味着它可以读取目录下任何文件和进行执行权限的操作。该程序无法在目录中创建任何文件或修改现有文件,因为它需要写权限,但这个能力不包括写权限。

因为在这种情况下, tar 具有此权限。虽然不能直接升级权限,但如果幸运的话,在检索/etc/shadow文件后破解哈希密码。可以通过创建简单tar来包含 /etc/shadow ,然后再将其解压缩。

由于在本实验中,root 用户的哈希值是flag,所以, 搞掂。

CAP_DAC_READ_SEARCH 2

这次在根目录中递归检查,发现python3.6python3.6m。区别在https://stackoverflow.com/questions/16675865/difference-between-python3-and-python3m-executables/16677339#16677339

在生成 ls 命令以检查 /root 目录中的文件时,执行失败,因为系统试图启动一个新进程并且它没有 cap_dac_read_search 。所以, 不能列出这些文件。

我生成了另一个 I/O 阻塞命令 (cat) 并从 proc 文件系统检查了它的,发现该进程由 python使用os.system 函数创建,不继承这些

因此,使用pythonos.listdir函数对/root目录进行枚举动作。在获得文件名,使用python内置函数open来打开,再读出第一行。

CAP_DAC_OVERRIDE

在这个实验,在根目录递归获取程序文件的能力时, 发现在这种情况下,vim.basic 程序在有效集合中具有 dac_override 能力

当程序具有 cap_dac_override 能力时,它可以绕过系统中任何文件的所有读写和执行检查。可以说是对任何文件的cap_dac_read_search + 写权限

由于本实验安装了 sudo 程序,这意味着可以将以下配置写入 /etc/sudoers 文件并使用 sudo su 升级到 root 用户

student ALL=(ALL:ALL) NOPASSWD: ALL

通过 vim.basic 程序打开 /etc/sudoers 文件,在文件中任意一行添加上面一行,并用 :x!命令。现在,如果使用 sudo -l 检查当前用户的 sudo 权限,会发现当前用户无需输入密码即可以 root 以用户身份执行任何命令。

现在需要做的就是通过 root 用户登录并读取标志文件。在 Linux 中,可以通过 sudo su - 命令执行此操作

CAP_DAC_OVERRIDE 2

在这个实验,在根目录递归获取程序文件的能力时, 发现在这种情况下,python 程序在有效集合中具有 dac_override 能力

正如在之前的讨论中所演示的,可以在导入 os 模块后使用 os.listdir() 函数列出/root 下的文件,然后以读取模式打开标志文件以获取其内容。

或者,可以更新 /etc/passwd 文件中的密码并通过 su 命令执行登录。由于不能从 python 生成新的文本编辑器进程,因为 python 的能力不会被新进程继承。可以以读取模式打开文件,更新root用户的内容以并再次保存文件

可以使用下面编写的代码

#!/usr/bin/python2.7

import sys

password = sys.argv[1]

contents = []
with open("/etc/passwd"as file:
    for line in file:
        if line.startswith("root"):
            contents.append(line.replace(":x:"":%s:" % password))
        else:
            contents.append(line)
    pass

with open("/etc/passwd""w"as file:
    file.writelines(contents)

print("done")

现在使用 openssl 工具创建一个密码,并将其作为第一个参数传递给漏洞利用脚本。这将更新 /etc/passwd 中的密码

由于现在修改了密码,可以通过su命令进行简单登录,输入openssl命令创建的密码,读取flag文件

暗号:070257


文章来源: http://mp.weixin.qq.com/s?__biz=MzU4NjY0NTExNA==&mid=2247489151&idx=1&sn=65b4ad6df2dd67b2637b7ca27a191074&chksm=fdf97d6aca8ef47c485c1d38d57eb05fc087f0f8c509c43a7ed2e6d9ebd88487500492e3f211#rd
如有侵权请联系:admin#unsafe.sh