Linux提权-02 sudo提权

server/2025/1/20 5:59:10/

文章目录

  • 1. sudo 提权原理
    • 1.1 原理
    • 1.2 sudo文件配置
  • 2. 提权利用方式
    • 2.1 sudo权限分配不当
    • 2.2 sudo脚本篡改
    • 2.3 sudo脚本参数利用
    • 2.4 sudo绕过路径执行
    • 2.5 sudo LD_PRELOAD环境变量
    • 2.6 sudo caching
    • 2.7 sudo令牌进程注入
  • 3. 参考

1. sudo 提权原理

1.1 原理

sudo是一个用于在Linux和类Unix系统中以超级用户(root)或其他用户身份执行命令的程序。它的全称是 “superuser do”,允许普通用户以更高权限运行命令。
在这里插入图片描述

sudo 命令的工作原理是通过suid权限来实现的。具体来说,它的工作过程可以简要概述如下:

  1. 设置 setuid 权限:sudo 程序本身被设置了 setuid 属性,这意味着当任何用户执行这个程序时,它会以程序拥有者(通常是 root)的权限运行。

  2. 执行权限继承:当用户执行 sudo 后面跟随的命令时,这个命令会继承 sudo 的权限。在这种情况下,虽然用户是普通用户,但由于 sudo 在以 root 用户的身份执行,随后的命令则也可以在 root 权限下运行。

  3. 权限验证:在执行命令之前,sudo 会检查用户在/etc/sudoers文件中的配置,确保该用户被授权运行指定的命令。如果用户没有权限,则会被拒绝执行。

  4. 审计和日志:sudo 还会记录所有使用 sudo 的命令,这样管理员可以审计用户的行为,以确保系统安全。

总体流程可以用以下流程来表示:

用户执行 sudo command 命令↓└── 检查用户权限(/etc/sudoers)↓└── command 继承 root 权限执行命令

1.2 sudo文件配置

*****************GPT生成***************
在 Linux 系统中,sudoers 文件用于定义哪些用户或用户组可以使用 sudo 命令,并在使用时可以执行哪些命令。通过对 sudoers 文件的配置,管理员能够为用户提供特定的权限控制。

编辑 sudoers 文件

要安全地编辑 sudoers 文件,推荐使用 visudo 命令,因其会进行语法检查,防止语法错误导致的安全风险。

打开终端输入以下命令:

sudo visudo

这将打开 sudoers 文件,通常使用 vi 或者 nano 编辑器。

基本配置格式

sudorers 文件的基本格式如下:

user    host = (runas) command
  • user:指定用户或用户组。
  • host:允许执行命令的主机(通常使用 ALL 表示所有主机)。
  • (runas):指定用户在执行该命令时可以以哪个用户身份运行(使用 ALL 表示以所有用户身份运行)。
  • command:允许用户执行的命令,可以使用 ALL 表示所有命令,也可以指定具体的命令路径。

示例配置

  1. 允许用户 alice 执行所有命令:

    alice ALL=(ALL) ALL
    
  2. 允许用户组 admin 以任何用户身份运行所有命令:

    %admin ALL=(ALL) ALL
    
  3. 允许用户 bob 在不需要密码的情况下执行 /usr/bin/systemctl 命令:

    bob ALL=(ALL) NOPASSWD: /usr/bin/systemctl
    
  4. 只允许用户 charlie 执行 /usr/bin/apt/usr/bin/dpkg 命令:

    charlie ALL=(ALL) /usr/bin/apt, /usr/bin/dpkg
    

其他常用选项

  • NOPASSWD:用户可以不输入密码执行特定命令。
  • Defaults:用于设置默认行为,例如锁定 sudo 命令的执行超时等。
    Defaults timestamp_timeout=15
    

保存和退出

在编辑结束后:

  • 如果使用 vi:按 Esc,输入 :wq,然后按 Enter 保存并退出。
  • 如果使用 nano:按 Ctrl+X,然后根据提示选择 Y 来确认保存。

注意事项

  1. 使用 visudo:始终通过 visudo 编辑 sudoers 文件,以避免语法错误。
  2. 备份:在修改前备份 sudoers 文件。
    sudo cp /etc/sudoers /etc/sudoers.bak
    
  3. 权限限制:尽量给用户分配最小权限,避免不必要的安全风险。

2. 提权利用方式

sudo权限配置不当,如果这些可执行文件本身又可以调用其他可执行文件,或者可以更改系统的一些配置选项,就可以达到提权的目的。

2.1 sudo权限分配不当

使用sudo -l查看当前sudo配置,看当前用户可以使用sudo执行的命令。 一些可用于执程序的命令可直接用于提权。

路径提权命令路径提权命令
/usr/bin/bashbash -p/usr/bin/findfind /etc/passwd -exec bash -p
/usr/bin/cshcsh -p/usr/bin/awkawk ‘BEGIN {system(“/bin/bash”)}’
/usr/bin/shsh -p/usr/bin/man!/bin/bash
/usr/bin/kshksh -p/usr/bin/more!/bin/bash
/usr/bin/zshzsh -p/usr/bin/less!/bin/bash

2.2 sudo脚本篡改

管理员将某个shell脚本设置为sudo免密执行,且低权限用户对其可写,那么可将后门程序或反弹shell的代码写入该脚本,完成提权。
在这里插入图片描述

2.3 sudo脚本参数利用

回到2.2中的脚本,在无权限修改脚本内容时,可以通过阅读脚本代码来判断此脚本是否允许带入参数执行。如果脚本允许带参数执行且该参数可控,也可以进行提权。
在这里插入图片描述

2.4 sudo绕过路径执行

管理员在配置sudoers文件时使用了通配符,可利用这种情况执行命令或读取敏感文件。
在这里插入图片描述

2.5 sudo LD_PRELOAD环境变量

2.6 sudo caching

2.7 sudo令牌进程注入

3. 参考

[1] 《权限提升技术-攻防实战与技巧》
[2] Linux SUID提权
[3] sudo官网


http://www.ppmy.cn/server/159815.html

相关文章

Git 基本常用指令

一、创建代码库 二、文件终端运行 其他:解决超过 200M 的文件 https://help.aliyun.com/zh/yunxiao/user-guide/how-to-use-git-lfs?spma2c4g.11186623.help-menu-150040.d_2_4_13_0_2.3a5d4212F4Qv6y 从步骤二开始:

KubeSphere部署安装,接入KubeKey安装的k8s集群

KubeSphere安装接入KubeKey安装的k8s集群 文章目录 KubeSphere安装接入KubeKey安装的k8s集群 一.NFS安装配置1.服务器安装NFS服务2.下载并部署 NFS Subdir External Provisioner1).下载部署文件2).创建 NameSpace3).创建 RBAC 资源4).配置 deployment.yaml5).部署 Storage Clas…

【数据分享】1929-2024年全球站点的逐日平均气温数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,其中又以气温指标最为常用!说到气温数据,最详细的气温数据是具体到气象监测站点的气温数据!本次我们为大家带来的就是具体到气象监…

二十三种设计模式-代理模式

一、定义与核心思想 代理模式是一种结构型设计模式,其核心思想是提供一个代理对象,用以控制对实际对象的访问。通过代理对象,可以在不改变实际对象的情况下,添加各种功能,如权限控制、懒加载、缓存、远程调用等。 二…

数据结构题目 课时7

题目 1、由树转换成二叉树,其根的右孩子指针总是空的。( ) 2、画出下列二叉树对应的森林。 3、设森林 F 对应的二叉树为 B,它有 m 个结点,B 的根为 P,P 的右子树的结点个数为 n,森林 F 中第一…

js中处理树形数据

平时开发中会经常碰到树形数据,而我们存储的数据往往是扁平的数据,需要在前端或者后端对数据进行进一步处理成前端组件需要的树形数据。在操作完树形数据后再转换成扁平数据发给后端。下面JavaScript 中处理树形数据的方法,包括构建树和解析树…

Android CustomTextField

在 Compose 中开发用户界面时,需要处理输入框和键盘的交互,例如在键盘弹出时调整布局位置,避免遮挡重要内容。本篇博客将通过一个完整的示例展示如何实现这一功能。 功能概述 本例实现了一个简单的输入框。当输入框获得焦点或输入文字时&…

QT 如何禁止QComboBox鼠标滚轮

一般情况下,QComboBox会相应鼠标的滚轮事件,即当鼠标停靠在QComboBox上方时,滚动鼠标滚轮,QComboBox的选项会发生切换。但这或许并不是我们希望所出现的,尤其是当QComboBox嵌入在QScrollArea中时,用户只是想…